Module: ActsAsBelongable::Belongable::ClassMethods

Defined in:
app/models/concerns/acts_as_belongable/belongable.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_belongableObject



8
9
10
11
12
13
# File 'app/models/concerns/acts_as_belongable/belongable.rb', line 8

def acts_as_belongable
  has_many :belongers, through: :belongable_belongings, source: :belonger
  has_many :belongable_belongings, as: :belongable,
                                   class_name: 'Belonging',
                                   dependent: :destroy
end

#belongable(name, source_type, options = {}) ⇒ Object



15
16
17
18
19
20
21
22
23
24
# File 'app/models/concerns/acts_as_belongable/belongable.rb', line 15

def belongable(name, source_type, options = {})
  if options.key?(:scope)
    belongable_belongings_with_scope(options[:scope])
    through = "belongable_belongings_#{options[:scope]}".to_sym
  end

  has_many name.to_sym, through: through || :belongable_belongings,
                        source: :belonger,
                        source_type: source_type
end

#belongable_belongings_with_scope(scope) ⇒ Object



26
27
28
29
30
# File 'app/models/concerns/acts_as_belongable/belongable.rb', line 26

def belongable_belongings_with_scope(scope)
  # rubocop:disable Metrics/LineLength
  has_many "belongable_belongings_#{scope}".to_sym, -> { where(scope: scope) }, as: :belongable, class_name: 'Belonging', dependent: :destroy
  # rubocop:enable Metrics/LineLength
end