diff --git a/lib/redmine/views/builders/structure.rb b/lib/redmine/views/builders/structure.rb index 9b94815..22d8647 100644 --- a/lib/redmine/views/builders/structure.rb +++ b/lib/redmine/views/builders/structure.rb @@ -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) diff --git a/test/unit/lib/redmine/views/builders/json_test.rb b/test/unit/lib/redmine/views/builders/json_test.rb index 919fe22..448965b 100644 --- a/test/unit/lib/redmine/views/builders/json_test.rb +++ b/test/unit/lib/redmine/views/builders/json_test.rb @@ -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