Class: WCC::API::RestClient::AbstractResponse
- Inherits:
-
Object
- Object
- WCC::API::RestClient::AbstractResponse
- Extended by:
- Forwardable
- Defined in:
- lib/wcc/api/rest_client/response.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#raw_body ⇒ Object
readonly
Returns the value of attribute raw_body.
-
#raw_response ⇒ Object
readonly
Returns the value of attribute raw_response.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
Instance Method Summary collapse
- #assert_ok! ⇒ Object
- #body ⇒ Object (also: #to_json)
- #collection_response? ⇒ Boolean
- #count ⇒ Object
-
#each_page(&block) ⇒ Object
This method has a bit of complexity that is better kept in one location.
- #error_message ⇒ Object
- #first ⇒ Object
-
#initialize(client, request, raw_response) ⇒ AbstractResponse
constructor
A new instance of AbstractResponse.
- #items ⇒ Object
- #next_page ⇒ Object
- #next_page? ⇒ Boolean
- #next_page_query ⇒ Object
- #page_items ⇒ Object
- #skip ⇒ Object
Constructor Details
#initialize(client, request, raw_response) ⇒ AbstractResponse
Returns a new instance of AbstractResponse.
24 25 26 27 28 29 |
# File 'lib/wcc/api/rest_client/response.rb', line 24 def initialize(client, request, raw_response) @client = client @request = request @raw_response = raw_response @raw_body = raw_response.body.to_s end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
13 14 15 |
# File 'lib/wcc/api/rest_client/response.rb', line 13 def client @client end |
#raw_body ⇒ Object (readonly)
Returns the value of attribute raw_body.
12 13 14 |
# File 'lib/wcc/api/rest_client/response.rb', line 12 def raw_body @raw_body end |
#raw_response ⇒ Object (readonly)
Returns the value of attribute raw_response.
11 12 13 |
# File 'lib/wcc/api/rest_client/response.rb', line 11 def raw_response @raw_response end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
14 15 16 |
# File 'lib/wcc/api/rest_client/response.rb', line 14 def request @request end |
Instance Method Details
#assert_ok! ⇒ Object
74 75 76 77 78 |
# File 'lib/wcc/api/rest_client/response.rb', line 74 def assert_ok! return self if code >= 200 && code < 300 raise ApiError[code], self end |
#body ⇒ Object Also known as: to_json
19 20 21 |
# File 'lib/wcc/api/rest_client/response.rb', line 19 def body @body ||= ::JSON.parse(raw_body) end |
#collection_response? ⇒ Boolean
39 40 41 |
# File 'lib/wcc/api/rest_client/response.rb', line 39 def collection_response? page_items.nil? ? false : true end |
#count ⇒ Object
35 36 37 |
# File 'lib/wcc/api/rest_client/response.rb', line 35 def count throw new NotImplementedError, 'Please implement "count" parsing in response class' end |
#each_page(&block) ⇒ Object
This method has a bit of complexity that is better kept in one location
81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/wcc/api/rest_client/response.rb', line 81 def each_page(&block) raise ArgumentError, 'Not a collection response' unless collection_response? ret = PaginatingEnumerable.new(self) if block_given? ret.map(&block) else ret.lazy end end |
#error_message ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/wcc/api/rest_client/response.rb', line 47 def = begin body.dig('error', 'message') || body.dig('message') rescue ::JSON::ParserError nil end || "#{code}: #{raw_response.body}" end |
#first ⇒ Object
99 100 101 102 103 |
# File 'lib/wcc/api/rest_client/response.rb', line 99 def first raise ArgumentError, 'Not a collection response' unless collection_response? page_items.first end |
#items ⇒ Object
93 94 95 96 97 |
# File 'lib/wcc/api/rest_client/response.rb', line 93 def items return unless collection_response? each_page.flat_map(&:page_items) end |
#next_page ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/wcc/api/rest_client/response.rb', line 64 def next_page return unless next_page? next_page ||= @client.get( @request[:url], (@request[:query] || {}).merge(next_page_query) ) next_page.assert_ok! end |
#next_page? ⇒ Boolean
57 58 59 60 61 62 |
# File 'lib/wcc/api/rest_client/response.rb', line 57 def next_page? return false unless collection_response? return false if count.nil? page_items.length + skip < count end |
#next_page_query ⇒ Object
105 106 107 108 109 110 111 |
# File 'lib/wcc/api/rest_client/response.rb', line 105 def next_page_query return unless collection_response? { skip: page_items.length + skip } end |
#page_items ⇒ Object
43 44 45 |
# File 'lib/wcc/api/rest_client/response.rb', line 43 def page_items throw new NotImplementedError, 'Please implement "page_items" parsing in response class' end |
#skip ⇒ Object
31 32 33 |
# File 'lib/wcc/api/rest_client/response.rb', line 31 def skip throw new NotImplementedError, 'Please implement "skip" parsing in response class' end |