class Module
AUTO Require LIBRARY
by Shin-ichiro HARA version 1.21 (2002.04.22)
Public Instance Methods
auto_req(*a, &b)
click to toggle source
# File lib/algebra/auto-require.rb, line 63 def auto_req(*a, &b); _auto_req(a[0...-1], a[-1], false, &b); end
auto_req_init()
click to toggle source
# File lib/algebra/auto-require.rb, line 44 def auto_req_init; _auto_req_init(false); end
auto_req_s(*a, &b)
click to toggle source
# File lib/algebra/auto-require.rb, line 64 def auto_req_s(*a, &b); _auto_req(a[0...-1], a[-1], true, &b); end
auto_req_s_init()
click to toggle source
# File lib/algebra/auto-require.rb, line 45 def auto_req_s_init; _auto_req_init(true); end
Private Instance Methods
_auto_req(meths, file, sw = nil, &b)
click to toggle source
# File lib/algebra/auto-require.rb, line 47 def _auto_req(meths, file, sw = nil, &b) meths = [meths] unless meths.is_a? Array meths.each_index do |x, i| meth[i] = x.intern if x.is_a? String end meths.each do |symb| code = <<-__CODE__ AUTO_LOAD[symb.is_a?(String) ? symb.intern : symb] = [file, b] __CODE__ sw ? instance_eval(code) : module_eval(code) end end
_auto_req_init(sw)
click to toggle source
# File lib/algebra/auto-require.rb, line 8 def _auto_req_init(sw) if sw code = "AUTO_LOAD = {} unless self.class.const_defined? 'AUTO_LOAD'\n" else code = "AUTO_LOAD = {} unless const_defined? 'AUTO_LOAD'\n" end code.concat <<-__CODE__ def method_missing(sym, *param, &block) begin file, work = AUTO_LOAD[sym] unless file raise NameError, "undefined method `\#{sym.id2name}' for \#{inspect}" end require file work.call if work unless respond_to?(sym, true) raise "(auto_req) `\#{sym.id2name}' is not defined for `\#{self}' in file:`\#{file}' \#{self.class.superclass.superclass}" end send(sym, *param, &block) rescue Exception $@.delete_if do |trace| trace =~ /^\\(eval\\):/ end raise end end __CODE__ sw ? instance_eval(code) : module_eval(code) end