Class: Chef::EventDispatch::Dispatcher

Inherits:
Base
  • Object
show all
Defined in:
lib/chef/event_dispatch/dispatcher.rb

Overview

EventDispatch::Dispatcher

The Dispatcher handles receiving event data from the sources (Chef::Client, Resources and Providers, etc.) and publishing the data to the registered subscribers.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#action_collection_registration, #attribute_changed, #attribute_file_load_failed, #attribute_file_loaded, #attribute_load_complete, #attribute_load_start, #converge_complete, #converge_failed, #converge_start, #cookbook_clean_complete, #cookbook_clean_start, #cookbook_compilation_complete, #cookbook_compilation_start, #cookbook_gem_failed, #cookbook_gem_finished, #cookbook_gem_installing, #cookbook_gem_start, #cookbook_gem_using, #cookbook_resolution_complete, #cookbook_resolution_failed, #cookbook_resolution_start, #cookbook_sync_complete, #cookbook_sync_failed, #cookbook_sync_start, #definition_file_load_failed, #definition_file_loaded, #definition_load_complete, #definition_load_start, #handler_executed, #handlers_completed, #handlers_start, #library_file_load_failed, #library_file_loaded, #library_load_complete, #library_load_start, #lwrp_file_load_failed, #lwrp_file_loaded, #lwrp_load_complete, #lwrp_load_start, #msg, #node_load_completed, #node_load_failed, #node_load_start, #node_load_success, #ohai_completed, #ohai_plugin_file_load_failed, #ohai_plugin_file_loaded, #ohai_plugin_load_complete, #ohai_plugin_load_start, #policyfile_loaded, #provider_requirement_failed, #recipe_file_load_failed, #recipe_file_loaded, #recipe_load_complete, #recipe_load_start, #recipe_not_found, #registration_completed, #registration_failed, #registration_start, #removed_cookbook_file, #resource_action_start, #resource_bypassed, #resource_completed, #resource_current_state_load_bypassed, #resource_current_state_loaded, #resource_failed, #resource_failed_retriable, #resource_skipped, #resource_up_to_date, #resource_update_applied, #resource_update_progress, #resource_updated, #run_completed, #run_failed, #run_list_expand_failed, #run_list_expanded, #run_start, #run_started, #skipping_registration, #stream_closed, #stream_opened, #stream_output, #synchronized_cookbook, #updated_cookbook_file, #whyrun_assumption

Constructor Details

#initialize(*subscribers) ⇒ Dispatcher



15
16
17
18
# File 'lib/chef/event_dispatch/dispatcher.rb', line 15

def initialize(*subscribers)
  @subscribers = subscribers
  @event_list = []
end

Instance Attribute Details

#event_listObject (readonly)

Returns the value of attribute event_list



13
14
15
# File 'lib/chef/event_dispatch/dispatcher.rb', line 13

def event_list
  @event_list
end

#subscribersObject (readonly)

Returns the value of attribute subscribers



12
13
14
# File 'lib/chef/event_dispatch/dispatcher.rb', line 12

def subscribers
  @subscribers
end

Instance Method Details

#call_subscribers(method_name, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/chef/event_dispatch/dispatcher.rb', line 59

def call_subscribers(method_name, *args)
  @in_call = true
  subscribers.each do |s|
    # Skip new/unsupported event names
    next if !s.respond_to?(method_name)
    mth = s.method(method_name)
    # Trim arguments to match what the subscriber expects to allow
    # adding new arguments without breaking compat.
    if mth.arity < args.size && mth.arity >= 0
      mth.call(*args.take(mth.arity))
    else
      mth.call(*args)
    end
  end
ensure
  @in_call = false
end

#deprecation(message, location = caller(2..2)[0]) ⇒ Object

Special case deprecation, since it needs to know its caller



43
44
45
# File 'lib/chef/event_dispatch/dispatcher.rb', line 43

def deprecation(message, location = caller(2..2)[0])
  enqueue(:deprecation, message, location)
end

#enqueue(method_name, *args) ⇒ Object



29
30
31
32
# File 'lib/chef/event_dispatch/dispatcher.rb', line 29

def enqueue(method_name, *args)
  event_list << [ method_name, *args ]
  process_events_until_done unless @in_call
end

#formatter?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Check to see if we are dispatching to a formatter



49
50
51
# File 'lib/chef/event_dispatch/dispatcher.rb', line 49

def formatter?
  subscribers.any? { |s| s.respond_to?(:is_formatter?) && s.is_formatter? }
end

#register(subscriber) ⇒ Object

Add a new subscriber to the list of registered subscribers



21
22
23
# File 'lib/chef/event_dispatch/dispatcher.rb', line 21

def register(subscriber)
  subscribers << subscriber
end

#unregister(subscriber) ⇒ Object



25
26
27
# File 'lib/chef/event_dispatch/dispatcher.rb', line 25

def unregister(subscriber)
  subscribers.reject! { |x| x == subscriber }
end