class Oxidized::HookManager

Constants

Events
RegisteredHook

RegisteredHook is a container for a Hook instance

Attributes

registered_hooks[R]

Public Class Methods

from_config(cfg) click to toggle source
# File lib/oxidized/hook.rb, line 4
def from_config(cfg)
  mgr = new
  cfg.hooks.each do |name, h_cfg|
    h_cfg.events.each do |event|
      mgr.register event.to_sym, name, h_cfg.type, h_cfg
    end
  end
  mgr
end
new() click to toggle source
# File lib/oxidized/hook.rb, line 30
def initialize
  @registered_hooks = Hash.new { |h, k| h[k] = [] }
end

Public Instance Methods

handle(event, ctx_params = {}) click to toggle source
# File lib/oxidized/hook.rb, line 53
def handle(event, ctx_params = {})
  ctx = HookContext.new ctx_params
  ctx.event = event

  @registered_hooks[event].each do |r_hook|
    begin
      r_hook.hook.run_hook ctx
    rescue StandardError => e
      Oxidized.logger.error "Hook #{r_hook.name} (#{r_hook.hook}) failed " \
                            "(#{e.inspect}) for event #{event.inspect}"
    end
  end
end
register(event, name, hook_type, cfg) click to toggle source
# File lib/oxidized/hook.rb, line 34
def register(event, name, hook_type, cfg)
  unless Events.include? event
    raise ArgumentError,
          "unknown event #{event}, available: #{Events.join ','}"
  end

  Oxidized.mgr.add_hook(hook_type) || raise("cannot load hook '#{hook_type}', not found")
  begin
    hook = Oxidized.mgr.hook.fetch(hook_type).new
  rescue KeyError
    raise KeyError, "cannot find hook #{hook_type.inspect}"
  end

  hook.cfg = cfg

  @registered_hooks[event] << RegisteredHook.new(name, hook)
  Oxidized.logger.debug "Hook #{name.inspect} registered #{hook.class} for event #{event.inspect}"
end