Sha256: 826b4d19815695c0ddde6633d23d23be518464c286ece13ad121832ede978143

Contents?: true

Size: 1.37 KB

Versions: 5

Compression:

Stored size: 1.37 KB

Contents

# HoboSupport - Metaid

    >> require 'hobosupport'
    >> HoboSupport::VERSION
    => "0.1"

Why the Luck Stiff's essential meta-programming additions to Object. These are probably distributed elsewhere, but they're small enough to throw them in to HoboSupport and remove an external dependency.

## Object#metaclass

Returns the "metaclass" (bad name) or "singleton class" of a given ruby Object

    >> o = Object.new
    >> def o.foo; ;123; end
    >> o.foo
    => 123
    >> o.metaclass.instance_methods.grep "foo"
    => ["foo"]

## Object#meta_eval

* `object.meta_eval(string)`
* `object.meta_eval { block }`

Evaluates ruby source or a block in the context of the metaclass.

    >> File.meta_eval "alias_method :b, :basename"
    >> File.b "a/b"
    => "b"

And with a block

    >> File.meta_eval { alias_method :b2, :basename }
    >> File.b2 "a/b"
    => "b"

## Object#metaclass_eval

* `object.metaclass_eval(string)`
* `object.metaclass_eval { block }`

Like #meta_eval, but does a `class_eval` instead of an `instance_eval`

    >> File.metaclass_eval "def b3(path); basename(path); end"
    >> File.b3 "a/b"
    => "b"

And with a block

    >> File.metaclass_eval { def b4(path); basename(path); end }
    >> File.b4 "a/b"
    => "b"
    
    
## Object#meta_def

    >> String.meta_def(:backwards_new) { |s| s.reverse }
    >> String.backwards_new "strange"
    => "egnarts"
   

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
hobo-support-0.1 test/hobosupport/metaid.rdoctest
hobosupport-0.1 test/hobosupport/metaid.rdoctest
hobosupport-0.2 test/hobosupport/metaid.rdoctest
hobosupport-0.7.3.99 test/hobosupport/metaid.rdoctest
hobosupport-0.7.4 test/hobosupport/metaid.rdoctest