Class: RServiceBus2::HandlerManager
- Inherits:
-
Object
- Object
- RServiceBus2::HandlerManager
- Defined in:
- lib/rservicebus2/handler_manager.rb
Overview
Given a directory, this class is responsible for finding
msgnames,
handlernames, and
loading handlers
Instance Method Summary collapse
- #add_handler(lc_msg_name, handler) ⇒ Object
- #can_msg_be_handled_locally(msg_name) ⇒ Object
-
#check_if_state_attribute_requested(handler) ⇒ Object
checkIfStateAttributeRequested.
- #get_handler_list_for_msg(msg_name) ⇒ Object
- #get_list_of_msg_names ⇒ Object
-
#get_list_of_resources_needed_to_process_msg(msg_name) ⇒ Object
As named.
- #get_stats ⇒ Object
-
#initialize(host, resource_manager, state_manager) ⇒ HandlerManager
constructor
Constructor.
- #interrogate_handler_for_app_resources(handler) ⇒ Object
-
#set_bus_attribute_if_requested(handler) ⇒ Object
setBusAttributeIfRequested.
- #set_resources_for_handlers_needed_to_process_msg(msg_name) ⇒ Object
-
#set_state_attribute_if_requested(handler) ⇒ Object
setStateAttributeIfRequested.
Constructor Details
#initialize(host, resource_manager, state_manager) ⇒ HandlerManager
Constructor
11 12 13 14 15 16 17 18 |
# File 'lib/rservicebus2/handler_manager.rb', line 11 def initialize(host, resource_manager, state_manager) @host = host @resource_manager = resource_manager @state_manager = state_manager @handler_list = {} @resource_list_by_handler_name = {} end |
Instance Method Details
#add_handler(lc_msg_name, handler) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rservicebus2/handler_manager.rb', line 69 def add_handler(lc_msg_name, handler) msg_name = lc_msg_name.gsub(/(?<=_|^)(\w)/){$1.upcase}.gsub(/(?:_)(\w)/,'\1') # Turn snake_case string to CamelCase @handler_list[msg_name] = [] if @handler_list[msg_name].nil? return unless @handler_list[msg_name].index{ |x| x.class.name == handler.class.name }.nil? @handler_list[msg_name] << handler set_bus_attribute_if_requested(handler) check_if_state_attribute_requested(handler) interrogate_handler_for_app_resources(handler) end |
#can_msg_be_handled_locally(msg_name) ⇒ Object
115 116 117 |
# File 'lib/rservicebus2/handler_manager.rb', line 115 def can_msg_be_handled_locally(msg_name) @handler_list.key?(msg_name) end |
#check_if_state_attribute_requested(handler) ⇒ Object
checkIfStateAttributeRequested
47 48 49 50 51 |
# File 'lib/rservicebus2/handler_manager.rb', line 47 def check_if_state_attribute_requested(handler) @state_manager.required if defined?(handler.state) self end |
#get_handler_list_for_msg(msg_name) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'lib/rservicebus2/handler_manager.rb', line 106 def get_handler_list_for_msg(msg_name) return [] if @handler_list[msg_name].nil? list = get_list_of_resources_needed_to_process_msg(msg_name) set_resources_for_handlers_needed_to_process_msg(msg_name) @handler_list[msg_name] end |
#get_list_of_msg_names ⇒ Object
128 129 130 |
# File 'lib/rservicebus2/handler_manager.rb', line 128 def get_list_of_msg_names @handler_list.keys end |
#get_list_of_resources_needed_to_process_msg(msg_name) ⇒ Object
As named
84 85 86 87 88 89 90 91 92 |
# File 'lib/rservicebus2/handler_manager.rb', line 84 def get_list_of_resources_needed_to_process_msg(msg_name) return [] if @handler_list[msg_name].nil? list = [] @handler_list[msg_name].each do |handler| list = list + @resource_list_by_handler_name[handler.class.name] unless @resource_list_by_handler_name[handler.class.name].nil? end list.uniq! end |
#get_stats ⇒ Object
119 120 121 122 123 124 125 126 |
# File 'lib/rservicebus2/handler_manager.rb', line 119 def get_stats list = [] @handler_list.each do |k, v| list << v.inspect end list end |
#interrogate_handler_for_app_resources(handler) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rservicebus2/handler_manager.rb', line 53 def interrogate_handler_for_app_resources(handler) RServiceBus2.rlog "Checking app resources for: #{handler.class.name}" RServiceBus2.rlog "If your attribute is not getting set, check that it is in the 'attr_accessor' list" @resource_list_by_handler_name[handler.class.name] = [] @resource_manager.get_all.each do |k, v| next unless handler.class.method_defined?(k) @resource_list_by_handler_name[handler.class.name] << k RServiceBus2.log "Resource attribute, #{k}, found for: " + handler.class.name end self end |
#set_bus_attribute_if_requested(handler) ⇒ Object
setBusAttributeIfRequested
23 24 25 26 27 28 29 30 |
# File 'lib/rservicebus2/handler_manager.rb', line 23 def set_bus_attribute_if_requested(handler) if defined?(handler.bus) handler.bus = @host RServiceBus2.log 'Bus attribute set for: ' + handler.class.name end self end |
#set_resources_for_handlers_needed_to_process_msg(msg_name) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/rservicebus2/handler_manager.rb', line 94 def set_resources_for_handlers_needed_to_process_msg(msg_name) @handler_list[msg_name].each do |handler| set_state_attribute_if_requested(handler) next if @resource_list_by_handler_name[handler.class.name].nil? @resource_list_by_handler_name[handler.class.name].each do |k| handler.instance_variable_set("@#{k}", @resource_manager.get(k).get_resource) RServiceBus2.rlog "App resource attribute, #{k}, set for: " + handler.class.name end end end |
#set_state_attribute_if_requested(handler) ⇒ Object
setStateAttributeIfRequested
35 36 37 38 39 40 41 42 |
# File 'lib/rservicebus2/handler_manager.rb', line 35 def set_state_attribute_if_requested(handler) if defined?(handler.state) handler.state = @state_manager.get(handler) RServiceBus2.log 'Bus attribute set for: ' + handler.class.name end self end |