Method: Module#include_concerns

Defined in:
lib/concerned/module_ext.rb

#include_concerns(*concerns) ⇒ Object Also known as: include_concern



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/concerned/module_ext.rb', line 18

def include_concerns(*concerns)
  options = concerns.extract_options!
  scope_name = options[:for] || options[:from] || name
  concerns.flatten.each do |concern|
    next if concern.blank?
    require_concern scope_name, concern

    concern_ns ||= [scope_name.to_s.camelize, concern.to_s.camelize].join('::')

    self.send :include, concern_ns.constantize

    if Concerned.extend_enabled?
      begin
        self.extend [concern_ns, 'ClassMethods'].join('::').constantize
      rescue
      end
    end
  end
        
  class_eval do
    self.my_concerns += concerns.flatten if self.respond_to?(:my_concerns)
  end

  include_shared_concerns([options[:shared]].flatten.compact)
end