From c39151a84768397d3bb025c6e8f877eac59ebbf9 Mon Sep 17 00:00:00 2001 From: John Maxwell Date: Wed, 22 Jul 2009 20:47:15 -0500 Subject: Patch to ActiveModel's (and ActiveRecord, by association) XML serialization: If two parameters are present in Procs supplied to to_xml's :procs option, the model being serialized will be passed as the second argument [#2373 state:resolved] Signed-off-by: Joshua Peek --- .../test/cases/serializeration/xml_serialization_test.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'activemodel/test') diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb index e459f6433a..0737c4f2f9 100644 --- a/activemodel/test/cases/serializeration/xml_serialization_test.rb +++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb @@ -82,4 +82,16 @@ class XmlSerializationTest < ActiveModel::TestCase test "should serialize yaml" do assert_match %r{--- \n:gem: ruby\n}, @contact.to_xml end + + test "should call proc on object" do + proc = Proc.new { |options| options[:builder].tag!('nationality', 'unknown') } + xml = @contact.to_xml(:procs => [ proc ]) + assert_match %r{unknown}, xml + end + + test 'should supply serializable to second proc argument' do + proc = Proc.new { |options, record| options[:builder].tag!('name-reverse', record.name.reverse) } + xml = @contact.to_xml(:procs => [ proc ]) + assert_match %r{kcats noraa}, xml + end end -- cgit v1.2.3 From 272c504f919d187603915059572e37d3a78329cc Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Wed, 22 Jul 2009 21:06:34 -0500 Subject: Dasherize XML root by default to avoid invalid tags "..." [#2875 state:resolved] --- .../test/cases/serializeration/xml_serialization_test.rb | 11 +++++++++++ activemodel/test/models/contact.rb | 4 ++++ 2 files changed, 15 insertions(+) (limited to 'activemodel/test') diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb index 0737c4f2f9..428e5a6bd1 100644 --- a/activemodel/test/cases/serializeration/xml_serialization_test.rb +++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb @@ -9,6 +9,11 @@ class Contact end end +module Admin + class Contact < ::Contact + end +end + class XmlSerializationTest < ActiveModel::TestCase def setup @contact = Contact.new @@ -25,6 +30,12 @@ class XmlSerializationTest < ActiveModel::TestCase assert_match %r{$}, @xml end + test "should serialize namespaced root" do + @xml = Admin::Contact.new(@contact.attributes).to_xml + assert_match %r{^}, @xml + assert_match %r{$}, @xml + end + test "should serialize default root with namespace" do @xml = @contact.to_xml :namespace => "http://xml.rubyonrails.org/contact" assert_match %r{^}, @xml diff --git a/activemodel/test/models/contact.rb b/activemodel/test/models/contact.rb index 7d69c91996..f9fb0af027 100644 --- a/activemodel/test/models/contact.rb +++ b/activemodel/test/models/contact.rb @@ -1,3 +1,7 @@ class Contact attr_accessor :name, :age, :created_at, :awesome, :preferences + + def initialize(options = {}) + options.each { |name, value| send("#{name}=", value) } + end end -- cgit v1.2.3