Class: Grape::Middleware::Formatter

Inherits:
Base
  • Object
show all
Defined in:
lib/grape/middleware/formatter.rb

Instance Attribute Summary

Attributes inherited from Base

#app, #env, #options

Instance Method Summary collapse

Methods inherited from Base

#call, #call!, #content_type, #content_type_for, #content_types, #initialize, #mime_types, #response

Constructor Details

This class inherits a constructor from Grape::Middleware::Base

Instance Method Details

#afterObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/grape/middleware/formatter.rb', line 26

def after
  status, headers, bodies = *@app_response
  # allow content-type to be explicitly overwritten
  api_format = mime_types[headers["Content-Type"]] || env['api.format']
  formatter = Grape::Formatter::Base.formatter_for api_format, options
  begin
    bodymap = bodies.collect do |body|
      formatter.call body, env
    end
  rescue Grape::Exceptions::InvalidFormatter => e
    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

#beforeObject



21
22
23
24
# File 'lib/grape/middleware/formatter.rb', line 21

def before
  negotiate_content_type
  read_body_input
end

#default_optionsObject



6
7
8
9
10
11
12
# File 'lib/grape/middleware/formatter.rb', line 6

def default_options
  {
    default_format: :txt,
    formatters: {},
    parsers: {}
  }
end

#headersObject



14
15
16
17
18
19
# File 'lib/grape/middleware/formatter.rb', line 14

def headers
  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