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