lib/grape/middleware/formatter.rb in grape-2.0.0 vs lib/grape/middleware/formatter.rb in grape-2.1.0
- old
+ new
@@ -1,13 +1,12 @@
# frozen_string_literal: true
-require 'grape/middleware/base'
-
module Grape
module Middleware
class Formatter < Base
CHUNKED = 'chunked'
+ FORMAT = 'format'
def default_options
{
default_format: :txt,
formatters: {},
@@ -24,11 +23,11 @@
return unless @app_response
status, headers, bodies = *@app_response
if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include?(status)
- @app_response
+ [status, headers, []]
else
build_formatted_response(status, headers, bodies)
end
end
@@ -80,18 +79,18 @@
(request.post? || request.put? || request.patch? || request.delete?) &&
(!request.form_data? || !request.media_type) &&
!request.parseable_data? &&
(request.content_length.to_i.positive? || request.env[Grape::Http::Headers::HTTP_TRANSFER_ENCODING] == CHUNKED)
- return unless (input = env[Grape::Env::RACK_INPUT])
+ return unless (input = env[Rack::RACK_INPUT])
- input.rewind
+ rewind_input input
body = env[Grape::Env::API_REQUEST_INPUT] = input.read
begin
read_rack_input(body) if body && !body.empty?
ensure
- input.rewind
+ rewind_input input
end
end
# store parsed input in env['api.request.body']
def read_rack_input(body)
@@ -101,16 +100,16 @@
parser = Grape::Parser.parser_for fmt, **options
if parser
begin
body = (env[Grape::Env::API_REQUEST_BODY] = parser.call(body, env))
if body.is_a?(Hash)
- env[Grape::Env::RACK_REQUEST_FORM_HASH] = if env.key?(Grape::Env::RACK_REQUEST_FORM_HASH)
- env[Grape::Env::RACK_REQUEST_FORM_HASH].merge(body)
- else
- body
- end
- env[Grape::Env::RACK_REQUEST_FORM_INPUT] = env[Grape::Env::RACK_INPUT]
+ env[Rack::RACK_REQUEST_FORM_HASH] = if env.key?(Rack::RACK_REQUEST_FORM_HASH)
+ env[Rack::RACK_REQUEST_FORM_HASH].merge(body)
+ else
+ body
+ end
+ env[Rack::RACK_REQUEST_FORM_INPUT] = env[Rack::RACK_INPUT]
end
rescue Grape::Exceptions::Base => e
raise e
rescue StandardError => e
throw :error, status: 400, message: e.message, backtrace: e.backtrace, original_exception: e
@@ -139,11 +138,11 @@
end
nil
end
def format_from_params
- fmt = Rack::Utils.parse_nested_query(env[Grape::Http::Headers::QUERY_STRING])[Grape::Http::Headers::FORMAT]
+ fmt = Rack::Utils.parse_nested_query(env[Rack::QUERY_STRING])[FORMAT]
# avoid symbol memory leak on an unknown format
return fmt.to_sym if content_type_for(fmt)
fmt
end
@@ -171,9 +170,13 @@
vendor_prefix_pattern = /vnd\.[^+]+\+/
accept.scan(accept_into_mime_and_quality)
.sort_by { |_, quality_preference| -(quality_preference ? quality_preference.to_f : 1.0) }
.flat_map { |mime, _| [mime, mime.sub(vendor_prefix_pattern, '')] }
+ end
+
+ def rewind_input(input)
+ input.rewind if input.respond_to?(:rewind)
end
end
end
end