Sha256: 4621eff3d27e9e1f0087b6b3e91314c8d75a7caef09940e91b5db51a02c8ea30

Contents?: true

Size: 1.44 KB

Versions: 31

Compression:

Stored size: 1.44 KB

Contents

# This is a direct copy of the facets library metaclass stuff.
# used by Tarantula pulling in all of Facets doesn't make sense here.

# From lib/core/facets/metaid.rb
module Kernel
  def meta_alias(*args)
    meta_class do
      alias_method(*args)
    end
  end

  def meta_eval(str=nil, &blk)
    if str
      meta_class.instance_eval(str)
    else
      meta_class.instance_eval(&blk)
    end
  end

  def meta_def( name, &block )
    meta_class do
      define_method( name, &block )
    end
  end

  def meta_class(&block)
    if block_given?
      (class << self; self; end).class_eval(&block)
    else
      (class << self; self; end)
    end
  end

  alias_method :metaclass, :meta_class

  def eigenclass
    (class << self; self; end)
  end
end

class Module
  def class_def name, &blk
    class_eval { define_method name, &blk }
  end

  protected :attr
  protected :attr_reader
  protected :attr_writer
  protected :attr_accessor
  protected :remove_method
  protected :undef_method
end

# From /lib/more/facets/kernel/meta.rb
module Kernel
  def meta
    @_meta_functor ||= Functor.new do |op,*args|
      (class << self; self; end).send(op,*args)
    end
  end
end

# From /lib/core/facets/functor.rb
class Functor
  private(*instance_methods.select { |m| m !~ /(^__|^binding$)/ })

  def initialize(&function)
    @function = function
  end

  def to_proc
    @function
  end

  def method_missing(op, *args, &blk)
    @function.call(op, *args, &blk)
  end
end

Version data entries

31 entries across 31 versions & 6 rubygems

Version Path
codez-tarantula-0.5.5 lib/relevance/core_extensions/metaclass.rb
codez-tarantula-0.5.4 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.2 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.3 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.4 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.5 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.6 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.7 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.1.8 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.2.0 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.2.1 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.3.2 lib/relevance/core_extensions/metaclass.rb
relevance-tarantula-0.3.3 lib/relevance/core_extensions/metaclass.rb
romanbsd-tarantula-0.1.8 lib/relevance/core_extensions/metaclass.rb
romanbsd-tarantula-0.2.0 lib/relevance/core_extensions/metaclass.rb
codez-tarantula-0.5.3 lib/relevance/core_extensions/metaclass.rb
codez-tarantula-0.5.1 lib/relevance/core_extensions/metaclass.rb
codez-tarantula-0.5.0 lib/relevance/core_extensions/metaclass.rb
tarantula-0.5.1 lib/relevance/core_extensions/metaclass.rb
tarantula-0.5.0 lib/relevance/core_extensions/metaclass.rb