class Rack::BodyProxy

Proxy for response bodies allowing calling a block when the response body is closed (after the response has been fully sent to the client).

Public Class Methods

Set the response body to wrap, and the block to call when the response has been fully sent.

# File lib/rack/body_proxy.rb, line 10
def initialize(body, &block)
  @body = body
  @block = block
  @closed = false
end

Public Instance Methods

If not already closed, close the wrapped body and then call the block the proxy was initialized with.

# File lib/rack/body_proxy.rb, line 23
def close
  return if @closed
  @closed = true
  begin
    @body.close if @body.respond_to? :close
  ensure
    @block.call
  end
end

Whether the proxy is closed. The proxy starts as not closed, and becomes closed on the first call to close.

# File lib/rack/body_proxy.rb, line 35
def closed?
  @closed
end

Delegate missing methods to the wrapped body.

# File lib/rack/body_proxy.rb, line 40
def method_missing(method_name, *args, &block)
  @body.__send__(method_name, *args, &block)
end

Return whether the wrapped body responds to the method.

Calls superclass method
# File lib/rack/body_proxy.rb, line 17
def respond_to_missing?(method_name, include_all = false)
  super or @body.respond_to?(method_name, include_all)
end