Sha256: de8a99cb4cc6f126152cae8758494583c364347180f38af7a525e304f45444b6
Contents?: true
Size: 1.97 KB
Versions: 1
Compression:
Stored size: 1.97 KB
Contents
# frozen_string_literal: true require 'singleton' require 'active_decorator/helpers' module ActiveDecorator class Decorator include Singleton def initialize @@decorators = {} end def decorate(obj) return if defined?(Jbuilder) && Jbuilder === obj return if obj.nil? if obj.is_a?(Array) obj.each do |r| decorate r end elsif defined?(ActiveRecord) && obj.is_a?(ActiveRecord::Relation) # don't call each nor to_a immediately if obj.respond_to?(:records) # Rails 5.0 obj.extend ActiveDecorator::RelationDecorator unless obj.is_a? ActiveDecorator::RelationDecorator else # Rails 3.x and 4.x obj.extend ActiveDecorator::RelationDecoratorLegacy unless obj.is_a? ActiveDecorator::RelationDecoratorLegacy end else d = decorator_for obj.class return obj unless d obj.extend d unless obj.is_a? d end end private def decorator_for(model_class) return @@decorators[model_class] if @@decorators.key? model_class decorator_name = "#{model_class.name}#{ActiveDecorator.config.decorator_suffix}" d = decorator_name.constantize unless Class === d d.send :include, ActiveDecorator::Helpers @@decorators[model_class] = d else # Cache nil results @@decorators[model_class] = nil end rescue NameError if model_class.respond_to?(:base_class) && (model_class.base_class != model_class) @@decorators[model_class] = decorator_for model_class.base_class else # Cache nil results @@decorators[model_class] = nil end end end module RelationDecoratorLegacy def to_a super.tap do |arr| ActiveDecorator::Decorator.instance.decorate arr end end end module RelationDecorator def records super.tap do |arr| ActiveDecorator::Decorator.instance.decorate arr end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_decorator-0.8.0 | lib/active_decorator/decorator.rb |