lib/grape/middleware/formatter.rb in grape-0.2.3 vs lib/grape/middleware/formatter.rb in grape-0.2.4
- old
+ new
@@ -16,11 +16,11 @@
env.dup.inject({}){|h,(k,v)| h[k.to_s.downcase[5..-1]] = v if k.to_s.downcase.start_with?('http_'); h}
end
def before
fmt = format_from_extension || format_from_params || options[:format] || format_from_header || options[:default_format]
- if content_types.key?(fmt)
+ if content_type_for(fmt)
if !env['rack.input'].nil? and (body = env['rack.input'].read).strip.length != 0
parser = Grape::Parser::Base.parser_for fmt, options
unless parser.nil?
begin
body = parser.call body, env
@@ -40,19 +40,22 @@
def format_from_extension
parts = request.path.split('.')
if parts.size > 1
- extension = parts.last.to_sym
- return extension if content_types.key?(extension)
+ extension = parts.last
+ # avoid symbol memory leak on an unknown format
+ return extension.to_sym if content_type_for(extension)
end
nil
end
def format_from_params
fmt = Rack::Utils.parse_nested_query(env['QUERY_STRING'])["format"]
- fmt ? fmt.to_sym : nil
+ # avoid symbol memory leak on an unknown format
+ return fmt.to_sym if content_type_for(fmt)
+ fmt
end
def format_from_header
mime_array.each do |t|
if mime_types.key?(t)
@@ -74,10 +77,10 @@
status, headers, bodies = *@app_response
formatter = Grape::Formatter::Base.formatter_for env['api.format'], options
bodymap = bodies.collect do |body|
formatter.call body, env
end
- headers['Content-Type'] = content_types[env['api.format']] unless headers['Content-Type']
+ headers['Content-Type'] = content_type_for(env['api.format']) unless headers['Content-Type']
Rack::Response.new(bodymap, status, headers).to_a
end
end
end