class Spectroscope::Hooks
Context
advice.
Attributes
hooks_all[R]
hooks_each[R]
Public Class Methods
new()
click to toggle source
New case instance.
# File lib/spectroscope/hooks.rb, line 10 def initialize @hooks_all = {:before=>[], :after=>[]} @hooks_each = {:before=>[], :after=>[]} end
Public Instance Methods
add(tense, range, *tags, &proc)
click to toggle source
# File lib/spectroscope/hooks.rb, line 26 def add(tense, range, *tags, &proc) case range when :all raise ArgumentError, "tagged #{tense}-all advice is useless" unless tags.empty? @hooks_all[tense] << Hook.new(tense, range, *tags, &proc) when :each @hooks_each[tense] << Hook.new(tense, range, *tags, &proc) else raise ArgumentError, "range must be :all or :each" end end
initialize_copy(original)
click to toggle source
# File lib/spectroscope/hooks.rb, line 16 def initialize_copy(original) original.hooks_all do |tense, hooks| hooks_all[tense] = hooks.clone end original.hooks_each do |tense, hooks| hooks_each[tense] = hooks.clone end end
run(target, tense, range, scope)
click to toggle source
# File lib/spectroscope/hooks.rb, line 39 def run(target, tense, range, scope) case range when :all hooks_all[tense].each do |hook| scope.instance_eval(&hook) end when :each hooks_each[tense].each do |hook| scope.instance_eval(&hook) if hook.match?(target) end else raise ArgumentError, "range must be :all or :each" end end