This page printed from:
panoptic.com/rking/Hook+Methods+of+Ruby

For Our King, Only

Recent Changes / Heat / History

Hook Methods of Ruby

Difference between revisions from 2012/12/06 10:59 and 2012/09/12 11:26.
"Hook methods are methods that are called from the backend in reaction to something you do."

* BasicObject#initialize
* BasicObject#method_missing
* BasicObject#singleton_method_added
* BasicObject#singleton_method_removed
* BasicObject#singleton_method_undefined

* Kernel#respond_to_missing?

* Module#extended
* Module#included
* Module#method_added
* Module#method_removed
* Module#method_undefined
* Module#const_missing

* Class#inherited

Ruby 1.9 also adds intitialize_(copy|clone|dup) — See: http://www.jonathanleighton.com/articles/2011/initialize_clone-initialize_dup-and-initialize_copy-in-ruby/

! More info...

!! BasicObject#initialize

Signature: initialize()

Returns a new BasicObject. Arguments are ignored.


!! BasicObject#method_missing

Signature: method_missing(*arg1)

Invoked by Ruby when obj is sent a message it cannot handle.
symbol is the symbol for the method called, and args
are any arguments that were passed to it. By default, the interpreter
raises an error when this method is called. However, it is possible
to override the method to provide more dynamic behavior.
If it is decided that a particular method should not be handled, then
super should be called, so that ancestors can pick up the
missing method.
The example below creates
a class Roman, which responds to methods with names
consisting of roman numerals, returning the corresponding integer
values.

{{   class Roman
def romanToInt(str)
# ...
end
def method_missing(methId)
str = methId.id2name
romanToInt(str)
end
end

r = Roman.new
r.iv      #=> 4
r.xxiii   #=> 23
r.mm      #=> 2000

}}

!! BasicObject#singleton_method_added

Signature: singleton_method_added(arg1)

Invoked as a callback whenever a singleton method is added to the
receiver.

{{   module Chatty
def Chatty.singleton_method_added(id)
puts "Adding #{id.id2name}"
end
def self.one()     end
def two()          end
def Chatty.three() end
end

produces:

Adding singleton_method_added
Adding one
Adding three

}}

!! BasicObject#singleton_method_removed

Signature: singleton_method_removed(arg1)

Invoked as a callback whenever a singleton method is removed from
the receiver.

{{   module Chatty
def Chatty.singleton_method_removed(id)
puts "Removing #{id.id2name}"
end
def self.one()     end
def two()          end
def Chatty.three() end
class << self
remove_method :three
remove_method :one
end
end

produces:

Removing three
Removing one

}}

!! BasicObject#singleton_method_undefined

Signature: singleton_method_undefined(arg1)

Invoked as a callback whenever a singleton method is undefined in
the receiver.

{{   module Chatty
def Chatty.singleton_method_undefined(id)
puts "Undefining #{id.id2name}"
end
def Chatty.one()   end
class << self
undef_method(:one)
end
end

produces:

Undefining one

}}

!! Kernel#respond_to_missing?

Signature: respond_to_missing?(arg1, arg2)

Hook method to return whether the _obj_ can respond to _id_ method
or not.

See #respond_to?.


!! Module#extended

No docs from pry - I guess: https://www.google.com/search?q=ruby%20Module%23extended

!! Module#included

Signature: included(arg1)

Callback invoked whenever the receiver is included in another
module or class. This should be used in preference to
Module.append_features</tt> if your code wants to perform some
action when a module is included in another.

{{       module A
def A.included(mod)
puts "#{self} included in #{mod}"
end
end
module Enumerable
include A
end

Another example: http://blog.reenhanced.com/post/31397796389/log-all-calls-to-instance-methods-of-a-ruby-class

Another example: http://blog.reenhanced.com/post/31397796389/log-all-calls-to-instance-methods-of-a-ruby-class
!! Module#method_added

No docs from pry - I guess: https://www.google.com/search?q=ruby%20Module%23method_added

!! Module#method_removed

No docs from pry - I guess: https://www.google.com/search?q=ruby%20Module%23method_removed

!! Module#method_undefined

No docs from pry - I guess: https://www.google.com/search?q=ruby%20Module%23method_undefined

!! Module#const_missing

'Really' no docs from pry. Still try: https://www.google.com/search?q=ruby%20Module%23const_missing

!! Class#inherited

Signature: inherited(arg1)

Callback invoked whenever a subclass of the current class is created.

Example:

{{   class Foo
def self.inherited(subclass)
puts "New subclass: #{subclass}"
end
end

class Bar < Foo
end

class Baz < Bar
end

produces:

New subclass: Bar
New subclass: Baz

}}

! Thanks

To Hanmac of #ruby @ freenode!

! Regenerating...

(So I can rework this as I get more info...)

Script is: http://panoptic.com/rking/doc/hookmethods-doc.rb
Use in vim as: :map <f5> :w<cr>:!./% > /tmp/doc-out.wiki<cr>
Then slurp under Pentadactyl+gvim with: :/^! More/+2,/^! Thanks/-2d|r /tmp/doc-out.wiki


Last changed: 2012/12/06 10:59