Sha256: c0d46cca0057ac1c45638efb881ee5031351f3fa950ea37b217d3959e7edd183

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# encoding: utf-8

# Class for a proc that's got a name
class NamedProc < Proc
  attr_reader :name

  def initialize(name)
    @name = name
    super
  end
  
  # create one from a given proc/lambda object
  def self.create(name, block, lambda = false)
    name = name.to_sym
    # sorry for this ugly hack, is there a better way to lambdafy?
    block = Module.new.send(:define_method, name.to_sym, &block) if lambda
    
    new(name, &block)
  end
  
  # Proxy object to ease named proc initialization
  module Proxy
    Proc = BasicObject.new
    def Proc.method_missing(name, &block)   NamedProc.create(name, block) end

    Lambda = BasicObject.new
    def Lambda.method_missing(name, &block) NamedProc.create(name, block, true) end
  end
  
  # Mixing in low level method "links"
  module Object
    private
  
    # create a proc with name if given
    def proc
      if block_given?
        super
      else
        NamedProc::Proxy::Proc
      end
    end
    
    # same for lambda
    def lambda
      if block_given?
        super
      else
        NamedProc::Proxy::Lambda
      end
    end
  end
  
  ::Object.send :include, NamedProc::Object
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
named_proc-1.0 lib/named_proc.rb