From a97a8cd24f3d31f6854a8c293e5a1e3918e2c2a9 Mon Sep 17 00:00:00 2001 From: ccocchi Date: Wed, 19 Sep 2012 17:36:57 +0200 Subject: [PATCH] Add root in DSL --- CHANGELOG.md | 1 + lib/rabl-rails/compiler.rb | 4 ++++ test/compiler_test.rb | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb479a8..3620461 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # CHANGELOG ## 0.2.0 (unrelased) + * Add `root` in DSL to set root without changing the source * Add XML renderer * Use MultiJson's preferred JSON engine as default (shmeltex) * Default template to render with responder can be set per controller diff --git a/lib/rabl-rails/compiler.rb b/lib/rabl-rails/compiler.rb index eb2f9a5..357e2c2 100644 --- a/lib/rabl-rails/compiler.rb +++ b/lib/rabl-rails/compiler.rb @@ -30,6 +30,10 @@ module RablRails end alias_method :collection, :object + def root(name) + @template.root_name = name + end + # # Includes the attribute or method in the output # Example: diff --git a/test/compiler_test.rb b/test/compiler_test.rb index b9f8fcc..d2d8c8f 100644 --- a/test/compiler_test.rb +++ b/test/compiler_test.rb @@ -24,6 +24,16 @@ class CompilerTest < ActiveSupport::TestCase assert_equal({}, t.source) end + test "root can be defined via keyword" do + t = @compiler.compile_source(%{ root :author }) + assert_equal :author, t.root_name + end + + test "root keyword override object root" do + t = @compiler.compile_source(%{ object :@user ; root :author }) + assert_equal :author, t.root_name + end + test "collection set the data for the template" do t = @compiler.compile_source(%{ collection :@user }) assert_equal :@user, t.data @@ -42,7 +52,7 @@ class CompilerTest < ActiveSupport::TestCase assert_equal :@user, t.data assert_equal :users, t.root_name end - + test "root can be set to false via options" do t = @compiler.compile_source(%( object :@user, root: false)) assert_equal false, t.root_name @@ -154,7 +164,7 @@ class CompilerTest < ActiveSupport::TestCase assert_equal({ :user => { :_data => :@user, :id => :id } }, t.source) assert_equal false, t.data end - + test "name extraction from argument" do assert_equal [:@users, 'users'], @compiler.send(:extract_data_and_name, :@users) assert_equal [:users, :users], @compiler.send(:extract_data_and_name, :users)