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
7
# File 'lib/committee/middleware/response_validation.rb', line 3

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

Instance Method Details

#handle(request) ⇒ Object



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

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
  render_error(500, :invalid_response, $!.message)
rescue MultiJson::LoadError
  raise Committee::InvalidResponse if @raise
  render_error(500, :invalid_response, "Response wasn't valid JSON.")
end

#validate?(status) ⇒ Boolean

Returns:

  • (Boolean)


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

def validate?(status)
  @validate_errors || (200...300).include?(status)
end