Class: M2R::Handler Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/m2r/handler.rb

Overview

This class is abstract.

Subclass and override method hooks to implement your own Handler

Basic handler, scaffold for your own Handler. Overwrite hook methods to define behavior. After calling #listen the Handler will block waiting for request from connection generated by #connection_factory, process them and send reponses back.

Direct Known Subclasses

RackHandler

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection_factory, parser) ⇒ Handler

Returns a new instance of Handler.

Parameters:



23
24
25
26
# File 'lib/m2r/handler.rb', line 23

def initialize(connection_factory, parser)
  @connection = connection_factory.connection
  @parser     = parser
end

Instance Attribute Details

#connectionConnection

Returns used for receiving requests and sending responses.

Returns:

  • (Connection)

    used for receiving requests and sending responses



16
17
18
# File 'lib/m2r/handler.rb', line 16

def connection
  @connection
end

Instance Method Details

#after_all(request, response) ⇒ Object

Note:

‘response` might be nil depending on when exception occured.

Note:

In case of error this callback is called before on_error

Callback after request is processed that is executed even when execption occured. Useful for releasing resources (closing files etc)

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s, nil)

    Response that was sent to Mongrel2 instance



116
117
# File 'lib/m2r/handler.rb', line 116

def after_all(request, response)
end

#after_process(request, response) ⇒ Object

Callback after process_request is done

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s)

    Response that should be sent to Mongrel2 instance



93
94
95
# File 'lib/m2r/handler.rb', line 93

def after_process(request, response)
  return response
end

#after_reply(request, response) ⇒ Object

Callback after sending the response back

Parameters:

  • request (Request)

    Request object

  • response (Response, String, #to_s)

    Response that was sent to Mongrel2 instance



103
104
# File 'lib/m2r/handler.rb', line 103

def after_reply(request, response)
end

#listenObject

Start processing request



29
30
31
32
33
# File 'lib/m2r/handler.rb', line 29

def listen
  catch(:stop) do
    loop { one_loop }
  end
end

#on_disconnect(request) ⇒ Object

Callback executed when response could not be delivered by Mongrel2 because client already disconnected.

Parameters:

  • request (Request)

    Request object



70
71
# File 'lib/m2r/handler.rb', line 70

def on_disconnect(request)
end

#on_error(request, response, error) ⇒ Object

Note:

‘request` and/or `response` might be nil depending on when error occured

Callback when exception occured

Parameters:

  • request (Request, nil)

    Request object

  • response (Response, String, #to_s, nil)

    Response that might have been sent to Mongrel2 instance

  • error (StandardError)


127
128
# File 'lib/m2r/handler.rb', line 127

def on_error(request, response, error)
end

#on_request(request) ⇒ Object

Callback when a request is received

Parameters:

  • request (Request)

    Request object



52
53
# File 'lib/m2r/handler.rb', line 52

def on_request(request)
end

#on_upload_done(request) ⇒ Object

Callback when async-upload finished

Parameters:

  • request (Request)

    Request object



84
85
# File 'lib/m2r/handler.rb', line 84

def on_upload_done(request)
end

#on_upload_start(request) ⇒ Object

Callback when async-upload started

Parameters:

  • request (Request)

    Request object



77
78
# File 'lib/m2r/handler.rb', line 77

def on_upload_start(request)
end

#on_waitObject

Callback executed when waiting for a request



45
46
# File 'lib/m2r/handler.rb', line 45

def on_wait()
end

#process(request) ⇒ Response, ...

Override to return a response

Parameters:

  • request (Request)

    Request object

Returns:

  • (Response, String, #to_s)

    Response that should be sent to Mongrel2 instance

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/m2r/handler.rb', line 61

def process(request)
  raise NotImplementedError
end

#stopObject

Schedule stop after processing request



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

def stop
  @stop = true
end