lib/draper/decoratable.rb in draper-1.0.0.beta6 vs lib/draper/decoratable.rb in draper-1.0.0
- old
+ new
@@ -1,44 +1,83 @@
-module Draper::Decoratable
- extend ActiveSupport::Concern
+module Draper
+ # Provides shortcuts to decorate objects directly, so you can do
+ # `@product.decorate` instead of `ProductDecorator.new(@product)`.
+ #
+ # This module is included by default into `ActiveRecord::Base` and
+ # `Mongoid::Document`, but you're using another ORM, or want to decorate
+ # plain old Ruby objects, you can include it manually.
+ module Decoratable
+ extend ActiveSupport::Concern
- def decorate(options = {})
- decorator_class.decorate(self, options)
- end
+ # Decorates the object using the inferred {#decorator_class}.
+ # @param [Hash] options
+ # see {Decorator#initialize}
+ def decorate(options = {})
+ decorator_class.decorate(self, options)
+ end
- def decorator_class
- self.class.decorator_class
- end
+ # (see ClassMethods#decorator_class)
+ def decorator_class
+ self.class.decorator_class
+ end
- def applied_decorators
- []
- end
+ # The list of decorators that have been applied to the object.
+ #
+ # @return [Array<Class>] `[]`
+ def applied_decorators
+ []
+ end
- def decorated_with?(decorator_class)
- false
- end
+ # (see Decorator#decorated_with?)
+ # @return [false]
+ def decorated_with?(decorator_class)
+ false
+ end
- def decorated?
- false
- end
-
- def ==(other)
- super || (other.respond_to?(:source) && self == other.source)
- end
-
- module ClassMethods
- def decorate(options = {})
- decorator_class.decorate_collection(self.scoped, options)
+ # Checks if this object is decorated.
+ #
+ # @return [false]
+ def decorated?
+ false
end
- def decorator_class
- prefix = respond_to?(:model_name) ? model_name : name
- "#{prefix}Decorator".constantize
- rescue NameError
- raise Draper::UninferrableDecoratorError.new(self)
+ # Compares with possibly-decorated objects.
+ #
+ # @return [Boolean]
+ def ==(other)
+ super || (other.respond_to?(:source) && self == other.source)
end
- def ===(other)
- super || (other.respond_to?(:source) && super(other.source))
+ module ClassMethods
+
+ # Decorates a collection of objects. Used at the end of a scope chain.
+ #
+ # @example
+ # Product.popular.decorate
+ # @param [Hash] options
+ # see {Decorator.decorate_collection}.
+ def decorate(options = {})
+ decorator_class.decorate_collection(self.scoped, options)
+ end
+
+ # Infers the decorator class to be used by {Decoratable#decorate} (e.g.
+ # `Product` maps to `ProductDecorator`).
+ #
+ # @return [Class] the inferred decorator class.
+ def decorator_class
+ prefix = respond_to?(:model_name) ? model_name : name
+ "#{prefix}Decorator".constantize
+ rescue NameError
+ raise Draper::UninferrableDecoratorError.new(self)
+ end
+
+ # Compares with possibly-decorated objects.
+ #
+ # @return [Boolean]
+ def ===(other)
+ super || (other.respond_to?(:source) && super(other.source))
+ end
+
end
+
end
end