Merge pull request #616 from carnesmedia/undecorate

Draper.undecorate safely undecorates any object
This commit is contained in:
Steve Klabnik 2014-06-03 04:01:14 +03:00
commit 5a4bcf508d
3 changed files with 29 additions and 0 deletions

View File

@ -22,6 +22,7 @@ require 'draper/decorated_association'
require 'draper/helper_support'
require 'draper/view_context'
require 'draper/collection_decorator'
require 'draper/undecorate'
require 'draper/decorates_assigned'
require 'draper/railtie' if defined?(Rails)

9
lib/draper/undecorate.rb Normal file
View File

@ -0,0 +1,9 @@
module Draper
def self.undecorate(object)
if object.respond_to?(:decorated?) && object.decorated?
object.object
else
object
end
end
end

View File

@ -0,0 +1,19 @@
require 'spec_helper'
describe Draper, '.undecorate' do
it 'undecorates a decorated object' do
object = Model.new
decorator = Draper::Decorator.new(object)
expect(Draper.undecorate(decorator)).to equal object
end
it 'passes a non-decorated object through' do
object = Model.new
expect(Draper.undecorate(object)).to equal object
end
it 'passes a non-decorator object through' do
object = Object.new
expect(Draper.undecorate(object)).to equal object
end
end