lib/grape/middleware/formatter.rb in grape-0.2.2 vs lib/grape/middleware/formatter.rb in grape-0.2.3
- old
+ new
@@ -1,17 +1,15 @@
require 'grape/middleware/base'
module Grape
module Middleware
class Formatter < Base
- include Formats
def default_options
{
:default_format => :txt,
:formatters => {},
- :content_types => {},
:parsers => {}
}
end
def headers
@@ -20,14 +18,14 @@
def before
fmt = format_from_extension || format_from_params || options[:format] || format_from_header || options[:default_format]
if content_types.key?(fmt)
if !env['rack.input'].nil? and (body = env['rack.input'].read).strip.length != 0
- parser = parser_for fmt
+ parser = Grape::Parser::Base.parser_for fmt, options
unless parser.nil?
begin
- body = parser.call(body)
+ body = parser.call body, env
env['rack.request.form_hash'] = !env['rack.request.form_hash'].nil? ? env['rack.request.form_hash'].merge(body) : body
env['rack.request.form_input'] = env['rack.input']
rescue
# It's possible that it's just regular POST content -- just back off
end
@@ -40,14 +38,14 @@
end
end
def format_from_extension
parts = request.path.split('.')
- extension = parts.last.to_sym
- if parts.size > 1 && content_types.key?(extension)
- return extension
+ if parts.size > 1
+ extension = parts.last.to_sym
+ return extension if content_types.key?(extension)
end
nil
end
def format_from_params
@@ -72,15 +70,16 @@
}
end
def after
status, headers, bodies = *@app_response
- formatter = formatter_for env['api.format']
+ formatter = Grape::Formatter::Base.formatter_for env['api.format'], options
bodymap = bodies.collect do |body|
- formatter.call(body)
+ formatter.call body, env
end
headers['Content-Type'] = content_types[env['api.format']] unless headers['Content-Type']
Rack::Response.new(bodymap, status, headers).to_a
end
+
end
end
end