Module: ActsAsBelongable::Belonger::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#acts_as_belongerObject



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

def acts_as_belonger
  has_many :belongables, through: :belonger_belongings,
                         source: :belongable
  has_many :belonger_belongings, as: :belonger, class_name: 'Belonging',
                                 dependent: :destroy
end

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



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

def belonger(name, source_type, options = {})
  if options.key?(:scope)
    belonger_belongings_with_scope(options[:scope])
    through = "belonger_belongings_#{options[:scope]}".to_sym
  end

  has_many name.to_sym, through: through || :belonger_belongings,
                        source: :belongable,
                        source_type: source_type
end

#belonger_belongings_with_scope(scope) ⇒ Object



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

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