# File lib/benelux/packer.rb, line 74 def self.class_method_defined?(klass, meth) meth &&= meth.to_s if RUBY_VERSION < "1.9" klass.singleton_methods.member? meth end
# File lib/benelux/packer.rb, line 68 def self.method_defined?(klass, meth) meth &&= meth.to_s if RUBY_VERSION < "1.9" klass.method_defined?(meth) || klass.private_method_defined?(meth) || klass.protected_method_defined?(meth) end
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.
# File lib/benelux/packer.rb, line 24 def initialize(k,m,aliaz,&blk) Benelux.ld "%20s: %s#%s" % [self.class, k, m] if Benelux.packed_method? k, m raise SelectableError, "Already defined (#{k} #{m})" end @klass, @meth, @aliaz, @blk = k, m, aliaz, blk @aliaz ||= meth @klass.extend Attic unless @klass.kind_of?(Attic) unless @klass.kind_of?(Benelux) @klass.attic :timeline @klass.send :include, Benelux end ## NOTE: This is commented out so we can include ## Benelux definitions before all classes are loaded. ##unless obj.respond_to? meth ## raise NoMethodError, "undefined method `#{meth}' for #{obj}:Class" ##end thread_id, call_id = Thread.current.object_id.abs, @klass.object_id.abs @methorig = methorig = :"__benelux_#{@meth}_#{thread_id}_#{call_id}" Benelux.ld "%20s: %s" % ['Alias', @methorig] @klass.module_eval do Benelux.ld [:def, self, m, MethodPacker.method_defined?(self, m), MethodPacker.class_method_defined?(self, m)].inspect if MethodPacker.method_defined?(self, m) alias_method methorig, m # Can't use the instance variables elsif MethodPacker.class_method_defined?(self, m) eval "class << self; alias #{methorig} #{m}; end" else raise BeneluxError, "No such method: #{self}.#{m}" end end install_method # see generate_packed_method self.add_tags :class => @klass.to_s.to_sym, :meth => @meth.to_sym, :kind => self.class.to_s.to_sym Benelux.packed_methods[@klass] ||= {} Benelux.packed_methods[@klass][@meth] = self Benelux.packed_methods[:all] ||= [] Benelux.packed_methods[:all] << self end
# File lib/benelux/packer.rb, line 78 def install_method raise "You need to implement this method" end
# File lib/benelux/packer.rb, line 86 def instance_exec(*args, &block) # !> method redefined; discarding old instance_exec mname = "__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}" InstanceExecHelper.module_eval{ define_method(mname, &block) } begin ret = send(mname, *args) ensure InstanceExecHelper.module_eval{ undef_method(mname) } rescue nil end ret end
Generated with the Darkfish Rdoc Generator 2.