Class: Committee::Middleware::ResponseValidation

Inherits:
Base
  • Object
show all
Defined in:
lib/committee/middleware/response_validation.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ ResponseValidation

Returns a new instance of ResponseValidation.



3
4
5
6
# File 'lib/committee/middleware/response_validation.rb', line 3

def initialize(app, options={})
  super
  @prefix = options[:prefix]
end

Instance Method Details

#call(env) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/committee/middleware/response_validation.rb', line 8

def call(env)
  status, headers, response = @app.call(env)
  request = Rack::Request.new(env)
  if link = @router.routes_request?(request, prefix: @prefix)
    str = response.reduce("") { |str, s| str << s }
    data = MultiJson.decode(str)
    Committee::ResponseValidator.new(link).call(headers, data)
  end
  [status, headers, response]
rescue Committee::InvalidResponse
  render_error(500, :invalid_response, $!.message)
rescue MultiJson::LoadError
  render_error(500, :invalid_response, "Response wasn't valid JSON.")
end