module SchemaMonkey::Module

Public Instance Methods

const_lookup(mod, name) click to toggle source

ruby 2.* supports mod.const_get(“Component::Path”) but ruby 1.9.3 doesn’t. And neither has an option to return nil rather than raising a NameError

# File lib/schema_monkey/module.rb, line 18
def const_lookup(mod, name)
  name.to_s.split('::').map(&:to_sym).each do |component|
    begin
      mod = mod.const_get(component, false)
    rescue NameError
      return nil
    end
  end
  mod
end
descendants(mod, can_load: nil) click to toggle source
# File lib/schema_monkey/module.rb, line 29
def descendants(mod, can_load: nil)
  consts, auto = mod.constants.group_by{|c| !!mod.autoload?(c)}.values_at(false, true)
  consts ||= []
  consts += auto.select { |it| it.to_s =~ can_load } if can_load and auto
  children = consts.map{|c| mod.const_get(c) }.select { |obj|
    obj.is_a?(::Module) rescue nil
  }
  children + children.flat_map {|c| descendants(c, can_load: can_load) }
end
insert(base, mod) click to toggle source
# File lib/schema_monkey/module.rb, line 7
def insert(base, mod)
  if mod.respond_to? :included
    base.send(:include, mod) unless base.include? mod
  else
    base.send(:prepend, mod)
  end
end
mkpath(mod, path) click to toggle source
# File lib/schema_monkey/module.rb, line 39
def mkpath(mod, path)
  path.split('::').each do |component|
    mod = const_lookup(mod, component) || mod.const_set(component, ::Module.new)
  end
  mod
end