lib/grape/middleware/formatter.rb in grape-0.6.0 vs lib/grape/middleware/formatter.rb in grape-0.6.1
- old
+ new
@@ -4,18 +4,21 @@
module Middleware
class Formatter < Base
def default_options
{
- :default_format => :txt,
- :formatters => {},
- :parsers => {}
+ default_format: :txt,
+ formatters: {},
+ parsers: {}
}
end
def headers
- env.dup.inject({}){|h,(k,v)| h[k.to_s.downcase[5..-1]] = v if k.to_s.downcase.start_with?('http_'); h}
+ env.dup.inject({}) do |h, (k, v)|
+ h[k.to_s.downcase[5..-1]] = v if k.to_s.downcase.start_with?('http_')
+ h
+ end
end
def before
negotiate_content_type
read_body_input
@@ -29,23 +32,23 @@
begin
bodymap = bodies.collect do |body|
formatter.call body, env
end
rescue Grape::Exceptions::InvalidFormatter => e
- throw :error, :status => 500, :message => e.message
+ throw :error, status: 500, message: e.message
end
headers['Content-Type'] = content_type_for(env['api.format']) unless headers['Content-Type']
Rack::Response.new(bodymap, status, headers).to_a
end
private
# store read input in env['api.request.input']
def read_body_input
if (request.post? || request.put? || request.patch? || request.delete?) &&
- (! request.form_data? || ! request.media_type) &&
- (! request.parseable_data?) &&
+ (!request.form_data? || !request.media_type) &&
+ (!request.parseable_data?) &&
(request.content_length.to_i > 0 || request.env['HTTP_TRANSFER_ENCODING'] == 'chunked')
if (input = env['rack.input'])
input.rewind
body = env['api.request.input'] = input.read
@@ -66,32 +69,34 @@
parser = Grape::Parser::Base.parser_for fmt, options
if parser
begin
body = (env['api.request.body'] = parser.call(body, env))
if body.is_a?(Hash)
- env['rack.request.form_hash'] = env['rack.request.form_hash'] ?
- env['rack.request.form_hash'].merge(body) :
- body
+ if env['rack.request.form_hash']
+ env['rack.request.form_hash'] = env['rack.request.form_hash'].merge(body)
+ else
+ env['rack.request.form_hash'] = body
+ end
env['rack.request.form_input'] = env['rack.input']
end
- rescue Exception => e
- throw :error, :status => 400, :message => e.message
+ rescue StandardError => e
+ throw :error, status: 400, message: e.message
end
else
env['api.request.body'] = body
end
else
- throw :error, :status => 406, :message => "The requested content-type '#{request.media_type}' is not supported."
+ throw :error, status: 406, message: "The requested content-type '#{request.media_type}' is not supported."
end
end
def negotiate_content_type
fmt = format_from_extension || format_from_params || options[:format] || format_from_header || options[:default_format]
if content_type_for(fmt)
env['api.format'] = fmt
else
- throw :error, :status => 406, :message => "The requested format '#{fmt}' is not supported."
+ throw :error, status: 406, message: "The requested format '#{fmt}' is not supported."
end
end
def format_from_extension
parts = request.path.split('.')
@@ -111,31 +116,32 @@
fmt
end
def format_from_header
mime_array.each do |t|
- if mime_types.key?(t)
- return mime_types[t]
- end
+ return mime_types[t] if mime_types.key?(t)
end
nil
end
def mime_array
- accept = headers['accept'] or return []
+ accept = headers['accept']
+ return [] unless accept
+
accept_into_mime_and_quality = %r(
(
\w+/[\w+.-]+) # eg application/vnd.example.myformat+xml
(?:
(?:;[^,]*?)? # optionally multiple formats in a row
;\s*q=([\d.]+) # optional "quality" preference (eg q=0.5)
)?
- )x # x = extended regular expression with comments etc
- vendor_prefix_pattern = %r(vnd\.[^+]+\+)
+ )x
- accept.scan(accept_into_mime_and_quality).
- sort_by { |_, quality_preference| -quality_preference.to_f }.
- map {|mime, _| mime.sub(vendor_prefix_pattern, '') }
+ vendor_prefix_pattern = /vnd\.[^+]+\+/
+
+ accept.scan(accept_into_mime_and_quality)
+ .sort_by { |_, quality_preference| -quality_preference.to_f }
+ .map { |mime, _| mime.sub(vendor_prefix_pattern, '') }
end
end
end
end