Module: SuperModule

Defined in:
lib/super_module.rb,
lib/super_module/v1.rb,
lib/super_module/v1/module_body_method_call_recorder.rb,
lib/super_module/v1/singleton_method_definition_store.rb

Overview

Avoiding require_relative for backwards compatibility with Ruby 1.8.7

Defined Under Namespace

Modules: V1

Constant Summary collapse

V1_LIBRARY =
File.expand_path(File.join(File.dirname(__FILE__), 'super_module', 'v1'))

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.super_module_bodyObject

Returns the value of attribute super_module_body.



15
16
17
# File 'lib/super_module.rb', line 15

def super_module_body
  @super_module_body
end

Class Method Details

.__super_module_parent(name, ancestor) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/super_module.rb', line 30

def __super_module_parent(name, ancestor)
  name_tokens = name.to_s.split('::')
  name_token_count = name_tokens.size
  if name_token_count == 1
    ancestor
  else
    top_ancestor = ancestor.const_get(name_tokens.first)
    sub_module_name = name_tokens[1, name_token_count].join('::')
    __super_module_parent(sub_module_name, top_ancestor)
  end
end

.define(&super_module_body) ⇒ Object



17
18
19
# File 'lib/super_module.rb', line 17

def define(&super_module_body)
  clone.tap { |super_module| super_module.super_module_body = super_module_body }
end

.included(original_base) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/super_module.rb', line 21

def included(original_base)
  if super_module_body
    original_base.class_eval(&super_module_body)
  else
    require V1_LIBRARY
    original_base.send(:include, SuperModule::V1)
  end
end