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 28 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 40 def closed? @closed end
Delegate missing methods to the wrapped body.
Calls superclass method
# File lib/rack/body_proxy.rb, line 45 def method_missing(method_name, *args, &block) case method_name when :to_str super when :to_ary begin @body.__send__(method_name, *args, &block) ensure close end else @body.__send__(method_name, *args, &block) end 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) case method_name when :to_str false else super or @body.respond_to?(method_name, include_all) end end