class Chef::EventDispatch::DSL
def initialize(name)
def initialize(name) klass = Class.new(Chef::EventDispatch::Base) do attr_reader :name end @handler = klass.new @handler.instance_variable_set(:@name, name) # Use event.register API to add anonymous handler if Chef.run_context # and associated event dispatcher is set, else fallback to # Chef::Config[:event_handlers] if Chef.run_context && Chef.run_context.events Chef::Log.trace("Registering handler '#{name}' using events api") Chef.run_context.events.register(handler) else Chef::Log.trace("Registering handler '#{name}' using global config") Chef::Config[:event_handlers] << handler end end
def on(event_type, &block)
-
(Chef::EventDispatch::Base)
- a base handler object
def on(event_type, &block) validate!(event_type) handler.define_singleton_method(event_type) do |*args| instance_exec(*args, &block) end end
def validate!(event_type)
def validate!(event_type) all_event_types = (Chef::EventDispatch::Base.instance_methods - Object.instance_methods) raise Chef::Exceptions::InvalidEventType, "Invalid event type: #{event_type}" unless all_event_types.include?(event_type) end