class Nocode::Util::ClassRegistry
Create a type -> class constant interface. Classes can be registered as types. Types are snake-cased while class names are stored as pascal-cased. Then constant! can be called to retrieve the class constant by type.
Attributes
types_to_classes[R]
Public Class Methods
new(types_to_classes = {})
click to toggle source
# File lib/nocode/util/class_registry.rb, line 17 def initialize(types_to_classes = {}) @types_to_classes = Dictionary.new(types_to_classes) freeze end
Public Instance Methods
constant!(type)
click to toggle source
# File lib/nocode/util/class_registry.rb, line 43 def constant!(type) name = types_to_classes[type] raise NotRegisteredError, "Constant not registered for: #{type}" if name.to_s.empty? if Object.const_defined?(name, false) Object.const_get(name, false) else Object.const_missing(name) end end
load(types, class_prefix: '', type_prefix: '')
click to toggle source
# File lib/nocode/util/class_registry.rb, line 23 def load(types, class_prefix: '', type_prefix: '') types.each do |type| pascal_cased = type.split(File::SEPARATOR).map do |part| part.split('_').collect(&:capitalize).join end.join('::') register("#{type_prefix}#{type}", "#{class_prefix}#{pascal_cased}") end self end
register(type, class_name)
click to toggle source
# File lib/nocode/util/class_registry.rb, line 35 def register(type, class_name) tap { types_to_classes[type] = class_name } end
unregister(type)
click to toggle source
# File lib/nocode/util/class_registry.rb, line 39 def unregister(type) tap { types_to_classes.delete(type) } end