CSC/ECE 517 Summer 2008/wiki1 5 bk: Difference between revisions
Line 1: | Line 1: | ||
==Understanding Hooks== | ==Understanding Hooks== | ||
The hooking mechanism in Ruby allows certain functional events | The hooking mechanism in Ruby allows certain functional events inside a running program to be identified while providing an action that will occur upon detection of the specified event. In this way, hooks serve as a detector of actions within the code. Examples of where such a technique would prove useful include: | ||
*Recording when or how many times a method is called. | *Recording when or how many times a method is called. | ||
*Recording when an object is created. | *Recording when an object is created. | ||
*Debugging problematic code. | |||
<code> | |||
module Kernel | |||
alias_method :original_system, :system | |||
def system(*args) | |||
puts "Your program executed the \"#{args.join(', ')}\" command." | |||
puts "It was executed at: " + `date` | |||
puts "The command output the following: " | |||
original_system(*args) | |||
end | |||
end | |||
system("ls -al") | |||
</code> | |||
<tt> | |||
Your program executed the "ls -al" command. | |||
It was executed at: Mon Jun 2 21:19:27 EDT 2008 | |||
The command output the following: | |||
total 20 | |||
drwxr-xr-x 2 brking brking 4096 2008-06-02 21:19 . | |||
drwxr-xr-x 18 brking brking 4096 2008-06-02 21:19 .. | |||
-rw-r--r-- 1 brking brking 134 2008-06-01 22:01 fib.rb | |||
-rw-r--r-- 1 brking brking 235 2008-06-02 20:29 hooking.rb | |||
-rw-r--r-- 1 brking brking 287 2008-06-02 21:19 moreHooking.rb | |||
</tt> | |||
==Understanding Aspect Oriented Programming== | ==Understanding Aspect Oriented Programming== |
Revision as of 01:21, 3 June 2008
Understanding Hooks
The hooking mechanism in Ruby allows certain functional events inside a running program to be identified while providing an action that will occur upon detection of the specified event. In this way, hooks serve as a detector of actions within the code. Examples of where such a technique would prove useful include:
- Recording when or how many times a method is called.
- Recording when an object is created.
- Debugging problematic code.
module Kernel
alias_method :original_system, :system
def system(*args)
puts "Your program executed the \"#{args.join(', ')}\" command."
puts "It was executed at: " + `date`
puts "The command output the following: "
original_system(*args)
end
end
system("ls -al")
Your program executed the "ls -al" command. It was executed at: Mon Jun 2 21:19:27 EDT 2008 The command output the following: total 20 drwxr-xr-x 2 brking brking 4096 2008-06-02 21:19 . drwxr-xr-x 18 brking brking 4096 2008-06-02 21:19 .. -rw-r--r-- 1 brking brking 134 2008-06-01 22:01 fib.rb -rw-r--r-- 1 brking brking 235 2008-06-02 20:29 hooking.rb -rw-r--r-- 1 brking brking 287 2008-06-02 21:19 moreHooking.rb