OSDN Git Service

Fixes unhandled case in json builder.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 4 Dec 2010 11:20:20 +0000 (11:20 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 4 Dec 2010 11:20:20 +0000 (11:20 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4464 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/views/builders/structure.rb
test/unit/lib/redmine/views/builders/json_test.rb

index 9b94815..22d8647 100644 (file)
@@ -36,7 +36,7 @@ module Redmine
           if args.any?
             if args.first.is_a?(Hash)
               if @struct.last.is_a?(Array)
-                @struct.last << args.first
+                @struct.last << args.first unless block
               else
                 @struct.last[sym] = args.first
               end
@@ -50,7 +50,7 @@ module Redmine
           end
           
           if block
-            @struct << {}
+            @struct << (args.first.is_a?(Hash) ? args.first : {})
             block.call(self)
             ret = @struct.pop
             if @struct.last.is_a?(Array)
index 919fe22..448965b 100644 (file)
@@ -51,6 +51,17 @@ class Redmine::Views::Builders::JsonTest < HelperTestCase
         b.book :title => 'Book 2', :author => 'G. Cooper'
       end
     end
+
+    assert_json_output({'books' => [{'title' => 'Book 1', 'author' => 'B. Smith'}, {'title' => 'Book 2', 'author' => 'G. Cooper'}]}) do |b|
+      b.array :books do |b|
+        b.book :title => 'Book 1' do
+          b.author 'B. Smith'
+        end
+        b.book :title => 'Book 2' do
+          b.author 'G. Cooper'
+        end
+      end
+    end
   end
   
   def test_array_with_content_tags