Class: RServiceBus2::HandlerManager

Inherits:
Object
  • Object
show all
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

Constructor Details

#initialize(host, resource_manager, state_manager) ⇒ HandlerManager

Constructor

Parameters:

  • host (RServiceBus2::Host)

    instance

  • app_resources (Hash)

    As hash where k is the name of a resource, and v is the resource



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

Parameters:

  • handler (RServiceBus2::Handler)


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_namesObject



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

Parameters:

  • msgName (String)
  • appResources (Array)

    A list of appResource



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_statsObject



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

Parameters:

  • handler (RServiceBus2::Handler)


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

Parameters:

  • handler (RServiceBus2::Handler)


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