Class: Envoy::Messenger

Inherits:
Object
  • Object
show all
Defined in:
lib/envoy/messenger.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMessenger

Returns a new instance of Messenger.



7
8
9
10
11
# File 'lib/envoy/messenger.rb', line 7

def initialize
  self._transports = []
  self._messages = []
  self._sent_messages = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/envoy/messenger.rb', line 64

def method_missing(method, *args)
  message = self._messages.select do |message|
    message.name.to_s.gsub(' ', '_').downcase == method.to_s.gsub('deliver_', '')
  end.first

  unless message.nil?
    self._transports.each do |transport|
      self.deliver_message(transport, message)
    end
  else
    super
  end
end

Instance Attribute Details

#_messagesObject

Returns the value of attribute _messages.



5
6
7
# File 'lib/envoy/messenger.rb', line 5

def _messages
  @_messages
end

#_sent_messagesObject

Returns the value of attribute _sent_messages.



5
6
7
# File 'lib/envoy/messenger.rb', line 5

def _sent_messages
  @_sent_messages
end

#_transportsObject

Returns the value of attribute _transports.



5
6
7
# File 'lib/envoy/messenger.rb', line 5

def _transports
  @_transports
end

Instance Method Details

#deliver_message(transport, message) ⇒ Object



42
43
44
45
46
47
# File 'lib/envoy/messenger.rb', line 42

def deliver_message(transport, message)
  unless self._sent_messages.include?({ :transport => transport, :message => message })
    response = transport.send_message(message)
    self._sent_messages << { :transport => transport, :message => message } if response
  end
end

#deliver_messagesObject Also known as: deliver_all_messages



33
34
35
36
37
38
39
# File 'lib/envoy/messenger.rb', line 33

def deliver_messages
  self._messages.each do |message|
    self._transports.each do |transport|
      self.deliver_message(transport, message)
    end
  end
end

#message(message_options = {}) ⇒ Object Also known as: add_message



58
59
60
61
# File 'lib/envoy/messenger.rb', line 58

def message(message_options = {})
  self._messages << Envoy::Message.new(message_options[:name], message_options[:subject],
    message_options[:body], message_options[:options])
end

#messages(message_options = {}, &block) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/envoy/messenger.rb', line 49

def messages(message_options = {}, &block)
  if !message_options.empty?
    raise ArgumentError if !message_options.is_a?(Hash) and return
    self._messages << self.message(message_options)
  else
    yield self if block_given?
  end
end

#transport(transport_options = {}) ⇒ Object Also known as: add_transport



22
23
24
25
26
27
28
29
30
# File 'lib/envoy/messenger.rb', line 22

def transport(transport_options = {})
  transport_name = transport_options.delete(:name).to_s.capitalize
  begin
    transport_instance = Module.const_get("Envoy").const_get(transport_name).new(transport_options)
  rescue
    raise NoTransportError, "No transport exists for #{transport_name}" and return
  end
  self._transports << transport_instance
end

#transports(transport_options = {}, &block) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/envoy/messenger.rb', line 13

def transports(transport_options = {}, &block)
  if !transport_options.empty?
    raise ArgumentError if !transport_options.is_a?(Hash) and return
    self._transports << self.transport(transport_options)
  else
    yield self if block_given?
  end
end