mirror of
https://github.com/github/rails.git
synced 2026-02-06 04:05:17 -05:00
29 lines
586 B
Ruby
29 lines
586 B
Ruby
module ActionController
|
|
class RewindableInput
|
|
class RewindableIO < ActiveSupport::BasicObject
|
|
def initialize(io)
|
|
@io = io
|
|
@rewindable = io.is_a?(::StringIO)
|
|
end
|
|
|
|
def method_missing(method, *args, &block)
|
|
unless @rewindable
|
|
@io = ::StringIO.new(@io.read)
|
|
@rewindable = true
|
|
end
|
|
|
|
@io.__send__(method, *args, &block)
|
|
end
|
|
end
|
|
|
|
def initialize(app)
|
|
@app = app
|
|
end
|
|
|
|
def call(env)
|
|
env['rack.input'] = RewindableIO.new(env['rack.input'])
|
|
@app.call(env)
|
|
end
|
|
end
|
|
end
|