module ClassSpecific
Public Instance Methods
after_construct(&block)
click to toggle source
# File lib/services/class_specific.rb, line 11 def after_construct(&block) @__construct_callback__ = block end
construct_class(klass, callback_args: [])
click to toggle source
# File lib/services/class_specific.rb, line 3 def construct_class(klass, callback_args: []) __constructor__(klass, callback_args) { |name| __define_subclass__ name, self } end
construct_module(klass, callback_args: [])
click to toggle source
# File lib/services/class_specific.rb, line 7 def construct_module(klass, callback_args: []) __constructor__(klass, callback_args) { |name| __define_submodule__ name, self } end
Private Instance Methods
__constructor__(klass, callback_args) { |name| ... }
click to toggle source
# File lib/services/class_specific.rb, line 17 def __constructor__(klass, callback_args) return self if !(name = __get_constant_name__(klass)) return const_get name, false if const_defined? name.to_sym, false constant = yield name __invoke_callback__(constant, klass, *callback_args) if @__construct_callback__ constant end
__define_subclass__(name, parent)
click to toggle source
# File lib/services/class_specific.rb, line 31 def __define_subclass__(name, parent) parent.const_set(name, Class.new(parent)) end
__define_submodule__(name, parent)
click to toggle source
# File lib/services/class_specific.rb, line 35 def __define_submodule__(name, parent) parent.const_set(name, parent.clone) end
__get_constant_name__(constant)
click to toggle source
# File lib/services/class_specific.rb, line 39 def __get_constant_name__(constant) (name = constant.to_s) ? name.slice(/(?=\:\:)?\w+$/) : nil end
__invoke_callback__(constant, klass, *args)
click to toggle source
# File lib/services/class_specific.rb, line 26 def __invoke_callback__(constant, klass, *args) eval_method = constant.is_a?(Class) ? :class_exec : :module_exec constant.send(eval_method, klass, *args, &@__construct_callback__) end