Class: Committee::Middleware::ResponseValidation

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

Instance Method Summary collapse

Methods inherited from Base

#call

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
  @validate_errors = options[:validate_errors]
end

Instance Method Details

#handle(request) ⇒ Object



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

def handle(request)
  status, headers, response = @app.call(request.env)

  if validate?(status) && link = @router.find_request_link(request)
    full_body = ""
    response.each do |chunk|
      full_body << chunk
    end
    data = MultiJson.decode(full_body)
    Committee::ResponseValidator.new(link).call(status, headers, data)
  end

  [status, headers, response]
rescue Committee::InvalidResponse
  raise if @raise
  @error_class.new(500, :invalid_response, $!.message).render
rescue MultiJson::LoadError
  raise Committee::InvalidResponse if @raise
  @error_class.new(500, :invalid_response, "Response wasn't valid JSON.").render
end

#validate?(status) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/committee/middleware/response_validation.rb', line 29

def validate?(status)
  Committee::ResponseValidator.validate?(status)
end