Class: Talkbird::Result::PaginatedSuccess
- Inherits:
-
Object
- Object
- Talkbird::Result::PaginatedSuccess
- Defined in:
- lib/talkbird/result/paginated_success.rb
Overview
A variation of the result which should support composition.
Class Method Summary collapse
Instance Method Summary collapse
- #compose ⇒ Object
-
#initialize(result) ⇒ PaginatedSuccess
constructor
A new instance of PaginatedSuccess.
- #next_page(token) ⇒ Object
- #reduce ⇒ Object
Constructor Details
#initialize(result) ⇒ PaginatedSuccess
Returns a new instance of PaginatedSuccess.
22 23 24 |
# File 'lib/talkbird/result/paginated_success.rb', line 22 def initialize(result) @result = result end |
Class Method Details
.deep_merge(data, elem) ⇒ Object
10 11 12 13 14 15 16 17 18 |
# File 'lib/talkbird/result/paginated_success.rb', line 10 def deep_merge(data, elem) data.merge(elem) do |key, oldval, newval| if key == :next nil else oldval + newval end end end |
Instance Method Details
#compose ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/talkbird/result/paginated_success.rb', line 38 def compose body = MultiJson.load(@result.body.to_s, symbolize_keys: true) token = body[:next].to_s if !token.empty? [ Result::Success.new(@result, body), next_page(token) ].flatten else [Result::Success.new(@result, body)] end end |
#next_page(token) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/talkbird/result/paginated_success.rb', line 52 def next_page(token) Talkbird::Client.request( :get, @result.uri, params: { token: token, limit: 100 } ) end |
#reduce ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/talkbird/result/paginated_success.rb', line 26 def reduce body = compose.reduce({}) { |data, el| PaginatedSuccess.deep_merge(data, el.body) } response = HTTP::Response.new( status: @result.status, version: @result.version, body: MultiJson.dump(body), headers: @result.headers ) Result::Success.new(response, body) end |