Module: LinkedRails::Model::Enhancements::ClassMethods

Defined in:
lib/linked_rails/model/enhancements.rb

Instance Method Summary collapse

Instance Method Details

#enhance(enhancement, opts = {}) ⇒ Object

Adds an enhancement to a model and includes the Model module.



19
20
21
22
23
24
25
26
27
28
# File 'lib/linked_rails/model/enhancements.rb', line 19

def enhance(enhancement, opts = {})
  initialize_enhancements
  already_included = enhanced_with?(enhancement)

  self.enhancements[enhancement] = opts
  return if already_included

  enhance_routing(enhancement) if enhancement.const_defined?(:Routing) && enhanced_with?(enhancement, :Routing)
  include enhancement::Model if enhancement.const_defined?(:Model) && enhanced_with?(enhancement, :Model)
end

#enhanced_with?(enhancement, const = nil) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
# File 'lib/linked_rails/model/enhancements.rb', line 30

def enhanced_with?(enhancement, const = nil)
  return false unless self.enhancements.key?(enhancement)
  return true if const.nil?

  opts = self.enhancements[enhancement]

  return opts[:only].include?(const) if opts.key?(:only)

  !opts.key?(:except) || !opts[:except].include?(const)
end

#enhancement_modules(const) ⇒ Object



41
42
43
44
45
# File 'lib/linked_rails/model/enhancements.rb', line 41

def enhancement_modules(const)
  enhancements
    .select { |enhancement, _opts| enhancement.const_defined?(const) && enhanced_with?(enhancement, const) }
    .map { |enhancement, _opts| enhancement.const_get(const) }
end