Method: ActiveTriples.class_from_string

Defined in:
lib/active_triples.rb

.class_from_string(class_name, container_class = Kernel) ⇒ Class

Converts a string for a class or module into a a constant. This will find classes in or above a given container class.

Examples:

finding a class in Kernal

ActiveTriples.class_from_string('MyClass') # => MyClass

finding a class in a module

ActiveTriples.class_from_string('MyClass', MyModule) 
# => MyModule::MyClass

when a class exists above the module, but not in it

ActiveTriples.class_from_string('Object', MyModule) 
# => Object

Parameters:

  • class_name (String)
  • container_class (defaults to: Kernel)

Returns:

  • (Class)


86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/active_triples.rb', line 86

def self.class_from_string(class_name, container_class=Kernel)
  container_class = container_class.name if container_class.is_a? Module
  container_parts = container_class.split('::')
  (container_parts + class_name.split('::'))
    .flatten.inject(Kernel) do |mod, class_name|
    if mod == Kernel
      Object.const_get(class_name)
    elsif mod.const_defined? class_name.to_sym
      mod.const_get(class_name)
    else
      container_parts.pop
      class_from_string(class_name, container_parts.join('::'))
    end
  end
end