diff --git a/lib/dm-serializer/to_json.rb b/lib/dm-serializer/to_json.rb index 38c2e2b..d7aa57c 100644 --- a/lib/dm-serializer/to_json.rb +++ b/lib/dm-serializer/to_json.rb @@ -21,7 +21,13 @@ def as_json(options = {}) properties_to_serialize(options).each do |property| property_name = property.name - result[property_name] = __send__(property_name) + value = __send__(property_name) + result[property_name] = case property + when DataMapper::Property::Discriminator + value.to_s + else + value + end end # add methods diff --git a/spec/fixtures/vehicle.rb b/spec/fixtures/vehicle.rb new file mode 100644 index 0000000..af7f8cd --- /dev/null +++ b/spec/fixtures/vehicle.rb @@ -0,0 +1,14 @@ +class Vehicle + include DataMapper::Resource + property :id, Serial + property :name, String + property :type, Discriminator +end + +class Car < Vehicle + +end + +class Motorcycle < Vehicle + +end diff --git a/spec/public/to_json_spec.rb b/spec/public/to_json_spec.rb index a349279..76ca6bf 100644 --- a/spec/public/to_json_spec.rb +++ b/spec/public/to_json_spec.rb @@ -68,4 +68,8 @@ def deserialize(result) it "handles nil for options" do expect { Cow.new.as_json(nil) }.to_not raise_error end + + it "serializes Discriminator types as strings" do + Motorcycle.new.as_json[:type].should == "Motorcycle" + end end