From e3d6d10e1ff669430c3d8678c196c52397c850ea Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sun, 28 Jun 2009 20:16:06 -0500 Subject: Ensure JSON serializer includes model naming --- activemodel/test/cases/json_serialization_test.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'activemodel/test') diff --git a/activemodel/test/cases/json_serialization_test.rb b/activemodel/test/cases/json_serialization_test.rb index abcec67a85..e50922493d 100644 --- a/activemodel/test/cases/json_serialization_test.rb +++ b/activemodel/test/cases/json_serialization_test.rb @@ -2,7 +2,6 @@ require 'cases/helper' class JsonSerializationTest < ActiveModel::TestCase class Contact - extend ActiveModel::Naming include ActiveModel::Serializers::JSON attr_accessor :name, :age, :created_at, :awesome, :preferences end -- cgit v1.2.3 From d2b78b3594b9cc9870e6a6ebfeb2e56d00e6ddb8 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sun, 28 Jun 2009 22:12:10 -0500 Subject: Initial extraction of AMo xml serializer --- activemodel/test/cases/json_serialization_test.rb | 63 ----------------- .../serializeration/json_serialization_test.rb | 77 ++++++++++++++++++++ .../serializeration/xml_serialization_test.rb | 81 ++++++++++++++++++++++ activemodel/test/models/contact.rb | 3 + 4 files changed, 161 insertions(+), 63 deletions(-) delete mode 100644 activemodel/test/cases/json_serialization_test.rb create mode 100644 activemodel/test/cases/serializeration/json_serialization_test.rb create mode 100644 activemodel/test/cases/serializeration/xml_serialization_test.rb create mode 100644 activemodel/test/models/contact.rb (limited to 'activemodel/test') diff --git a/activemodel/test/cases/json_serialization_test.rb b/activemodel/test/cases/json_serialization_test.rb deleted file mode 100644 index e50922493d..0000000000 --- a/activemodel/test/cases/json_serialization_test.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'cases/helper' - -class JsonSerializationTest < ActiveModel::TestCase - class Contact - include ActiveModel::Serializers::JSON - attr_accessor :name, :age, :created_at, :awesome, :preferences - end - - def setup - @contact = Contact.new - @contact.name = 'Konata Izumi' - @contact.age = 16 - @contact.created_at = Time.utc(2006, 8, 1) - @contact.awesome = true - @contact.preferences = { 'shows' => 'anime' } - end - - test "should include root in json" do - begin - Contact.include_root_in_json = true - json = @contact.to_json - - assert_match %r{^\{"contact":\{}, json - assert_match %r{"name":"Konata Izumi"}, json - assert_match %r{"age":16}, json - assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) - assert_match %r{"awesome":true}, json - assert_match %r{"preferences":\{"shows":"anime"\}}, json - ensure - Contact.include_root_in_json = false - end - end - - test "should encode all encodable attributes" do - json = @contact.to_json - - assert_match %r{"name":"Konata Izumi"}, json - assert_match %r{"age":16}, json - assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) - assert_match %r{"awesome":true}, json - assert_match %r{"preferences":\{"shows":"anime"\}}, json - end - - test "should allow attribute filtering with only" do - json = @contact.to_json(:only => [:name, :age]) - - assert_match %r{"name":"Konata Izumi"}, json - assert_match %r{"age":16}, json - assert_no_match %r{"awesome":true}, json - assert !json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) - assert_no_match %r{"preferences":\{"shows":"anime"\}}, json - end - - test "should allow attribute filtering with except" do - json = @contact.to_json(:except => [:name, :age]) - - assert_no_match %r{"name":"Konata Izumi"}, json - assert_no_match %r{"age":16}, json - assert_match %r{"awesome":true}, json - assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) - assert_match %r{"preferences":\{"shows":"anime"\}}, json - end -end diff --git a/activemodel/test/cases/serializeration/json_serialization_test.rb b/activemodel/test/cases/serializeration/json_serialization_test.rb new file mode 100644 index 0000000000..3e69db110e --- /dev/null +++ b/activemodel/test/cases/serializeration/json_serialization_test.rb @@ -0,0 +1,77 @@ +require 'cases/helper' +require 'models/contact' + +class Contact + include ActiveModel::Serializers::JSON +end + +class JsonSerializationTest < ActiveModel::TestCase + def setup + @contact = Contact.new + @contact.name = 'Konata Izumi' + @contact.age = 16 + @contact.created_at = Time.utc(2006, 8, 1) + @contact.awesome = true + @contact.preferences = { 'shows' => 'anime' } + end + + test "should include root in json" do + begin + Contact.include_root_in_json = true + json = @contact.to_json + + assert_match %r{^\{"contact":\{}, json + assert_match %r{"name":"Konata Izumi"}, json + assert_match %r{"age":16}, json + assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) + assert_match %r{"awesome":true}, json + assert_match %r{"preferences":\{"shows":"anime"\}}, json + ensure + Contact.include_root_in_json = false + end + end + + test "should encode all encodable attributes" do + json = @contact.to_json + + assert_match %r{"name":"Konata Izumi"}, json + assert_match %r{"age":16}, json + assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) + assert_match %r{"awesome":true}, json + assert_match %r{"preferences":\{"shows":"anime"\}}, json + end + + test "should allow attribute filtering with only" do + json = @contact.to_json(:only => [:name, :age]) + + assert_match %r{"name":"Konata Izumi"}, json + assert_match %r{"age":16}, json + assert_no_match %r{"awesome":true}, json + assert !json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) + assert_no_match %r{"preferences":\{"shows":"anime"\}}, json + end + + test "should allow attribute filtering with except" do + json = @contact.to_json(:except => [:name, :age]) + + assert_no_match %r{"name":"Konata Izumi"}, json + assert_no_match %r{"age":16}, json + assert_match %r{"awesome":true}, json + assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))})) + assert_match %r{"preferences":\{"shows":"anime"\}}, json + end + + test "methds are called on object" do + # Define methods on fixture. + def @contact.label; "Has cheezburger"; end + def @contact.favorite_quote; "Constraints are liberating"; end + + # Single method. + assert_match %r{"label":"Has cheezburger"}, @contact.to_json(:only => :name, :methods => :label) + + # Both methods. + methods_json = @contact.to_json(:only => :name, :methods => [:label, :favorite_quote]) + assert_match %r{"label":"Has cheezburger"}, methods_json + assert_match %r{"favorite_quote":"Constraints are liberating"}, methods_json + end +end diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb new file mode 100644 index 0000000000..57792e900e --- /dev/null +++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb @@ -0,0 +1,81 @@ +require 'cases/helper' +require 'models/contact' + +class Contact + include ActiveModel::Serializers::Xml +end + +class XmlSerializationTest < ActiveModel::TestCase + def setup + @contact = Contact.new + @contact.name = 'aaron stack' + @contact.age = 25 + @contact.created_at = Time.utc(2006, 8, 1) + @contact.awesome = false + @contact.preferences = { :gem => 'ruby' } + end + + test "should serialize default root" do + @xml = @contact.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 + assert_match %r{$}, @xml + end + + test "should serialize custom root" do + @xml = @contact.to_xml :root => 'xml_contact' + assert_match %r{^}, @xml + assert_match %r{$}, @xml + end + + test "should allow undasherized tags" do + @xml = @contact.to_xml :root => 'xml_contact', :dasherize => false + assert_match %r{^}, @xml + assert_match %r{$}, @xml + assert_match %r{ 'xml_contact', :camelize => true + assert_match %r{^}, @xml + assert_match %r{$}, @xml + assert_match %r{ true + assert %r{25}.match(@xml) + end + + test "should include yielded additions" do + @xml = @contact.to_xml do |xml| + xml.creator "David" + end + assert_match %r{David}, @xml + end + + test "should serialize string" do + assert_match %r{aaron stack}, @contact.to_xml + end + + test "should serialize integer" do + assert_match %r{25}, @contact.to_xml + end + + test "should serialize datetime" do + assert_match %r{2006-08-01T00:00:00Z}, @contact.to_xml + end + + test "should serialize boolean" do + assert_match %r{false}, @contact.to_xml + end + + test "should serialize yaml" do + assert_match %r{--- \n:gem: ruby\n}, @contact.to_xml + end +end diff --git a/activemodel/test/models/contact.rb b/activemodel/test/models/contact.rb new file mode 100644 index 0000000000..7d69c91996 --- /dev/null +++ b/activemodel/test/models/contact.rb @@ -0,0 +1,3 @@ +class Contact + attr_accessor :name, :age, :created_at, :awesome, :preferences +end -- cgit v1.2.3 From 2685d93b0728b647b6f49f3e1802c779d5fb9867 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 20 Jul 2009 23:28:58 -0500 Subject: Kill AMo ivar attributes helper --- activemodel/test/cases/attributes_test.rb | 30 ---------------------- .../serializeration/json_serialization_test.rb | 4 +++ .../serializeration/xml_serialization_test.rb | 4 +++ 3 files changed, 8 insertions(+), 30 deletions(-) delete mode 100644 activemodel/test/cases/attributes_test.rb (limited to 'activemodel/test') diff --git a/activemodel/test/cases/attributes_test.rb b/activemodel/test/cases/attributes_test.rb deleted file mode 100644 index 5f3ea839a4..0000000000 --- a/activemodel/test/cases/attributes_test.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'cases/helper' - -class AttributesTest < ActiveModel::TestCase - class Person - include ActiveModel::Attributes - attr_accessor :name - end - - test "reads attribute" do - p = Person.new - assert_equal nil, p.read_attribute(:name) - - p.name = "Josh" - assert_equal "Josh", p.read_attribute(:name) - end - - test "writes attribute" do - p = Person.new - assert_equal nil, p.name - - p.write_attribute(:name, "Josh") - assert_equal "Josh", p.name - end - - test "returns all attributes" do - p = Person.new - p.name = "Josh" - assert_equal({"name" => "Josh"}, p.attributes) - end -end diff --git a/activemodel/test/cases/serializeration/json_serialization_test.rb b/activemodel/test/cases/serializeration/json_serialization_test.rb index 3e69db110e..6227aedc39 100644 --- a/activemodel/test/cases/serializeration/json_serialization_test.rb +++ b/activemodel/test/cases/serializeration/json_serialization_test.rb @@ -3,6 +3,10 @@ require 'models/contact' class Contact include ActiveModel::Serializers::JSON + + def attributes + instance_values + end end class JsonSerializationTest < ActiveModel::TestCase diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb index 57792e900e..e459f6433a 100644 --- a/activemodel/test/cases/serializeration/xml_serialization_test.rb +++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb @@ -3,6 +3,10 @@ require 'models/contact' class Contact include ActiveModel::Serializers::Xml + + def attributes + instance_values + end end class XmlSerializationTest < ActiveModel::TestCase -- cgit v1.2.3 From 6944b391cddbf1a3ffb3ac4ac588fa4b3d50f430 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 21 Jul 2009 00:13:26 -0500 Subject: Kill AMo Base --- activemodel/test/cases/observing_test.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'activemodel/test') diff --git a/activemodel/test/cases/observing_test.rb b/activemodel/test/cases/observing_test.rb index 564451fa2f..fbf93c19ef 100644 --- a/activemodel/test/cases/observing_test.rb +++ b/activemodel/test/cases/observing_test.rb @@ -1,6 +1,8 @@ require 'cases/helper' -class ObservedModel < ActiveModel::Base +class ObservedModel + include ActiveModel::Observing + class Observer end end @@ -17,7 +19,8 @@ class FooObserver < ActiveModel::Observer end end -class Foo < ActiveModel::Base +class Foo + include ActiveModel::Observing end class ObservingTest < ActiveModel::TestCase -- cgit v1.2.3 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