require "savon/hooks/hook"
module Savon
module Hooks
class Group
def initialize(hooks = [])
@hooks = hooks
end
def empty?
hooks.empty?
end
def count
hooks.count
end
def define(id, hook, &block)
hooks << Hook.new(id, hook, &block)
end
def reject(*ids)
ids = ids.flatten
hooks.reject! { |hook| ids.include? hook.id }
end
def fire(hook, *args, &callback)
callable = select(hook)
if callable.empty?
callback.call
else
args.unshift(callback) if callback
callable.call(*args)
end
end
def call(*args)
hooks.inject(nil) { |memo, hook| hook.call(*args) }
end
private
def hooks
@hooks ||= []
end
def select(hook)
Group.new hooks.select { |h| h.hook == hook }
end
end
end
end