module Lucid::Factory
Public Instance Methods
create_object_of(type)
click to toggle source
@param type [String] Object
representation
# File lib/lucid/factory.rb, line 4 def create_object_of(type) require path_for_type(type) names = parse_type(type) constant = ::Object names.each do |name| constant = provide_object_name(constant, name) end constant end
Private Instance Methods
parse_type(type)
click to toggle source
# File lib/lucid/factory.rb, line 27 def parse_type(type) names = type.split('::') names.shift if names.empty? || names.first.empty? names end
path_for_type(type)
click to toggle source
# File lib/lucid/factory.rb, line 19 def path_for_type(type) type.to_s.gsub(/::/, '/') .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .tr('-', '_') .downcase end
provide_object_name(constant, name)
click to toggle source
@param constant [Object] class or module reference @param name [String] class or module reference
# File lib/lucid/factory.rb, line 35 def provide_object_name(constant, name) if constant.const_defined?(name, false) constant.const_get(name, false) else constant.const_missing(name) end end