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