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) ⇒ Inclusion

Returns a new instance of Inclusion.



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

def initialize(obj, inclusion_names)
  @obj = obj
  @inclusion_names = inclusion_names
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

Class Method Details

.!(obj, *inclusion_names) ⇒ Object



14
15
16
# File 'lib/inclusion/inclusion.rb', line 14

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

Instance Method Details

#!Object



18
19
20
# File 'lib/inclusion/inclusion.rb', line 18

def !
  extend_obj
end

#extend(mod) ⇒ Object



26
27
28
29
# File 'lib/inclusion/inclusion.rb', line 26

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

#extend_objObject



22
23
24
# File 'lib/inclusion/inclusion.rb', line 22

def extend_obj
  extend(inclusion)
end

#includion_mod(mod, inner) ⇒ Object



67
68
69
# File 'lib/inclusion/inclusion.rb', line 67

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

#inclusionObject



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

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)


71
72
73
# File 'lib/inclusion/inclusion.rb', line 71

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

#obj_constObject



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

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