Module: Kernel
- Defined in:
- lib/arb.rb
Instance Method Summary collapse
- #arb_import(arb_module_name, prefix = nil, forced = false) ⇒ Object (also: #import)
- #arb_use(*modules) ⇒ Object (also: #use)
Instance Method Details
#arb_import(arb_module_name, prefix = nil, forced = false) ⇒ Object Also known as: import
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/arb.rb', line 22 def arb_import(arb_module_name,prefix=nil,forced=false) prefix="#{prefix}_" if prefix && !prefix.to_s.end_with?('_') arb_module_name=arb_module_name.to_s.capitalize! res={:succeed=>[],:failed=>[]} tried_arb_use=false begin arb_module=Module.const_get(:Arb).const_get(arb_module_name) Kernel.class_eval do arb_module.singleton_methods.each do |m| mm=prefix.to_s+m.to_s if !forced && Kernel.instance_methods.include?(mm) warn("Conflict method: #{mm}") res[:failed] << mm next end define_method(mm) do |*args,&block| arb_module.send(m,*args,&block) end res[:succeed] << mm end end res rescue NameError=>e #Note that NoMethodError is subclass of NameError, which means that #invoking nil.xxx(that throws NoMethodError) will also lead to the #Name Error, we have to make sure that e is the instance of NameError!!! if e.instance_of?(NameError) && !tried_arb_use tried_arb_use=true arb_use(arb_module_name.downcase) retry end warn("Arb::#{arb_module_name} not found!") end end |
#arb_use(*modules) ⇒ Object Also known as: use
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/arb.rb', line 2 def arb_use(*modules) imported=[] tmp=nil begin loop do tmp=modules.shift break unless tmp if require("arb/#{tmp}") imported<<tmp else #warn("Fail to require arb/#{tmp}, maybe it had already been required!") end end rescue LoadError=>e warn("Fail to load arb/#{tmp}!") retry end imported end |