CSC/ECE 517 Fall 2010/ch3 3d mr: Difference between revisions
Jump to navigation
Jump to search
| Line 39: | Line 39: | ||
=== AspectR === | === AspectR === | ||
require aspectr.rb | |||
include AspectR | |||
def | |||
class Profiler < Aspect | |||
def method_start(method, object, exitstatus, *args) | |||
@begin = Time.now | |||
end | |||
def method_end(method, object, exitstatus, *args) | |||
timeElapsed = Time.now - @begin | |||
puts "#{object.class}.#{method} took #{timeElapsed} secs" | |||
end | end | ||
end | |||
#if $0 == __FILE__ | |||
class SomeClass | |||
def some_method | |||
puts "hello" | |||
sleep 5 | |||
end | |||
end | end | ||
Profiler.new.wrap(SomeClass, :method_start, :method_end, /some/) | |||
SomeClass.new.some_method | |||
#end | |||
=== AspectJ === | === AspectJ === | ||
Revision as of 09:40, 5 October 2010
Aspect-oriented programming and AspectR
AspectR is a very useful Ruby module, but it is not easy to find documentation on it that is appropriate for students taking this class. Find, or construct, documentation that explains what it does without presuming previous knowledge of AspectJ, that describes many or all methods of the module and how they work. Also find or produce an easy-to-understand example that does not involve logging. Show how the example would be implemented in AspectJ and AspectR.
Overview
Motivation
Methods
add_advice (AspectR::Aspect)
all_classes (AspectR)
disable_advice_dispatching (AspectR::Aspect)
dispatch? (AspectR::Aspect)
get_methods (AspectR::Aspect)
new (AspectR::Aspect)
prepare (AspectR::Aspect)
remove_advice (AspectR::Aspect)
unwrap (AspectR::Aspect)
wrap (AspectR::Aspect)
wrap_classes (AspectR)
wrap_with_code (AspectR::Aspect)
wrappable? (AspectR::Aspect)
Example
AspectR
require aspectr.rb
include AspectR
class Profiler < Aspect
def method_start(method, object, exitstatus, *args)
@begin = Time.now
end
def method_end(method, object, exitstatus, *args)
timeElapsed = Time.now - @begin
puts "#{object.class}.#{method} took #{timeElapsed} secs"
end
end
#if $0 == __FILE__
class SomeClass
def some_method
puts "hello"
sleep 5
end
end
Profiler.new.wrap(SomeClass, :method_start, :method_end, /some/)
SomeClass.new.some_method
#end