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.
23 24 25 26 27 28 |
# File 'lib/wcc/api/rest_client/response.rb', line 23 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
72 73 74 75 76 |
# File 'lib/wcc/api/rest_client/response.rb', line 72 def assert_ok! return self if code >= 200 && code < 300 raise ApiError[code], self end |
#body ⇒ Object Also known as: to_json
18 19 20 |
# File 'lib/wcc/api/rest_client/response.rb', line 18 def body @body ||= ::JSON.parse(raw_body) end |
#collection_response? ⇒ Boolean
38 39 40 |
# File 'lib/wcc/api/rest_client/response.rb', line 38 def collection_response? page_items.nil? ? false : true end |
#count ⇒ Object
34 35 36 |
# File 'lib/wcc/api/rest_client/response.rb', line 34 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
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/wcc/api/rest_client/response.rb', line 79 def each_page(&block) raise ArgumentError, 'Not a collection response' unless collection_response? ret = Enumerator.new do |y| y << self if next_page? next_page.each_page.each do |page| y << page end end end if block_given? ret.map(&block) else ret.lazy end end |
#error_message ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/wcc/api/rest_client/response.rb', line 46 def = begin body.dig('error', 'message') || body.dig('message') rescue ::JSON::ParserError nil end || "#{code}: #{raw_response.body}" end |
#first ⇒ Object
106 107 108 109 110 |
# File 'lib/wcc/api/rest_client/response.rb', line 106 def first raise ArgumentError, 'Not a collection response' unless collection_response? page_items.first end |
#items ⇒ Object
100 101 102 103 104 |
# File 'lib/wcc/api/rest_client/response.rb', line 100 def items return unless collection_response? each_page.flat_map(&:page_items) end |
#next_page ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/wcc/api/rest_client/response.rb', line 62 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
56 57 58 59 60 |
# File 'lib/wcc/api/rest_client/response.rb', line 56 def next_page? return false unless collection_response? page_items.length + skip < count end |
#next_page_query ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/wcc/api/rest_client/response.rb', line 112 def next_page_query return unless collection_response? { skip: page_items.length + skip } end |
#page_items ⇒ Object
42 43 44 |
# File 'lib/wcc/api/rest_client/response.rb', line 42 def page_items throw new NotImplementedError, 'Please implement "page_items" parsing in response class' end |
#skip ⇒ Object
30 31 32 |
# File 'lib/wcc/api/rest_client/response.rb', line 30 def skip throw new NotImplementedError, 'Please implement "skip" parsing in response class' end |