module RubyFeatures::Utils

Public Class Methods

module_defined?(target, module_name) click to toggle source
# File lib/ruby-features/utils.rb, line 23
def module_defined?(target, module_name)
  ruby_const_defined?(target, module_name) && ruby_const_get(target, module_name).name.start_with?(target.name)
end
prepare_module(target, module_name) click to toggle source
# File lib/ruby-features/utils.rb, line 33
def prepare_module(target, module_name)
  inject_const_parts_with_target(target, module_name) do |parent, submodule|
    module_defined?(parent, submodule) ?
      parent.const_get(submodule) :
      parent.const_set(submodule, Module.new)
  end
end
prepare_module!(target, module_name) click to toggle source
# File lib/ruby-features/utils.rb, line 27
def prepare_module!(target, module_name)
  module_defined?(target, module_name) ?
    raise(NameError.new("Module already initiated: #{target.name}::#{module_name}")) :
    prepare_module(target, module_name)
end

Private Class Methods

inject_const_parts_with_target(target, const_name, &block) click to toggle source
# File lib/ruby-features/utils.rb, line 43
def inject_const_parts_with_target(target, const_name, &block)
  const_parts = const_name.split('::')
  if const_parts.first == ''
    target = ::Object
    const_parts.shift
  end

  const_parts.inject(target, &block)
end