Sha256: 561e9bd761a0cfb9bfcecd31495e928a4a3ab526eab0e217cf6fadb4cb7b7c41

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

# HoboSupport - Metaid

    doctest_require: '../../lib/hobosupport'
{.hidden}

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

6 entries across 6 versions & 1 rubygems

Version Path
hobosupport-0.9.0 test/hobosupport/metaid.rdoctest
hobosupport-0.8.10 test/hobosupport/metaid.rdoctest
hobosupport-0.8.9 test/hobosupport/metaid.rdoctest
hobosupport-0.8.8 test/hobosupport/metaid.rdoctest
hobosupport-0.8.7 test/hobosupport/metaid.rdoctest
hobosupport-0.8.6 test/hobosupport/metaid.rdoctest