From 0c5af16e14570a384e154430cd1e9fa123cdf579 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 29 Jan 2012 18:29:09 +0000 Subject: [PATCH] Support for nested array in API builder. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8720 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/views/builders/structure.rb | 6 +++++- test/unit/lib/redmine/views/builders/json_test.rb | 13 +++++++++++++ test/unit/lib/redmine/views/builders/xml_test.rb | 13 +++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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('B. SmithG. 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_xml_output(expected, &block) builder = Redmine::Views::Builders::Xml.new block.call(builder)