Module: Core::Loader

Defined in:
lib/core.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



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

def self.included(base)
  base.extend(self)
end

Instance Method Details

#adds_to(klass, options = {}) ⇒ Object Also known as: add_to



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/core.rb', line 9

def adds_to(klass, options = {})
  unless (extension_klass = options[:with] || get_extension_class(klass))
    puts "No #{self} extension class found"
    return false
  end
  conflicts = check_for_conflicts(klass, extension_klass)
  if conflicts.empty? || options[:force]
    klass.send :include, extension_klass
  else
    puts "Couldn't include #{extension_klass} into #{klass} because the following methods conflict:"
    puts conflicts.sort.join(", ")
    false
  end
end

#all_instance_methods(klass) ⇒ Object



47
48
49
# File 'lib/core.rb', line 47

def all_instance_methods(klass)
  klass.public_instance_methods + klass.private_instance_methods + klass.protected_instance_methods
end

#check_for_conflicts(klass, extension_klass) ⇒ Object



40
41
42
43
44
45
# File 'lib/core.rb', line 40

def check_for_conflicts(klass, extension_klass)
  if false #TODO: extension_klass.to_s =~ /ClassMethods/
  else
    all_instance_methods(klass) & all_instance_methods(extension_klass)
  end
end

#detect_extension_class(klass) ⇒ Object



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

def detect_extension_class(klass)
  extension_klass = self.const_get(klass.to_s) rescue nil
  extension_klass = nil if extension_klass == klass
  extension_klass
end

#get_extension_class(klass) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/core.rb', line 31

def get_extension_class(klass)
  unless (extension_klass = detect_extension_class(klass))
    #try again but first by requiring possible file
    begin; require("#{self.to_s.gsub('::','/').downcase}/#{klass.to_s.downcase}"); rescue(LoadError); end
    extension_klass = detect_extension_class(klass)
  end
  extension_klass
end