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