Class: RServiceBus::HandlerManager

Inherits:
Object
  • Object
show all
Defined in:
lib/rservicebus/handler_manager.rb

Overview

Given a directory, this class is responsible for finding

msgnames,
handlernames, and
loading handlers

Instance Method Summary collapse

Constructor Details

#initialize(host, resource_manager, state_manager) ⇒ HandlerManager

Constructor



11
12
13
14
15
16
17
18
# File 'lib/rservicebus/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(msg_name, handler) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/rservicebus/handler_manager.rb', line 69

def add_handler(msg_name, handler)
  @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



114
115
116
# File 'lib/rservicebus/handler_manager.rb', line 114

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/rservicebus/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



105
106
107
108
109
110
111
112
# File 'lib/rservicebus/handler_manager.rb', line 105

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_namesObject



127
128
129
# File 'lib/rservicebus/handler_manager.rb', line 127

def get_list_of_msg_names
  @handler_list.keys
end

#get_list_of_resources_needed_to_process_msg(msg_name) ⇒ Object

As named



83
84
85
86
87
88
89
90
91
# File 'lib/rservicebus/handler_manager.rb', line 83

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_statsObject



118
119
120
121
122
123
124
125
# File 'lib/rservicebus/handler_manager.rb', line 118

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/rservicebus/handler_manager.rb', line 53

def interrogate_handler_for_app_resources(handler)
  RServiceBus.rlog "Checking app resources for: #{handler.class.name}"
  RServiceBus.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
    RServiceBus.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/rservicebus/handler_manager.rb', line 23

def set_bus_attribute_if_requested(handler)
  if defined?(handler.bus)
    handler.bus = @host
    RServiceBus.log 'Bus attribute set for: ' + handler.class.name
  end

  self
end

#set_resources_for_handlers_needed_to_process_msg(msg_name) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/rservicebus/handler_manager.rb', line 93

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)
      RServiceBus.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/rservicebus/handler_manager.rb', line 35

def set_state_attribute_if_requested(handler)
  if defined?(handler.State)
    handler.State = @state_manager.get(handler)
    RServiceBus.log 'Bus attribute set for: ' + handler.class.name
  end

  self
end