From 02dcccc11cd74017929a7bf9638e600f9df03c11 Mon Sep 17 00:00:00 2001 From: Gilbert Date: Tue, 8 May 2012 22:49:14 -0500 Subject: [PATCH 1/2] Use #as_hash method if available. --- lib/dm-serializer/to_json.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/dm-serializer/to_json.rb b/lib/dm-serializer/to_json.rb index 63e12d6..b3b15f7 100644 --- a/lib/dm-serializer/to_json.rb +++ b/lib/dm-serializer/to_json.rb @@ -16,6 +16,8 @@ module Serializer # @since 1.0.1 # def as_json(options = {}) + return as_hash(options) if respond_to?(:as_hash) + options = {} if options.nil? result = {} From f679aa1fd2129aa1d3089501d3b25bf165b54943 Mon Sep 17 00:00:00 2001 From: Gilbert Date: Wed, 9 May 2012 01:54:00 -0500 Subject: [PATCH 2/2] Added a quick test. --- spec/fixtures/magician.rb | 13 +++++++++++++ spec/public/to_json_spec.rb | 5 +++++ 2 files changed, 18 insertions(+) create mode 100644 spec/fixtures/magician.rb diff --git a/spec/fixtures/magician.rb b/spec/fixtures/magician.rb new file mode 100644 index 0000000..fb2b2c7 --- /dev/null +++ b/spec/fixtures/magician.rb @@ -0,0 +1,13 @@ + +class BoringGuy + include DataMapper::Resource + + property :id, Integer, :key => true + property :name, String, :default => 'Bob' +end + +class Magician < BoringGuy + def as_hash(options) + { :name => 'The Magical Maestro' } + end +end diff --git a/spec/public/to_json_spec.rb b/spec/public/to_json_spec.rb index e3a8919..f60aefd 100644 --- a/spec/public/to_json_spec.rb +++ b/spec/public/to_json_spec.rb @@ -72,4 +72,9 @@ def deserialize(result) it "serializes Discriminator types as strings" do Motorcycle.new.as_json[:type].should == "Motorcycle" end + + it "should use #as_hash when available" do + BoringGuy.new.as_json[:name].should == "Bob" + Magician.new.as_json[:name].should == "The Magical Maestro" + end end