Class: Inclusion

Inherits:
Object
  • Object
show all
Defined in:
lib/inclusion/inclusion.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(obj, inclusion_names, search_ancestors: false) ⇒ Inclusion

Returns a new instance of Inclusion.



10
11
12
13
14
# File 'lib/inclusion/inclusion.rb', line 10

def initialize(obj, inclusion_names, search_ancestors: false)
  @obj = obj
  @inclusion_names = inclusion_names
  @search_ancestors = search_ancestors
end

Instance Attribute Details

#inclusion_namesObject (readonly)

Returns the value of attribute inclusion_names.



3
4
5
# File 'lib/inclusion/inclusion.rb', line 3

def inclusion_names
  @inclusion_names
end

#objObject (readonly)

Returns the value of attribute obj.



2
3
4
# File 'lib/inclusion/inclusion.rb', line 2

def obj
  @obj
end

#search_ancestorsObject (readonly)

Returns the value of attribute search_ancestors.



4
5
6
# File 'lib/inclusion/inclusion.rb', line 4

def search_ancestors
  @search_ancestors
end

Class Method Details

.!(obj, *inclusion_names, search_ancestors: false) ⇒ Object



16
17
18
# File 'lib/inclusion/inclusion.rb', line 16

def self.!(obj, *inclusion_names, search_ancestors: false)
  new(obj, inclusion_names, search_ancestors: search_ancestors).!
end

Instance Method Details

#!Object



20
21
22
# File 'lib/inclusion/inclusion.rb', line 20

def !
  extend_obj
end

#extend(mod) ⇒ Object



28
29
30
31
# File 'lib/inclusion/inclusion.rb', line 28

def extend(mod)
  obj.extend mod if mod
  mod
end

#extend_objObject



24
25
26
# File 'lib/inclusion/inclusion.rb', line 24

def extend_obj
  extend(inclusion)
end

#includion_mod(mod, inner) ⇒ Object



69
70
71
# File 'lib/inclusion/inclusion.rb', line 69

def includion_mod(mod, inner)
  mod.const_get(inner, search_ancestors)
end

#inclusionObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/inclusion/inclusion.rb', line 33

def inclusion
  inclusions = inclusion_names.dup

  inclusion = nil
  mod = obj_const
  inclusions.inject(mod) do |mod_name, inner_mod_name|

    unless inclusion_defined?(mod, inner_mod_name)
      break
    end

    inclusion = includion_mod(mod, inner_mod_name)
    mod = inclusion

    inner_mod_name
  end

  inclusion
end

#inclusion_defined?(mod, inner) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/inclusion/inclusion.rb', line 73

def inclusion_defined?(mod, inner)
  mod.const_defined?(inner, search_ancestors)
end

#obj_constObject



6
7
8
# File 'lib/inclusion/inclusion.rb', line 6

def obj_const
  @obj_const ||= ([Module, Class].include?(obj.class) ? obj : obj.class)
end