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