Module: Eco::Language::Klass::Resolver
- Included in:
- AutoLoader, Builder, HelpersBuilt
- Defined in:
- lib/eco/language/klass/resolver.rb
Instance Method Summary collapse
-
#class_resolver(name, klass) ⇒ Object
Creates a class and instance object methods with name
nameto resolveklassname. -
#resolve_class(klass, source_class: self, exception: true) ⇒ Class
Class resolver With given a
klassname it resolves to an actualClass.
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
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 |