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