Methods
public class
public instance
Included modules
Attributes
aliaz | [RW] | |
blk | [R] | |
klass | [R] | |
meth | [R] | |
methorig | [RW] |
Public class methods
class_method_defined?
(klass, meth)
[show source]
# File lib/benelux/packer.rb, line 74 74: def self.class_method_defined?(klass, meth) 75: meth &&= meth.to_s if RUBY_VERSION < "1.9" 76: klass.singleton_methods.member? meth 77: end
method_defined?
(klass, meth)
[show source]
# File lib/benelux/packer.rb, line 68 68: def self.method_defined?(klass, meth) 69: meth &&= meth.to_s if RUBY_VERSION < "1.9" 70: klass.method_defined?(meth) || 71: klass.private_method_defined?(meth) || 72: klass.protected_method_defined?(meth) 73: end
new
(k,m,aliaz,&blk)
- k is a class
- m is the name of an instance method in k
- aliaz is an optional name for
This method makes the following changes to class k.
- Add a timeline attic to and include Benelux
- Rename the method to something like: __benelux_execute_2151884308_2165479316
- Install a new method with the name m.
[show source]
# File lib/benelux/packer.rb, line 24 24: def initialize(k,m,aliaz,&blk) 25: Benelux.ld "%20s: %s#%s" % [self.class, k, m] 26: if Benelux.packed_method? k, m 27: raise SelectableError, "Already defined (#{k} #{m})" 28: end 29: @klass, @meth, @aliaz, @blk = k, m, aliaz, blk 30: @aliaz ||= meth 31: @klass.extend Attic unless @klass.kind_of?(Attic) 32: unless @klass.kind_of?(Benelux) 33: @klass.attic :timeline 34: @klass.send :include, Benelux 35: end 36: ## NOTE: This is commented out so we can include 37: ## Benelux definitions before all classes are loaded. 38: ##unless obj.respond_to? meth 39: ## raise NoMethodError, "undefined method `#{meth}' for #{obj}:Class" 40: ##end 41: thread_id, call_id = Thread.current.object_id.abs, @klass.object_id.abs 42: @methorig = methorig = :"__benelux_#{@meth}_#{thread_id}_#{call_id}" 43: Benelux.ld "%20s: %s" % ['Alias', @methorig] 44: 45: @klass.module_eval do 46: Benelux.ld [:def, self, m, 47: MethodPacker.method_defined?(self, m), 48: MethodPacker.class_method_defined?(self, m)].inspect 49: if MethodPacker.method_defined?(self, m) 50: alias_method methorig, m # Can't use the instance variables 51: elsif MethodPacker.class_method_defined?(self, m) 52: eval "class << self; alias #{methorig} #{m}; end" 53: else 54: raise BeneluxError, "No such method: #{self}.#{m}" 55: end 56: end 57: install_method # see generate_packed_method 58: self.add_tags :class => @klass.to_s.to_sym, 59: :meth => @meth.to_sym, 60: :kind => self.class.to_s.to_sym 61: 62: Benelux.packed_methods[@klass] ||= {} 63: Benelux.packed_methods[@klass][@meth] = self 64: Benelux.packed_methods[:all] ||= [] 65: Benelux.packed_methods[:all] << self 66: 67: end
Public instance methods
install_method
()
[show source]
# File lib/benelux/packer.rb, line 78 78: def install_method 79: raise "You need to implement this method" 80: end
instance_exec
(*args, &block)
[show source]
# File lib/benelux/packer.rb, line 86 86: def instance_exec(*args, &block) # !> method redefined; discarding old instance_exec 87: mname = "__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}" 88: InstanceExecHelper.module_eval{ define_method(mname, &block) } 89: begin 90: ret = send(mname, *args) 91: ensure 92: InstanceExecHelper.module_eval{ undef_method(mname) } rescue nil 93: end 94: ret 95: end
run_block
(*args)
[show source]
# File lib/benelux/packer.rb, line 97 97: def run_block(*args) 98: raise "must implement" 99: end