1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# frozen_string_literal: true
# Aruba
module Aruba
# Aruba Hooks
class Hooks
private
attr_reader :store
public
# Create store
def initialize
@store = {}
end
# Add new hook
#
# @param [String, Symbol] label
# The name of the hook
#
# @param [Proc] block
# The block which should be run for the hook
def append(label, block)
unless store.key?(label.to_sym) && store[label.to_sym].respond_to?(:<<)
store[label.to_sym] = []
end
store[label.to_sym] << block
end
# Run hook
#
# @param [String, Symbol] label
# The name of the hook
#
# @param [Object] context
# The context in which the hook is run
#
# @param [Array] args
# Other arguments
def execute(label, context, *args)
Array(store[label.to_sym]).each do |block|
context.instance_exec(*args, &block)
end
end
# Check if hook exist
#
# @param [String, Symbol] label
# The name of the hook
def exist?(label)
store.key? label.to_sym
end
end
end
|