Module: Eco::Language::Klass::Resolver

Included in:
AutoLoader, Builder, HelpersBuilt
Defined in:
lib/eco/language/klass/resolver.rb

Instance Method Summary collapse

Instance Method Details

#class_resolver(name, klass) ⇒ Object

Note:

the method is defined at instance and class level.

Creates a class and instance object methods with name name to resolve klass name



6
7
8
9
# File 'lib/eco/language/klass/resolver.rb', line 6

def class_resolver(name, klass)
  define_singleton_method(name) { resolve_class(klass) }
  define_method(name)           { self.class.resolve_class(klass) }
end

#resolve_class(klass, source_class: self, exception: true) ⇒ Class

Note:

it caches the resolved klasses

Class resolver With given a klass name it resolves to an actual Class

Raises:

  • (Exception)

    when could not resolve if exception is true



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

def resolve_class(klass, source_class: self, exception: true)
  @resolved        ||= {}
  @resolved[klass] ||=
    case klass
    when Class
      klass
    when String
      begin
        Kernel.const_get(klass)
      rescue NameError
        raise if exception
      end
    when Symbol
      source_class.resolve_class(source_class.send(klass))
    when Hash
      referrer, referred = klass.first
      resolve_class(
        referred,
        source_class: referrer,
        exception:    exception
      )
    else
      raise "Unknown class: #{klass}" if exception
    end
end