Class: Sprig::Reap::Association

Inherits:
Object
  • Object
show all
Defined in:
lib/sprig/reap/association.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(association) ⇒ Association

Returns a new instance of Association.



7
8
9
# File 'lib/sprig/reap/association.rb', line 7

def initialize(association)
  @association = association
end

Instance Attribute Details

#associationObject (readonly)

Returns the value of attribute association.



3
4
5
# File 'lib/sprig/reap/association.rb', line 3

def association
  @association
end

Instance Method Details

#dependenciesObject



34
35
36
# File 'lib/sprig/reap/association.rb', line 34

def dependencies
  polymorphic? ? polymorphic_dependencies : Array(klass)
end

#klassObject



11
12
13
# File 'lib/sprig/reap/association.rb', line 11

def klass
  polymorphic? ? nil : association.klass
end

#nameObject



15
16
17
# File 'lib/sprig/reap/association.rb', line 15

def name
  association.options[:class_name] || association.name
end

#polymorphic?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/sprig/reap/association.rb', line 19

def polymorphic?
  !!association.options[:polymorphic]
end

#polymorphic_dependenciesObject



23
24
25
26
# File 'lib/sprig/reap/association.rb', line 23

def polymorphic_dependencies
  return [] unless polymorphic?
  @polymorphic_dependencies ||= ActiveRecord::Base.subclasses.select { |model| polymorphic_match? model }
end

#polymorphic_match?(model) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
# File 'lib/sprig/reap/association.rb', line 28

def polymorphic_match?(model)
  model.reflect_on_all_associations(:has_many).any? do |has_many_association|
    has_many_association.options[:as] == association.name
  end
end

#polymorphic_typeObject



38
39
40
# File 'lib/sprig/reap/association.rb', line 38

def polymorphic_type
  polymorphic? ? association.foreign_type : nil
end