Skip to content
This repository was archived by the owner on Oct 6, 2024. It is now read-only.

Commit c5fd2f2

Browse files
committed
v1.4.2: fix merge batch data for next offset pagination
1 parent 545d9e8 commit c5fd2f2

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

lib/dhs/concerns/record/request.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ def prepare_options_for_include_request!(options, sub_includes, references)
387387
end
388388

389389
def merge_batch_data_with_parent!(batch_data, parent_data, pagination = nil)
390+
return if batch_data.raw_items.blank?
390391
parent_data.concat(input: parent_data._raw, items: batch_data.raw_items, record: self)
391392
return if pagination.present? && pagination.is_a?(DHS::Pagination::Link)
392393
[limit_key(:body), total_key, pagination_key(:body)].each do |pagination_attribute|

lib/dhs/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module DHS
4-
VERSION = '1.4.1'
4+
VERSION = '1.4.2'
55
end

spec/pagination/next_offset_spec.rb

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
require 'rails_helper'
44

55
describe DHS::Record do
6-
context 'pagination' do
6+
context 'next offset pagination' do
77
def stub_api_request(next_offset:, items: [], offset: nil)
88
stub_request(:get, ['http://depay.fi/v2/transactions?limit=100', offset ? "offset=#{offset}" : nil].compact.join('&'))
99
.to_return(body: { items: items, next_offset: next_offset }.to_json)
@@ -28,4 +28,56 @@ class Transaction < DHS::Record
2828
expect(transactions.to_a).to eq (0...300).to_a
2929
end
3030
end
31+
32+
context 'next offset pagination with items configuration' do
33+
def stub_api_request(next_offset:, items: [], offset: nil)
34+
stub_request(:get, ['http://depay.fi/v2/transactions?limit=100', offset ? "offset=#{offset}" : nil].compact.join('&'))
35+
.to_return(body: { assets: items, next_offset: next_offset }.to_json)
36+
end
37+
38+
let!(:requests) do
39+
stub_api_request(items: (0...100).to_a, next_offset: 99)
40+
stub_api_request(items: (100...200).to_a, offset: 99, next_offset: 199)
41+
stub_api_request(items: (200...300).to_a, offset: 199, next_offset: 0)
42+
end
43+
44+
before do
45+
class Transaction < DHS::Record
46+
configuration items_key: :assets, pagination_strategy: :next_offset, pagination_key: { body: :next_offset, parameter: :offset }
47+
48+
endpoint 'http://depay.fi/v2/transactions'
49+
end
50+
end
51+
52+
it 'fetches and merges all the assets/items' do
53+
transactions = Transaction.all.fetch
54+
expect(transactions.to_a).to eq (0...300).to_a
55+
end
56+
end
57+
58+
context 'next offset pagination with items configuration and nil response' do
59+
def stub_api_request(next_offset:, items: [], offset: nil)
60+
stub_request(:get, ['http://depay.fi/v2/transactions?limit=100', offset ? "offset=#{offset}" : nil].compact.join('&'))
61+
.to_return(body: { assets: items, next_offset: next_offset }.to_json)
62+
end
63+
64+
let!(:requests) do
65+
stub_api_request(items: (0...100).to_a, next_offset: 99)
66+
stub_api_request(items: (100...200).to_a, offset: 99, next_offset: 199)
67+
stub_api_request(items: nil, offset: 199, next_offset: 0)
68+
end
69+
70+
before do
71+
class Transaction < DHS::Record
72+
configuration items_key: :assets, pagination_strategy: :next_offset, pagination_key: { body: :next_offset, parameter: :offset }
73+
74+
endpoint 'http://depay.fi/v2/transactions'
75+
end
76+
end
77+
78+
it 'fetches and merges all the assets/items' do
79+
transactions = Transaction.all.fetch
80+
expect(transactions.to_a).to eq (0...200).to_a
81+
end
82+
end
3183
end

0 commit comments

Comments
 (0)