summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/redmine/views/builders/structure.rb6
-rw-r--r--test/unit/lib/redmine/views/builders/json_test.rb13
-rw-r--r--test/unit/lib/redmine/views/builders/xml_test.rb13
3 files changed, 31 insertions, 1 deletions
diff --git a/lib/redmine/views/builders/structure.rb b/lib/redmine/views/builders/structure.rb
index 06e176937..50a81487f 100644
--- a/lib/redmine/views/builders/structure.rb
+++ b/lib/redmine/views/builders/structure.rb
@@ -43,7 +43,11 @@ module Redmine
end
else
if @struct.last.is_a?(Array)
- @struct.last << (args.last || {}).merge(:value => args.first)
+ if args.size == 1 && !block_given?
+ @struct.last << args.first
+ else
+ @struct.last << (args.last || {}).merge(:value => args.first)
+ end
else
@struct.last[sym] = args.first
end
diff --git a/test/unit/lib/redmine/views/builders/json_test.rb b/test/unit/lib/redmine/views/builders/json_test.rb
index 1f09f3718..8e09d9b29 100644
--- a/test/unit/lib/redmine/views/builders/json_test.rb
+++ b/test/unit/lib/redmine/views/builders/json_test.rb
@@ -73,6 +73,19 @@ class Redmine::Views::Builders::JsonTest < ActiveSupport::TestCase
end
end
+ def test_nested_arrays
+ assert_json_output({'books' => [{'authors' => ['B. Smith', 'G. Cooper']}]}) do |b|
+ b.array :books do |books|
+ books.book do |book|
+ book.array :authors do |authors|
+ authors.author 'B. Smith'
+ authors.author 'G. Cooper'
+ end
+ end
+ end
+ end
+ end
+
def assert_json_output(expected, &block)
builder = Redmine::Views::Builders::Json.new
block.call(builder)
diff --git a/test/unit/lib/redmine/views/builders/xml_test.rb b/test/unit/lib/redmine/views/builders/xml_test.rb
index cdac8da2b..0f895cc93 100644
--- a/test/unit/lib/redmine/views/builders/xml_test.rb
+++ b/test/unit/lib/redmine/views/builders/xml_test.rb
@@ -46,6 +46,19 @@ class Redmine::Views::Builders::XmlTest < ActiveSupport::TestCase
end
end
+ def test_nested_arrays
+ assert_xml_output('<books type="array"><book><authors type="array"><author>B. Smith</author><author>G. Cooper</author></authors></book></books>') do |b|
+ b.array :books do |books|
+ books.book do |book|
+ book.array :authors do |authors|
+ authors.author 'B. Smith'
+ authors.author 'G. Cooper'
+ end
+ end
+ end
+ end
+ end
+
def assert_xml_output(expected, &block)
builder = Redmine::Views::Builders::Xml.new
block.call(builder)