Skip to content
Adds UnboundMethod#bind_class to bind an UnboundMethod to a class.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples
ext
spec
.gitignore
.yardopts
README
Rakefile
force_bind.gemspec

README

= force_bind

Adds UnboundMethod#force_bind to bind an unbound method to class (or any object of any type).
It basically bypasses the argument type checking that #bind has.

== Requirements

* Ruby 1.9.1 or greater (does not work in Ruby 1.8.x)

== Example

Bind an instance method to its class (making it act like a class method):

  class Foo
    def bar
      puts "I'm inside #{self}"
    end
  end
  
  Foo.new.bar
  #=> "I'm inside #<Foo:0x123456>"
  
  meth = Foo.instance_method(:bar).force_bind(Foo)
  meth.call
  #=> "I'm inside Foo"
    
You can also use this to rebind the instance method of any object to any
other object:

  class A
    def foo; self end
  end
  
  class B; end
  
  meth = A.instance_method(:foo).force_bind(B.new)
  meth.call
  #=> #<B:0x123456>
You can’t perform that action at this time.