Class: Oxidized::HookManager
- Inherits:
-
Object
- Object
- Oxidized::HookManager
- Includes:
- SemanticLogger::Loggable
- Defined in:
- lib/oxidized/hook.rb
Defined Under Namespace
Classes: HookContext, RegisteredHook
Constant Summary collapse
- EVENTS =
%i[ node_success node_fail post_store nodes_done source_node_transform ].freeze
Instance Attribute Summary collapse
-
#registered_hooks ⇒ Object
readonly
Returns the value of attribute registered_hooks.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ HookManager
constructor
A new instance of HookManager.
- #node_fail(node:, job: nil) ⇒ Object
-
#node_success(node:, job: nil) ⇒ Object
— Fire-and-forget events —.
- #nodes_done ⇒ Object
- #post_store(node:, job: nil, commitref: nil) ⇒ Object
- #register(event, name, hook_type, cfg) ⇒ Object
-
#source_node_transform(node:, node_raw:, context:) ⇒ Object
Runs source_node_transform hooks in sequence, passing the return value of each hook as node to the next.
Constructor Details
#initialize ⇒ HookManager
Returns a new instance of HookManager.
40 41 42 |
# File 'lib/oxidized/hook.rb', line 40 def initialize @registered_hooks = Hash.new { |h, k| h[k] = [] } end |
Instance Attribute Details
#registered_hooks ⇒ Object (readonly)
Returns the value of attribute registered_hooks.
38 39 40 |
# File 'lib/oxidized/hook.rb', line 38 def registered_hooks @registered_hooks end |
Class Method Details
.from_config(cfg) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/oxidized/hook.rb', line 6 def from_config(cfg) mgr = new cfg.hooks.each do |name, h_cfg| raise("Please specify an hook type in the configuration") unless h_cfg.type? h_cfg.events.each do |event| mgr.register event.to_sym, name, h_cfg.type, h_cfg end end mgr end |
Instance Method Details
#node_fail(node:, job: nil) ⇒ Object
90 91 92 |
# File 'lib/oxidized/hook.rb', line 90 def node_fail(node:, job: nil) handle(:node_fail, node: node, job: job) end |
#node_success(node:, job: nil) ⇒ Object
— Fire-and-forget events —
86 87 88 |
# File 'lib/oxidized/hook.rb', line 86 def node_success(node:, job: nil) handle(:node_success, node: node, job: job) end |
#nodes_done ⇒ Object
98 99 100 |
# File 'lib/oxidized/hook.rb', line 98 def nodes_done handle(:nodes_done) end |
#post_store(node:, job: nil, commitref: nil) ⇒ Object
94 95 96 |
# File 'lib/oxidized/hook.rb', line 94 def post_store(node:, job: nil, commitref: nil) handle(:post_store, node: node, job: job, commitref: commitref) end |
#register(event, name, hook_type, cfg) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/oxidized/hook.rb', line 44 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) logger.debug "Hook #{name.inspect} registered #{hook.class} for event #{event.inspect}" end |
#source_node_transform(node:, node_raw:, context:) ⇒ Object
Runs source_node_transform hooks in sequence, passing the return value of each hook as node to the next. Returns the final node, or nil to signal that the node should be excluded.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/oxidized/hook.rb', line 68 def source_node_transform(node:, node_raw:, context:) ctx = HookContext.new( event: :source_node_transform, node: node, node_raw: node_raw, context: context ) @registered_hooks[:source_node_transform].each do |r_hook| ctx.node = r_hook.hook.run_hook(ctx) rescue StandardError => e logger.error "Hook #{r_hook.name} (#{r_hook.hook}) failed " \ "(#{e.inspect}) for event :source_node_transform" end ctx.node end |