diff --git a/lib/draper.rb b/lib/draper.rb index 52b146a..41b511f 100644 --- a/lib/draper.rb +++ b/lib/draper.rb @@ -1,5 +1,8 @@ require 'action_view' +require 'active_model/naming' require 'active_model/serialization' +require 'active_model/serializers/json' +require 'active_model/serializers/xml' require 'active_support/inflector' require 'active_support/core_ext/hash/keys' require 'active_support/core_ext/hash/reverse_merge' diff --git a/lib/draper/decorator.rb b/lib/draper/decorator.rb index ad86e83..534ba35 100755 --- a/lib/draper/decorator.rb +++ b/lib/draper/decorator.rb @@ -2,7 +2,10 @@ module Draper class Decorator include Draper::ViewHelpers extend Draper::Delegation + include ActiveModel::Serialization + include ActiveModel::Serializers::JSON + include ActiveModel::Serializers::Xml # @return the object being decorated. attr_reader :source diff --git a/spec/dummy/spec/decorators/post_decorator_spec.rb b/spec/dummy/spec/decorators/post_decorator_spec.rb index 7f1b738..97feeb5 100755 --- a/spec/dummy/spec/decorators/post_decorator_spec.rb +++ b/spec/dummy/spec/decorators/post_decorator_spec.rb @@ -40,6 +40,17 @@ describe PostDecorator do expect(decorator.serializable_hash["updated_at"]).to be :overridden end + it "serializes to JSON" do + json = decorator.to_json + expect(json).to match /^{"post":{.+}}$/ + expect(json).to match /"updated_at":"overridden"/ + end + + it "serializes to XML" do + xml = Capybara.string(decorator.to_xml) + expect(xml).to have_css "post > updated-at", text: "overridden" + end + it "uses a test view context from ApplicationController" do expect(Draper::ViewContext.current.controller).to be_an ApplicationController end