class Shoulda::Matchers::ActiveRecord::AssociationMatchers::ModelReflection
@private
Attributes
reflection[R]
subject[R]
Public Class Methods
new(reflection)
click to toggle source
Calls superclass method
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 9 def initialize(reflection) super(reflection) @reflection = reflection @subject = reflection.active_record end
Public Instance Methods
associated_class()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 15 def associated_class reflection.klass end
association_foreign_key()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 58 def association_foreign_key if has_and_belongs_to_many_reflection join_model = has_and_belongs_to_many_reflection.options[:class] join_model.right_reflection.foreign_key else reflection.association_foreign_key end end
association_relation()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 40 def association_relation if reflection.respond_to?(:scope) convert_scope_to_relation(reflection.scope) else convert_options_to_relation(reflection.options) end end
foreign_key()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 48 def foreign_key if has_and_belongs_to_many_reflection has_and_belongs_to_many_reflection.foreign_key elsif reflection.respond_to?(:foreign_key) reflection.foreign_key else reflection.primary_key_name end end
join_table()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 27 def join_table join_table = if has_and_belongs_to_many_name_table_name has_and_belongs_to_many_name_table_name elsif reflection.respond_to?(:join_table) reflection.join_table else reflection.options[:join_table] end join_table.to_s end
polymorphic?()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 19 def polymorphic? reflection.options[:polymorphic] end
through?()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 23 def through? reflection.options[:through] end
Protected Instance Methods
convert_options_to_relation(options)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 82 def convert_options_to_relation(options) relation = associated_class.scoped relation = extend_relation_with(relation, :where, options[:conditions]) relation = extend_relation_with(relation, :includes, options[:include]) relation = extend_relation_with(relation, :order, options[:order]) relation = extend_relation_with(relation, :group, options[:group]) relation = extend_relation_with(relation, :having, options[:having]) relation = extend_relation_with(relation, :limit, options[:limit]) relation = extend_relation_with(relation, :offset, options[:offset]) relation = extend_relation_with(relation, :select, options[:select]) relation end
convert_scope_to_relation(scope)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 71 def convert_scope_to_relation(scope) relation = associated_class.all if scope # Source: AR::Associations::AssociationScope#eval_scope relation.instance_exec(subject, &scope) else relation end end
extend_relation_with(relation, method_name, value)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 95 def extend_relation_with(relation, method_name, value) if value relation.__send__(method_name, value) else relation end end
has_and_belongs_to_many_name()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 103 def has_and_belongs_to_many_name reflection.options[:through] end
has_and_belongs_to_many_name_table_name()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 107 def has_and_belongs_to_many_name_table_name if has_and_belongs_to_many_reflection has_and_belongs_to_many_reflection.table_name end end
has_and_belongs_to_many_reflection()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb, line 113 def has_and_belongs_to_many_reflection @_has_and_belongs_to_many_reflection ||= if has_and_belongs_to_many_name @subject.reflect_on_association(has_and_belongs_to_many_name) end end