Class: Clickatell::Catcher::Rack::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/clickatell/catcher/rack.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Middleware

Returns a new instance of Middleware.



14
15
16
17
18
19
20
# File 'lib/clickatell/catcher/rack.rb', line 14

def initialize(app, options = {})
  @app = app
  @messages = Clickatell::Catcher::Rack::SharedArray.new
  @logger = options[:logger] || ::Rack::NullLogger.new(nil)
  @message_adder = MessageAdder.new(@messages)
  @messages_renderer = MessagesRenderer.new(@messages)
end

Instance Attribute Details

#messagesObject (readonly)

Returns the value of attribute messages.



12
13
14
# File 'lib/clickatell/catcher/rack.rb', line 12

def messages
  @messages
end

Instance Method Details

#add_message(request_body) ⇒ Object



22
23
24
25
26
# File 'lib/clickatell/catcher/rack.rb', line 22

def add_message(request_body)
  @message_adder.add(request_body)
  @logger.debug("[#{Process.pid}] Messages: " + @messages.inspect)
  @message_adder.rack_response
end

#call(env) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/clickatell/catcher/rack.rb', line 41

def call(env)
  request = ::Rack::Request.new(env)
  if request.path == '/rest/message'
    rest_message(request)
  else
    status, headers, body = @app.call(env)

    # return result
    [status, headers, body]
  end
end

#render_messagesObject



28
29
30
31
# File 'lib/clickatell/catcher/rack.rb', line 28

def render_messages
  @logger.debug("[#{Process.pid}] Rendering Messages: " + @messages.inspect)
  @messages_renderer.rack_response
end

#rest_message(request) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/clickatell/catcher/rack.rb', line 33

def rest_message(request)
  if request.get?
    render_messages
  else
    add_message(request.body.read)
  end
end