Class: RackAfterReply::Adapter::WEBrick

Inherits:
Base
  • Object
show all
Defined in:
lib/rack_after_reply/adapter/webrick.rb

Defined Under Namespace

Modules: ResponseExtension, SocketExtension

Instance Method Summary collapse

Methods inherited from Base

apply, instance

Instance Method Details

#applyObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rack_after_reply/adapter/webrick.rb', line 4

def apply
  # Rack::Handler::WEBrick#service returns before the socket is closed,
  # and if we close it ourselves, WEBrick will close it again causing a
  # bomb. We can access the socket through the response argument, though,
  # so we hook into its #close method.
  Rack::Handler::WEBrick.module_eval do
    include RackAfterReply::RequestHandler

    def initialize_with_rack_after_reply(server, app)
      app = AppProxy.new(self, app)
      initialize_without_rack_after_reply(server, app)
    end
    RackAfterReply.freedom_patch self, :initialize

    def service_with_rack_after_reply(request, response)
      response.extend ResponseExtension
      response.rack_after_reply_handler = self
      service_without_rack_after_reply(request, response)
    end
    RackAfterReply.freedom_patch self, :service
  end
end