Class: Committee::Middleware::ResponseValidation

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#call

Constructor Details

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

Returns a new instance of ResponseValidation.



5
6
7
8
# File 'lib/committee/middleware/response_validation.rb', line 5

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

Instance Attribute Details

#validate_errorsObject (readonly)

Returns the value of attribute validate_errors.



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

def validate_errors
  @validate_errors
end

Instance Method Details

#handle(request) ⇒ Object



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

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

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

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

#validate?(status) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/committee/middleware/response_validation.rb', line 32

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