Module: ForeignOffice

Defined in:
lib/foreign_office.rb,
lib/foreign_office/railtie.rb,
lib/foreign_office/version.rb,
lib/foreign_office/broadcaster.rb,
lib/foreign_office/test/client_exec.rb,
lib/foreign_office/busses/generic_bus.rb,
lib/foreign_office/foreign_office_helper.rb

Defined Under Namespace

Modules: Broadcaster, Busses, ForeignOfficeHelper, Test Classes: Engine, Railtie

Constant Summary collapse

VERSION =
"0.15.12"

Class Method Summary collapse

Class Method Details

.busObject



24
25
26
# File 'lib/foreign_office.rb', line 24

def self.bus
  @bus
end

.bus=(bus) ⇒ Object



20
21
22
# File 'lib/foreign_office.rb', line 20

def self.bus=(bus)
  @bus = bus
end

.cache_messagesObject



51
52
53
54
# File 'lib/foreign_office.rb', line 51

def self.cache_messages
  @cache_messages = true
  RequestStore.store[:foreign_office_messages] = {}
end

.config(config) ⇒ Object



14
15
16
17
18
# File 'lib/foreign_office.rb', line 14

def self.config(config)
  self.bus = config[:bus][:klass]
  self.bus.config(config[:bus])
  @publish_method = config[:publish_method]
end

.flush_messagesObject



60
61
62
63
64
65
66
# File 'lib/foreign_office.rb', line 60

def self.flush_messages
  messages = RequestStore.store[:foreign_office_messages].dup
  RequestStore.store[:foreign_office_messages] = {}
  messages.each do |channel,message|
    self.handle_publish_request(message)
  end
end

.handle_publish_request(message) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/foreign_office.rb', line 68

def self.handle_publish_request(message)
  if self.publish_method
    self.publish_method.call(message)
  else
    self.publish!(message)
  end
end

.publish(message) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/foreign_office.rb', line 40

def self.publish(message)
  Rails.logger.debug("ForeignOffice.publish: #{message.inspect}")
  if !!@cache_messages
    foreign_office_messages = RequestStore.store[:foreign_office_messages]
    channel_name = message[:channel]
    foreign_office_messages[channel_name] = message
  else
    self.handle_publish_request(message)
  end
end

.publish!(message, attempts = 0) ⇒ Object



76
77
78
79
80
# File 'lib/foreign_office.rb', line 76

def self.publish!(message, attempts = 0)
  attempts += 1
  Rails.logger.debug("ForeignOffice#publish! attempt: #{attempts} message: #{message.inspect}")
  self.bus.publish(message)
end

.publish_directlyObject



56
57
58
# File 'lib/foreign_office.rb', line 56

def self.publish_directly
  @cache_messages = false
end

.publish_methodObject



32
33
34
# File 'lib/foreign_office.rb', line 32

def self.publish_method
  @publish_method
end

.set_publish_method(&block) ⇒ Object



28
29
30
# File 'lib/foreign_office.rb', line 28

def self.set_publish_method(&block)
  @publish_method = block
end

.unset_publish_methodObject



36
37
38
# File 'lib/foreign_office.rb', line 36

def self.unset_publish_method
  @publish_method = nil
end