dhs 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7d6af021c9cf582a27709769c0355f5b9c978df218606456887641f7fcf83fc
4
- data.tar.gz: 8cc46642942b9804799c74c2568b0dc8d9b131a87f8b2f9fe5615f2b510759e1
3
+ metadata.gz: 1880fd170b224c3968acc2c3d77f2aa2b31bf6205f0427a30d8041081feafda9
4
+ data.tar.gz: 85e87c2fd8b9f0931286d7b4343839c9951f6a22f201d2dcd1135fad0dccf4f7
5
5
  SHA512:
6
- metadata.gz: d8a4620d4f6861dde1bc5cf577fe73f37fca800c4c5758cc0664ef5bd0f2d52b870839275446d5a29cd8b00f5d0fbf518310fdf55f1e40e2bb9c3f169550f766
7
- data.tar.gz: 9c6a6ff69bc89e7ee2b84518c7c60ff673bdace69def5ee778ea54f4dd513705eb06d599a218353be7182f9487ac000ed0acad711cc56c8eb34e948817451638
6
+ metadata.gz: 15623d271f53db3a97af63412ee8a325ffa3ed8039bfbe3716a5fb337341f978cfde0893f811111eaee487d4f01d8c6e32cd70d5f6de5389d0a6d7a66a65d4bc
7
+ data.tar.gz: 507dd7ccbcd98f21060dfb1c90fa1e849aa63319e842bc1f70d8aa06398aeb4edbc9f7763890090b9252df93606851f598e901451e750ad4fd4ae0c772a04ead
data/README.md CHANGED
@@ -1131,6 +1131,40 @@ In parallel:
1131
1131
  GET https://service.example.com/records?limit=100&page=3
1132
1132
  ```
1133
1133
 
1134
+ ##### Pagination strategy: offset_page
1135
+
1136
+ The `offest_page` strategy is based on the `page` strategy with the only difference
1137
+ that the pages are counted from 0 onwards (not from 1).
1138
+
1139
+ ```ruby
1140
+ # app/models/transaction.rb
1141
+
1142
+ class Transaction < DHS::Record
1143
+ configuration pagination_strategy: 'offset_page', pagination_key: 'page'
1144
+
1145
+ endpoint '{+service}/transactions'
1146
+ end
1147
+ ```
1148
+
1149
+ ```ruby
1150
+ # app/controllers/some_controller.rb
1151
+
1152
+ Record.all
1153
+
1154
+ ```
1155
+ ```
1156
+ GET https://service.example.com/records?limit=100
1157
+ {
1158
+ items: [{...}, ...],
1159
+ total: 300,
1160
+ limit: 100,
1161
+ page: 0
1162
+ }
1163
+ In parallel:
1164
+ GET https://service.example.com/records?limit=100&page=1
1165
+ GET https://service.example.com/records?limit=100&page=2
1166
+ ```
1167
+
1134
1168
  ##### Pagination strategy: total_pages
1135
1169
 
1136
1170
  The `total_pages` strategy is based on the `page` strategy with the only difference
@@ -1165,7 +1199,6 @@ In parallel:
1165
1199
  GET https://service.example.com/records?limit=100&page=3
1166
1200
  ```
1167
1201
 
1168
-
1169
1202
  ##### Pagination strategy: start
1170
1203
 
1171
1204
  In comparison to the `offset` strategy, the `start` strategy indicates with which item the current page starts.
data/lib/dhs.rb CHANGED
@@ -38,6 +38,7 @@ module DHS
38
38
  autoload :Offset, 'dhs/pagination/offset'
39
39
  autoload :Page, 'dhs/pagination/page'
40
40
  autoload :TotalPages, 'dhs/pagination/total_pages'
41
+ autoload :OffsetPage, 'dhs/pagination/offset_page'
41
42
  autoload :Start, 'dhs/pagination/start'
42
43
  autoload :Link, 'dhs/pagination/link'
43
44
  end
@@ -24,6 +24,8 @@ class DHS::Record
24
24
  DHS::Pagination::Page
25
25
  when :total_pages
26
26
  DHS::Pagination::TotalPages
27
+ when :offset_page
28
+ DHS::Pagination::OffsetPage
27
29
  when :start
28
30
  DHS::Pagination::Start
29
31
  when :link
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DHS::Pagination::OffsetPage < DHS::Pagination::Page
4
+
5
+ DEFAULT_OFFSET = 0
6
+
7
+ end
data/lib/dhs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DHS
4
- VERSION = '1.0.3'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe DHS::Record do
6
+ context 'pagination' do
7
+ def stub_api_request(items: [], page: nil)
8
+ stub_request(:get, ['http://depay.fi/v2/transactions?limit=100', page].compact.join('&page='))
9
+ .to_return(body: { items: items }.to_json)
10
+ end
11
+
12
+ let!(:requests) do
13
+ stub_api_request(items: (0...100).to_a)
14
+ stub_api_request(items: (100...200).to_a, page: 1)
15
+ stub_api_request(items: (200...300).to_a, page: 2)
16
+ stub_api_request(items: [], page: 3)
17
+ end
18
+
19
+ before do
20
+ class Transaction < DHS::Record
21
+ configuration pagination_strategy: :offset_page, pagination_key: :page
22
+
23
+ endpoint 'http://depay.fi/v2/transactions'
24
+ end
25
+ end
26
+
27
+ it 'fetches all the pages' do
28
+ transactions = Transaction.all.fetch
29
+ expect(transactions.to_a).to eq (0...300).to_a
30
+ end
31
+
32
+ context 'incomplete pages' do
33
+ let!(:requests) do
34
+ stub_api_request(items: (0...100).to_a)
35
+ stub_api_request(items: (100...200).to_a, page: 1)
36
+ stub_api_request(items: (200...300).to_a, page: 2)
37
+ stub_api_request(items: [300], page: 3)
38
+ stub_api_request(items: [], page: 4)
39
+ end
40
+
41
+ it 'fetches all the pages' do
42
+ transactions = Transaction.all.fetch
43
+ expect(transactions.to_a).to eq (0..300).to_a
44
+ end
45
+ end
46
+
47
+ context 'incomplete pages' do
48
+ let!(:requests) do
49
+ stub_api_request(items: (0...100).to_a)
50
+ stub_api_request(items: (100...200).to_a, page: 1)
51
+ stub_api_request(items: (200...299).to_a, page: 2)
52
+ stub_api_request(items: [], page: 3)
53
+ end
54
+
55
+ it 'fetches all the pages' do
56
+ transactions = Transaction.all.fetch
57
+ expect(transactions.to_a).to eq (0...299).to_a
58
+ end
59
+ end
60
+ end
61
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/DePayFi/dhs/graphs/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2021-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -322,6 +322,7 @@ files:
322
322
  - lib/dhs/pagination/base.rb
323
323
  - lib/dhs/pagination/link.rb
324
324
  - lib/dhs/pagination/offset.rb
325
+ - lib/dhs/pagination/offset_page.rb
325
326
  - lib/dhs/pagination/page.rb
326
327
  - lib/dhs/pagination/start.rb
327
328
  - lib/dhs/pagination/total_pages.rb
@@ -459,6 +460,7 @@ files:
459
460
  - spec/pagination/link/parallel_spec.rb
460
461
  - spec/pagination/link/total_spec.rb
461
462
  - spec/pagination/offset/pages_left_spec.rb
463
+ - spec/pagination/offset_page_spec.rb
462
464
  - spec/pagination/parameters_spec.rb
463
465
  - spec/pagination/total_pages_spec.rb
464
466
  - spec/proxy/create_sub_resource_spec.rb
@@ -693,6 +695,7 @@ test_files:
693
695
  - spec/pagination/link/parallel_spec.rb
694
696
  - spec/pagination/link/total_spec.rb
695
697
  - spec/pagination/offset/pages_left_spec.rb
698
+ - spec/pagination/offset_page_spec.rb
696
699
  - spec/pagination/parameters_spec.rb
697
700
  - spec/pagination/total_pages_spec.rb
698
701
  - spec/proxy/create_sub_resource_spec.rb