Class: Vindi::Middleware::ResponseParser

Inherits:
Faraday::Response::Middleware
  • Object
show all
Defined in:
lib/vindi/middleware/response_parser.rb

Overview

Vindi Response Parser

Set metada info to metadata object.

Instance Method Summary collapse

Instance Method Details

#extract_response_headers_info(response_headers) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/vindi/middleware/response_parser.rb', line 37

def extract_response_headers_info(response_headers)
  {
    items: response_headers[:total],
    link: response_headers[:link],
    rate_limit: {
      limit: response_headers[:"rate-limit-limit"],
      reset: Time.at(response_headers[:"rate-limit-reset"].to_i),
      remaining: response_headers[:"rate-limit-remaining"]
    }
  }
end

#on_complete(env) ⇒ Object



9
10
11
12
13
# File 'lib/vindi/middleware/response_parser.rb', line 9

def on_complete(env)
  env[:body] = parse(env[:status] == 204 ? "{}" : env)

  Vindi::RateLimit.update env[:body].dig :metadata, :rate_limit
end

#parse(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/vindi/middleware/response_parser.rb', line 15

def parse(env)
  json = Her::Middleware::ParseJSON.new.parse_json env[:body]
  errors = translate_errors_to_activemodel_style(json.delete(:errors) || [])
   = (json.delete(:metadata) || {}).merge(extract_response_headers_info(env[:response_headers]))

  {
    data: json,
    errors: errors,
    metadata: 
  }
end

#translate_errors_to_activemodel_style(errors) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/vindi/middleware/response_parser.rb', line 27

def translate_errors_to_activemodel_style(errors)
  errors.map do |e|
    {
      attribute: e[:parameter],
      type: e[:id] == "invalid_parameter" ? :invalid : e[:id],
      message: e[:message]
    }
  end
end