module Light::Decorator::Concerns::Relation
Public Instance Methods
decorate(options = {})
click to toggle source
Decorate ActiveRecord::Relation
@param [Hash] options @return [ActiveRecord::Relation] decorated collection
# File lib/light/decorator/concerns/relation.rb, line 11 def decorate(options = {}) @decorated = true override_exec_queries(options) self end
decorated?()
click to toggle source
Check current ActiveRecord::Relation is decorated or not
@return [Bool]
# File lib/light/decorator/concerns/relation.rb, line 22 def decorated? !@decorated.nil? end
Private Instance Methods
decorate_associations(record, options)
click to toggle source
# File lib/light/decorator/concerns/relation.rb, line 39 def decorate_associations(record, options) record.instance_variable_get(:@association_cache).each do |_, association| next if association.inversed || association.target.blank? if association.target.is_a?(Array) targets = association.target.map do |target| decorate_associations(target, options) target.decorate(options) end association.instance_variable_set(:@target, targets) else decorate_associations(association.target, options) association.instance_variable_set(:@target, association.target.decorate(options)) end end end
override_exec_queries(options)
click to toggle source
Calls superclass method
# File lib/light/decorator/concerns/relation.rb, line 28 def override_exec_queries(options) define_singleton_method :exec_queries do super() @records = @records.map do |record| decorate_associations(record, options.reverse_merge(soft: true)) record.decorate(options) end end end