module ActiveRecord::VirtualAttributes::VirtualReflections::ClassMethods

Public Instance Methods

collect_reflections(association_names) click to toggle source

invalid associations return a nil real reflections are followed a virtual association will stop the traversal @returns [nil, Array<Relation>]

# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 71
def collect_reflections(association_names)
  klass = self
  association_names.each_with_object([]) do |name, ret|
    reflection = klass.reflect_on_association(name)
    if reflection.nil?
      if klass.reflection_with_virtual(name)
        break(ret)
      else
        break
      end
    end
    klass = reflection.klass
    ret << reflection
  end
end
collect_reflections_with_virtual(association_names) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 87
def collect_reflections_with_virtual(association_names)
  klass = self
  association_names.collect do |name|
    reflection = klass.reflection_with_virtual(name) || break
    klass = reflection.klass
    reflection
  end
end
follow_associations(association_names) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 59
def follow_associations(association_names)
  association_names.inject(self) { |klass, name| klass.try!(:reflect_on_association, name).try!(:klass) }
end
follow_associations_with_virtual(association_names) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 63
def follow_associations_with_virtual(association_names)
  association_names.inject(self) { |klass, name| klass.try!(:reflection_with_virtual, name).try!(:klass) }
end
reflection_with_virtual(association) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 55
def reflection_with_virtual(association)
  virtual_reflection(association) || reflect_on_association(association)
end
reflections_with_virtual() click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 51
def reflections_with_virtual
  reflections.symbolize_keys.merge(virtual_reflections)
end
virtual_belongs_to(name, options = {}) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 29
def virtual_belongs_to(name, options = {})
  uses = options.delete(:uses)
  reflection = ActiveRecord::Associations::Builder::BelongsTo.build(self, name, nil, options)
  add_virtual_reflection(reflection, name, uses, options)
end
virtual_has_many(name, options = {}) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 19
def virtual_has_many(name, options = {})
  define_method("#{name.to_s.singularize}_ids") do
    records = send(name)
    records.respond_to?(:ids) ? records.ids : records.collect(&:id)
  end
  uses = options.delete(:uses)
  reflection = ActiveRecord::Associations::Builder::HasMany.build(self, name, nil, options)
  add_virtual_reflection(reflection, name, uses, options)
end
virtual_has_one(name, options = {}) click to toggle source

Definition

# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 13
def virtual_has_one(name, options = {})
  uses = options.delete(:uses)
  reflection = ActiveRecord::Associations::Builder::HasOne.build(self, name, nil, options)
  add_virtual_reflection(reflection, name, uses, options)
end
virtual_reflection(name) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 39
def virtual_reflection(name)
  virtual_reflections[name.to_sym]
end
virtual_reflection?(name) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 35
def virtual_reflection?(name)
  virtual_reflections.key?(name.to_sym)
end
virtual_reflections() click to toggle source

Introspection

# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 47
def virtual_reflections
  (virtual_fields_base? ? {} : superclass.virtual_reflections).merge(_virtual_reflections)
end

Private Instance Methods

_virtual_reflections() click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 108
def _virtual_reflections
  @virtual_reflections ||= {}
end
add_virtual_reflection(reflection, name, uses, _options) click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 98
def add_virtual_reflection(reflection, name, uses, _options)
  raise ArgumentError, "macro must be specified" unless reflection
  reset_virtual_reflection_information
  _virtual_reflections[name.to_sym] = reflection
  define_virtual_include(name.to_s, uses)
end
reset_virtual_reflection_information() click to toggle source
# File lib/active_record/virtual_attributes/virtual_reflections.rb, line 105
def reset_virtual_reflection_information
end