Repository URL to install this package:
|
Version:
1.0.0.pre ▾
|
module ActiveAdmin
class ResourceController < BaseController
module Decorators
protected
def apply_decorator(resource)
decorate? ? decorator_class.new(resource) : resource
end
def apply_collection_decorator(collection)
if decorate?
collection_decorator.decorate collection, with: decorator_class
else
collection
end
end
def self.undecorate(resource)
if resource.respond_to?(:decorated?) && resource.decorated?
resource.model
else
resource
end
end
private
def decorate?
case action_name
when 'new', 'edit'
form = active_admin_config.get_page_presenter :form
form && form.options[:decorate] && decorator_class.present?
else
decorator_class.present?
end
end
def decorator_class
active_admin_config.decorator_class
end
# When using Draper, we wrap the collection draper in a new class that
# correctly delegates methods that Active Admin depends on.
def collection_decorator
if decorator_class
Wrapper.wrap decorator_class
end
end
class Wrapper
@cache = {}
def self.wrap(decorator)
collection_decorator = find_collection_decorator(decorator)
if draper_collection_decorator? collection_decorator
name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
@cache[name] ||= wrap! collection_decorator, name
else
collection_decorator
end
end
private
def self.wrap!(parent, name)
::Class.new parent do
delegate :reorder, :page, :current_page, :total_pages, :limit_value,
:total_count, :num_pages, :to_key, :group_values, :except,
:find_each
define_singleton_method(:name) { name }
end
end
# Draper::CollectionDecorator was introduced in 1.0.0
# Draper::Decorator#collection_decorator_class was introduced in 1.3.0
def self.find_collection_decorator(decorator)
if Dependency.draper? '>= 1.3.0'
decorator.collection_decorator_class
elsif Dependency.draper? '>= 1.0.0'
draper_collection_decorator
else
decorator
end
end
def self.draper_collection_decorator?(decorator)
decorator && decorator <= draper_collection_decorator
rescue NameError
false
end
def self.draper_collection_decorator
::Draper::CollectionDecorator
end
end
end
end
end