-
Notifications
You must be signed in to change notification settings - Fork 526
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
220 additions
and
128 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
yardoc 'lib/draper/**/*.rb' -m markdown | ||
yardoc 'lib/draper/**/*.rb' -m markdown --no-private |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
||
def decorator_class | ||
self.class.decorator_class | ||
end | ||
|
||
def applied_decorators | ||
[] | ||
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 decorated_with?(decorator_class) | ||
false | ||
end | ||
# (see ClassMethods#decorator_class) | ||
def decorator_class | ||
self.class.decorator_class | ||
end | ||
|
||
def decorated? | ||
false | ||
end | ||
# The list of decorators that have been applied to the object. | ||
# | ||
# @return [Array<Class>] `[]` | ||
def applied_decorators | ||
[] | ||
end | ||
|
||
def ==(other) | ||
super || (other.respond_to?(:source) && self == other.source) | ||
end | ||
# (see Decorator#decorated_with?) | ||
# @return [false] | ||
def decorated_with?(decorator_class) | ||
false | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
module Draper | ||
# @private | ||
class DecoratedAssociation | ||
|
||
def initialize(owner, association, options) | ||
|
Oops, something went wrong.