Sha256: 659704f05e2a4e223a5c41498fe7ed1c7581c1f86d75ef72b0d8ca6efd91468e

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

# Add methods to Proc classe
class Proc
  # Define a bind method on Proc object,
  # This allow to execute a Proc as it was an instance method of reciever
  #  --> used for composition of instance methods adaptations
  # Src: http://www.ruby-forum.com/topic/173699
  def phenomenal_bind(receiver)
    block, time = self, Time.now
    (class << receiver; self end).class_eval do
      method_name = "__bind_#{time.to_i}_#{time.usec}-#{rand(100000)}"
      define_method(method_name, &block)
      method = instance_method(method_name)
      remove_method(method_name)
      method
    end.bind(receiver)
  end

  # Define a bind_class method on Proc object,
  # This allow to execute a Proc as it was an class method of klass
  # --> used for composition of class methods adaptations
  def phenomenal_class_bind(klass)
    block, time = self, Time.now
      method_name = "__bind_#{time.to_i}_#{time.usec}-#{rand(100000)}"
      method = nil
      klass.instance_eval do
        define_singleton_method(method_name, &block)
        method = method(method_name)
        (class << self; self end).instance_eval do
          remove_method(method_name)
        end
      end
      method
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
phenomenal-0.99.0 lib/phenomenal/proc.rb
phenomenal-0.9.0 lib/phenomenal/proc.rb
phenomenal-0.11.11.24.4 lib/phenomenal/proc.rb
phenomenal-0.11.11.24.3 lib/phenomenal/proc.rb