module SpacesAreOk::ClassesAndModules
Public Class Methods
get_class(original_name, superclass = Object, &class_definition)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 2 def self.get_class(original_name, superclass = Object, &class_definition) creator = -> { Class.new(superclass) } define_or_get_module_or_class( original_name, Class, :class_eval, creator, &class_definition ) end
get_module(original_name, &module_definition)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 13 def self.get_module(original_name, &module_definition) creator = -> { Module.new } define_or_get_module_or_class( original_name, Module, :module_eval, creator, &module_definition ) end
Private Class Methods
closest_existing_name_for(name, type)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 49 def self.closest_existing_name_for(name, type) names = Module.constants.select do |c| next if c.to_s == 'Config' # Get rid of RbConfig/Config warning Module.const_get(c).is_a?(type) end SpacesAreOk::find_a_matching_name(names, name) end
define_or_get_module_or_class(original_name, type, evaluator, creator, &body)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 26 def self.define_or_get_module_or_class(original_name, type, evaluator, creator, &body) name = get_name(original_name, type) if !Object.const_defined?(name) Object.const_set(name, creator.call) end module_or_class = Object.const_get(name) if !body.nil? module_or_class.send(evaluator, &body) end module_or_class end
get_name(original_name, type)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 42 def self.get_name(original_name, type) name = valid_class_or_module_name_from(original_name) close_enough = closest_existing_name_for(name, type) name = close_enough unless close_enough.nil? name end
valid_class_or_module_name_from(original_name)
click to toggle source
# File lib/spaces_are_ok/classes_and_modules.rb, line 58 def self.valid_class_or_module_name_from(original_name) name = SpacesAreOk::make_a_valid_name(original_name, '') name = "a_#{name}" if name.match(%r<^ [^a-z] >x) name.capitalize end