atrium-ruby 1.3.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +5 -2
  3. data/README.md +132 -66
  4. data/Rakefile +7 -4
  5. data/atrium-ruby.gemspec +40 -32
  6. data/docs/Account.md +35 -0
  7. data/docs/AccountNumber.md +12 -0
  8. data/docs/AccountNumbersResponseBody.md +8 -0
  9. data/docs/AccountOwner.md +18 -0
  10. data/docs/AccountOwnersResponseBody.md +8 -0
  11. data/docs/AccountResponseBody.md +8 -0
  12. data/docs/AccountsApi.md +174 -0
  13. data/docs/AccountsResponseBody.md +9 -0
  14. data/docs/Challenge.md +13 -0
  15. data/docs/ChallengeOption.md +10 -0
  16. data/docs/ChallengesResponseBody.md +8 -0
  17. data/docs/ConnectWidget.md +9 -0
  18. data/docs/ConnectWidgetApi.md +44 -0
  19. data/docs/ConnectWidgetRequestBody.md +11 -0
  20. data/docs/ConnectWidgetResponseBody.md +8 -0
  21. data/docs/CredentialOption.md +9 -0
  22. data/docs/CredentialRequest.md +9 -0
  23. data/docs/CredentialResponse.md +12 -0
  24. data/docs/CredentialsResponseBody.md +8 -0
  25. data/docs/IdentityApi.md +82 -0
  26. data/docs/Institution.md +14 -0
  27. data/docs/InstitutionResponseBody.md +8 -0
  28. data/docs/InstitutionsApi.md +120 -0
  29. data/docs/InstitutionsResponseBody.md +9 -0
  30. data/docs/Member.md +18 -0
  31. data/docs/MemberConnectionStatus.md +16 -0
  32. data/docs/MemberConnectionStatusResponseBody.md +8 -0
  33. data/docs/MemberCreateRequest.md +11 -0
  34. data/docs/MemberCreateRequestBody.md +8 -0
  35. data/docs/MemberResponseBody.md +8 -0
  36. data/docs/MemberResumeRequest.md +8 -0
  37. data/docs/MemberResumeRequestBody.md +8 -0
  38. data/docs/MemberUpdateRequest.md +10 -0
  39. data/docs/MemberUpdateRequestBody.md +8 -0
  40. data/docs/MembersApi.md +487 -0
  41. data/docs/MembersResponseBody.md +9 -0
  42. data/docs/Pagination.md +11 -0
  43. data/docs/Transaction.md +38 -0
  44. data/docs/TransactionCleanseAndCategorizeRequest.md +11 -0
  45. data/docs/TransactionCleanseAndCategorizeResponse.md +20 -0
  46. data/docs/TransactionResponseBody.md +8 -0
  47. data/docs/TransactionsApi.md +126 -0
  48. data/docs/TransactionsCleanseAndCategorizeRequestBody.md +8 -0
  49. data/docs/TransactionsCleanseAndCategorizeResponseBody.md +8 -0
  50. data/docs/TransactionsResponseBody.md +9 -0
  51. data/docs/User.md +11 -0
  52. data/docs/UserCreateRequestBody.md +8 -0
  53. data/docs/UserResponseBody.md +8 -0
  54. data/docs/UserUpdateRequestBody.md +8 -0
  55. data/docs/UsersApi.md +193 -0
  56. data/docs/UsersResponseBody.md +9 -0
  57. data/docs/VerificationApi.md +120 -0
  58. data/git_push.sh +49 -0
  59. data/lib/atrium-ruby.rb +88 -0
  60. data/lib/atrium-ruby/api/accounts_api.rb +272 -0
  61. data/lib/atrium-ruby/api/atrium_client.rb +28 -0
  62. data/lib/atrium-ruby/api/connect_widget_api.rb +82 -0
  63. data/lib/atrium-ruby/api/identity_api.rb +140 -0
  64. data/lib/atrium-ruby/api/institutions_api.rb +181 -0
  65. data/lib/atrium-ruby/api/members_api.rb +749 -0
  66. data/lib/atrium-ruby/api/transactions_api.rb +198 -0
  67. data/lib/atrium-ruby/api/users_api.rb +287 -0
  68. data/lib/atrium-ruby/api/verification_api.rb +198 -0
  69. data/lib/atrium-ruby/api_client.rb +384 -0
  70. data/lib/atrium-ruby/api_error.rb +34 -0
  71. data/lib/atrium-ruby/configuration.rb +212 -0
  72. data/lib/atrium-ruby/models/account.rb +422 -0
  73. data/lib/atrium-ruby/models/account_number.rb +215 -0
  74. data/lib/atrium-ruby/models/account_numbers_response_body.rb +181 -0
  75. data/lib/atrium-ruby/models/account_owner.rb +269 -0
  76. data/lib/atrium-ruby/models/account_owners_response_body.rb +181 -0
  77. data/lib/atrium-ruby/models/account_response_body.rb +179 -0
  78. data/lib/atrium-ruby/models/accounts_response_body.rb +190 -0
  79. data/lib/atrium-ruby/models/challenge.rb +226 -0
  80. data/lib/atrium-ruby/models/challenge_option.rb +197 -0
  81. data/lib/atrium-ruby/models/challenges_response_body.rb +181 -0
  82. data/lib/atrium-ruby/models/connect_widget.rb +188 -0
  83. data/lib/atrium-ruby/models/connect_widget_request_body.rb +206 -0
  84. data/lib/atrium-ruby/models/connect_widget_response_body.rb +179 -0
  85. data/lib/atrium-ruby/models/credential_option.rb +188 -0
  86. data/lib/atrium-ruby/models/credential_request.rb +188 -0
  87. data/lib/atrium-ruby/models/credential_response.rb +217 -0
  88. data/lib/atrium-ruby/models/credentials_response_body.rb +181 -0
  89. data/lib/atrium-ruby/models/institution.rb +233 -0
  90. data/lib/atrium-ruby/models/institution_response_body.rb +179 -0
  91. data/lib/atrium-ruby/models/institutions_response_body.rb +190 -0
  92. data/lib/atrium-ruby/models/member.rb +269 -0
  93. data/lib/atrium-ruby/models/member_connection_status.rb +253 -0
  94. data/lib/atrium-ruby/models/member_connection_status_response_body.rb +179 -0
  95. data/lib/atrium-ruby/models/member_create_request.rb +218 -0
  96. data/lib/atrium-ruby/models/member_create_request_body.rb +179 -0
  97. data/lib/atrium-ruby/models/member_response_body.rb +179 -0
  98. data/lib/atrium-ruby/models/member_resume_request.rb +181 -0
  99. data/lib/atrium-ruby/models/member_resume_request_body.rb +179 -0
  100. data/lib/atrium-ruby/models/member_update_request.rb +199 -0
  101. data/lib/atrium-ruby/models/member_update_request_body.rb +179 -0
  102. data/lib/atrium-ruby/models/members_response_body.rb +190 -0
  103. data/lib/atrium-ruby/models/pagination.rb +206 -0
  104. data/lib/atrium-ruby/models/transaction.rb +449 -0
  105. data/lib/atrium-ruby/models/transaction_cleanse_and_categorize_request.rb +206 -0
  106. data/lib/atrium-ruby/models/transaction_cleanse_and_categorize_response.rb +287 -0
  107. data/lib/atrium-ruby/models/transaction_response_body.rb +179 -0
  108. data/lib/atrium-ruby/models/transactions_cleanse_and_categorize_request_body.rb +181 -0
  109. data/lib/atrium-ruby/models/transactions_cleanse_and_categorize_response_body.rb +181 -0
  110. data/lib/atrium-ruby/models/transactions_response_body.rb +190 -0
  111. data/lib/atrium-ruby/models/user.rb +206 -0
  112. data/lib/atrium-ruby/models/user_create_request_body.rb +179 -0
  113. data/lib/atrium-ruby/models/user_response_body.rb +179 -0
  114. data/lib/atrium-ruby/models/user_update_request_body.rb +179 -0
  115. data/lib/atrium-ruby/models/users_response_body.rb +190 -0
  116. data/lib/atrium-ruby/version.rb +11 -0
  117. data/spec/api/accounts_api_spec.rb +88 -0
  118. data/spec/api/connect_widget_api_spec.rb +43 -0
  119. data/spec/api/identity_api_spec.rb +56 -0
  120. data/spec/api/institutions_api_spec.rb +68 -0
  121. data/spec/api/members_api_spec.rb +195 -0
  122. data/spec/api/transactions_api_spec.rb +71 -0
  123. data/spec/api/users_api_spec.rb +92 -0
  124. data/spec/api/verification_api_spec.rb +69 -0
  125. data/spec/api_client_spec.rb +222 -0
  126. data/spec/configuration_spec.rb +38 -0
  127. data/spec/models/account_number_spec.rb +60 -0
  128. data/spec/models/account_numbers_response_body_spec.rb +36 -0
  129. data/spec/models/account_owner_spec.rb +96 -0
  130. data/spec/models/account_owners_response_body_spec.rb +36 -0
  131. data/spec/models/account_response_body_spec.rb +36 -0
  132. data/spec/models/account_spec.rb +198 -0
  133. data/spec/models/accounts_response_body_spec.rb +42 -0
  134. data/spec/models/challenge_option_spec.rb +48 -0
  135. data/spec/models/challenge_spec.rb +66 -0
  136. data/spec/models/challenges_response_body_spec.rb +36 -0
  137. data/spec/models/connect_widget_request_body_spec.rb +54 -0
  138. data/spec/models/connect_widget_response_body_spec.rb +36 -0
  139. data/spec/models/connect_widget_spec.rb +42 -0
  140. data/spec/models/credential_option_spec.rb +42 -0
  141. data/spec/models/credential_request_spec.rb +42 -0
  142. data/spec/models/credential_response_spec.rb +60 -0
  143. data/spec/models/credentials_response_body_spec.rb +36 -0
  144. data/spec/models/institution_response_body_spec.rb +36 -0
  145. data/spec/models/institution_spec.rb +72 -0
  146. data/spec/models/institutions_response_body_spec.rb +42 -0
  147. data/spec/models/member_connection_status_response_body_spec.rb +36 -0
  148. data/spec/models/member_connection_status_spec.rb +84 -0
  149. data/spec/models/member_create_request_body_spec.rb +36 -0
  150. data/spec/models/member_create_request_spec.rb +54 -0
  151. data/spec/models/member_response_body_spec.rb +36 -0
  152. data/spec/models/member_resume_request_body_spec.rb +36 -0
  153. data/spec/models/member_resume_request_spec.rb +36 -0
  154. data/spec/models/member_spec.rb +96 -0
  155. data/spec/models/member_update_request_body_spec.rb +36 -0
  156. data/spec/models/member_update_request_spec.rb +48 -0
  157. data/spec/models/members_response_body_spec.rb +42 -0
  158. data/spec/models/pagination_spec.rb +54 -0
  159. data/spec/models/transaction_cleanse_and_categorize_request_spec.rb +54 -0
  160. data/spec/models/transaction_cleanse_and_categorize_response_spec.rb +108 -0
  161. data/spec/models/transaction_response_body_spec.rb +36 -0
  162. data/spec/models/transaction_spec.rb +216 -0
  163. data/spec/models/transactions_cleanse_and_categorize_request_body_spec.rb +36 -0
  164. data/spec/models/transactions_cleanse_and_categorize_response_body_spec.rb +36 -0
  165. data/spec/models/transactions_response_body_spec.rb +42 -0
  166. data/spec/models/user_create_request_body_spec.rb +36 -0
  167. data/spec/models/user_response_body_spec.rb +36 -0
  168. data/spec/models/user_spec.rb +54 -0
  169. data/spec/models/user_update_request_body_spec.rb +36 -0
  170. data/spec/models/users_response_body_spec.rb +42 -0
  171. data/spec/spec_helper.rb +107 -0
  172. metadata +323 -91
  173. data/.gitignore +0 -10
  174. data/.rubocop.yml +0 -12
  175. data/.travis.yml +0 -12
  176. data/bin/console +0 -14
  177. data/bin/demo +0 -49
  178. data/bin/setup +0 -8
  179. data/examples/accounts_and_transactions.rb +0 -49
  180. data/examples/all_endpoints.rb +0 -226
  181. data/examples/example_workflow.rb +0 -176
  182. data/examples/multi_factor_authentication.rb +0 -57
  183. data/examples/update_credentials.rb +0 -58
  184. data/examples/user_and_member_creation.rb +0 -53
  185. data/lib/atrium.rb +0 -40
  186. data/lib/atrium/account.rb +0 -100
  187. data/lib/atrium/account_number.rb +0 -13
  188. data/lib/atrium/account_owner.rb +0 -19
  189. data/lib/atrium/challenge.rb +0 -13
  190. data/lib/atrium/client.rb +0 -51
  191. data/lib/atrium/connect.rb +0 -34
  192. data/lib/atrium/credential.rb +0 -11
  193. data/lib/atrium/error.rb +0 -4
  194. data/lib/atrium/institution.rb +0 -38
  195. data/lib/atrium/member.rb +0 -264
  196. data/lib/atrium/pageable.rb +0 -74
  197. data/lib/atrium/paginate.rb +0 -92
  198. data/lib/atrium/ruby.rb +0 -3
  199. data/lib/atrium/transaction.rb +0 -74
  200. data/lib/atrium/user.rb +0 -150
  201. data/lib/atrium/version.rb +0 -3
@@ -1,11 +0,0 @@
1
- module Atrium
2
- class Credential
3
- include ::ActiveAttr::Model
4
-
5
- attribute :field_name
6
- attribute :guid
7
- attribute :label
8
- attribute :type
9
- attribute :value
10
- end
11
- end
@@ -1,4 +0,0 @@
1
- module Atrium
2
- class Error < StandardError
3
- end
4
- end
@@ -1,38 +0,0 @@
1
- module Atrium
2
- class Institution
3
- extend ::Atrium::Paginate
4
- include ::ActiveAttr::Model
5
-
6
- attribute :code
7
- attribute :name
8
- attribute :url
9
- attribute :small_logo_url
10
- attribute :medium_logo_url
11
-
12
- # @todo Normalize params interface across gem, most of gem favors hash
13
- def self.credentials(institution_code)
14
- endpoint = "/institutions/#{institution_code}/credentials"
15
- response = ::Atrium.client.make_request(:get, endpoint)
16
-
17
- response["credentials"].map do |credential|
18
- ::Atrium::Credential.new(credential)
19
- end
20
- end
21
-
22
- def self.read(institution_code:)
23
- endpoint = "/institutions/#{institution_code}"
24
- response = ::Atrium.client.make_request(:get, endpoint)
25
-
26
- institution_params = response["institution"]
27
- ::Atrium::Institution.new(institution_params)
28
- end
29
-
30
- def self.list(query_params: nil, limit: nil)
31
- paginate_endpoint(:query_params => query_params, :limit => limit)
32
- end
33
-
34
- def self.list_in_batches(query_params: nil, limit: nil, &block)
35
- paginate_endpoint_in_batches(:query_params => query_params, :limit => limit, &block)
36
- end
37
- end
38
- end
@@ -1,264 +0,0 @@
1
- module Atrium
2
- class Member
3
- extend ::Atrium::Pageable
4
- include ::ActiveAttr::Model
5
-
6
- attribute :aggregated_at
7
- attribute :connection_status
8
- attribute :challenges
9
- attribute :guid
10
- attribute :has_processed_accounts
11
- attribute :has_processed_transactions
12
- attribute :identifier
13
- attribute :institution_code
14
- attribute :is_being_aggregated
15
- attribute :metadata
16
- attribute :name
17
- attribute :status
18
- attribute :successfully_aggregated_at
19
- attribute :user_guid
20
-
21
- ##
22
- # CLASS METHODS
23
- #
24
- def self.create(user_guid:, institution_code:, credentials:)
25
- endpoint = "/users/#{user_guid}/members"
26
- body = create_params(institution_code, credentials)
27
- member_response = ::Atrium.client.make_request(:post, endpoint, body)
28
-
29
- member_params = member_response["member"]
30
- ::Atrium::Member.new(member_params)
31
- end
32
-
33
- def self.list(options = {})
34
- options = _member_pagination_options(options)
35
- paginate(options)
36
- end
37
-
38
- def self.list_each(options = {})
39
- options = _member_pagination_options(options)
40
- paginate_each(options) { |member| yield member }
41
- end
42
-
43
- def self.list_in_batches(options = {})
44
- options = _member_pagination_options(options)
45
- paginate_in_batches(options) { |batch| yield batch }
46
- end
47
-
48
- def self.read(user_guid:, member_guid:)
49
- endpoint = "/users/#{user_guid}/members/#{member_guid}"
50
- member_response = ::Atrium.client.make_request(:get, endpoint)
51
-
52
- member_params = member_response["member"]
53
- ::Atrium::Member.new(member_params)
54
- end
55
-
56
- ##
57
- # INSTANCE METHODS
58
- #
59
- def accounts(options = {})
60
- options = _account_pagination_options(options)
61
- self.class.paginate(options)
62
- end
63
-
64
- def each_account(options = {})
65
- options = _account_pagination_options(options)
66
- self.class.paginate_each(options) { |account| yield account }
67
- end
68
-
69
- def accounts_in_batches(options = {})
70
- options = _account_pagination_options(options)
71
- self.class.paginate_in_batches(options) { |batch| yield batch }
72
- end
73
-
74
- def aggregate
75
- endpoint = "/users/#{user_guid}/members/#{guid}/aggregate"
76
- member_response = ::Atrium.client.make_request(:post, endpoint)
77
-
78
- member_params = member_response["member"]
79
- assign_attributes(member_params)
80
- self
81
- end
82
-
83
- def aggregation_status
84
- endpoint = "/users/#{user_guid}/members/#{guid}/status"
85
- member_response = ::Atrium.client.make_request(:get, endpoint)
86
-
87
- member_params = member_response["member"]
88
- assign_attributes(member_params)
89
- self
90
- end
91
-
92
- def mfa_challenges
93
- endpoint = "/users/#{user_guid}/members/#{guid}/challenges"
94
- challenge_response = ::Atrium.client.make_request(:get, endpoint)
95
-
96
- return nil if challenge_response.nil?
97
-
98
- challenge_params = challenge_response["challenges"]
99
-
100
- challenge_params.map do |challenge|
101
- ::Atrium::Challenge.new(challenge)
102
- end
103
- end
104
-
105
- def delete
106
- endpoint = "/users/#{user_guid}/members/#{guid}"
107
- ::Atrium.client.make_request(:delete, endpoint)
108
-
109
- self
110
- end
111
-
112
- def read_account(account_guid:)
113
- endpoint = "/users/#{user_guid}/members/#{guid}/accounts/#{account_guid}"
114
- account_response = ::Atrium.client.make_request(:get, endpoint)
115
-
116
- account_params = account_response["account"]
117
- ::Atrium::Account.new(account_params)
118
- end
119
-
120
- def resume(challenge_credentials)
121
- endpoint = "/users/#{user_guid}/members/#{guid}/resume"
122
- body = resume_params(challenge_credentials)
123
- member_response = ::Atrium.client.make_request(:put, endpoint, body)
124
-
125
- member_params = member_response["member"]
126
- assign_attributes(member_params)
127
- self
128
- end
129
-
130
- def update(params)
131
- endpoint = "/users/#{user_guid}/members/#{guid}"
132
- body = member_body(params)
133
- member_response = ::Atrium.client.make_request(:put, endpoint, body)
134
-
135
- member_params = member_response["member"]
136
- assign_attributes(member_params)
137
- self
138
- end
139
-
140
- def credentials
141
- endpoint = "/users/#{user_guid}/members/#{guid}/credentials"
142
- credential_response = ::Atrium.client.make_request(:get, endpoint)
143
-
144
- return nil if credential_response.nil?
145
-
146
- credential_params = credential_response["credentials"]
147
-
148
- credential_params.map do |credential|
149
- ::Atrium::Credential.new(credential)
150
- end
151
- end
152
-
153
- def transactions(options = {})
154
- options = _transaction_pagination_options(options)
155
- self.class.paginate(options)
156
- end
157
-
158
- def each_transaction(options = {})
159
- options = _transaction_pagination_options(options)
160
- self.class.paginate_each(options) { |transaction| yield transaction }
161
- end
162
-
163
- def transactions_in_batches(options = {})
164
- options = _transaction_pagination_options(options)
165
- self.class.paginate_in_batches(options) { |batch| yield batch }
166
- end
167
-
168
- def self._member_pagination_options(options)
169
- user_guid = options.fetch(:user_guid)
170
- endpoint = "/users/#{user_guid}/members"
171
- options.merge(:endpoint => endpoint, :resource => "members")
172
- end
173
-
174
- def verify
175
- endpoint = "/users/#{user_guid}/members/#{guid}/verify"
176
- member_response = ::Atrium.client.make_request(:post, endpoint)
177
-
178
- member_params = member_response["member"]
179
- assign_attributes(member_params)
180
- self
181
- end
182
-
183
- def account_numbers
184
- endpoint = "/users/#{user_guid}/members/#{guid}/account_numbers"
185
- account_numbers_response = ::Atrium.client.make_request(:get, endpoint)
186
-
187
- return nil if account_numbers_response.nil?
188
-
189
- account_numbers_params = account_numbers_response["account_numbers"]
190
-
191
- account_numbers_params.map do |account_number|
192
- ::Atrium::AccountNumber.new(account_number)
193
- end
194
- end
195
-
196
- def identify
197
- endpoint = "/users/#{user_guid}/members/#{guid}/identify"
198
- member_response = ::Atrium.client.make_request(:post, endpoint)
199
-
200
- member_params = member_response["member"]
201
- assign_attributes(member_params)
202
- self
203
- end
204
-
205
- def account_owners
206
- endpoint = "/users/#{user_guid}/members/#{guid}/account_owners"
207
- account_owners_response = ::Atrium.client.make_request(:get, endpoint)
208
-
209
- return nil if account_owners_response.nil?
210
-
211
- account_owners_params = account_owners_response["account_owners"]
212
-
213
- account_owners_params.map do |account_owner|
214
- ::Atrium::AccountOwner.new(account_owner)
215
- end
216
- end
217
-
218
- ##
219
- # PRIVATE CLASS METHODS
220
- #
221
- def self.create_params(institution_code, credentials_array)
222
- {
223
- :member => {
224
- :institution_code => institution_code,
225
- :credentials => credentials_array
226
- }
227
- }
228
- end
229
- private_class_method :create_params
230
-
231
- private
232
-
233
- ##
234
- # PRIVATE INSTANCE METHODS
235
- #
236
- def _account_pagination_options(options)
237
- endpoint = "/users/#{user_guid}/members/#{guid}/accounts"
238
- options.merge(:endpoint => endpoint, :resource => "accounts", :klass => ::Atrium::Account)
239
- end
240
-
241
- def member_body(params)
242
- {
243
- :member => {
244
- :credentials => params[:credentials],
245
- :identifier => params[:identifier],
246
- :metadata => params[:metadata]
247
- }
248
- }
249
- end
250
-
251
- def resume_params(challenge_credentials)
252
- {
253
- :member => {
254
- :challenges => challenge_credentials
255
- }
256
- }
257
- end
258
-
259
- def _transaction_pagination_options(options)
260
- endpoint = "/users/#{user_guid}/members/#{guid}/transactions"
261
- options.merge(:endpoint => endpoint, :resource => "transactions", :klass => ::Atrium::Transaction)
262
- end
263
- end
264
- end
@@ -1,74 +0,0 @@
1
- module Atrium
2
- class PaginationBatch < ::Array
3
- attr_accessor :total_pages, :total_entries, :current_page, :records_per_page
4
- end
5
-
6
- module Pageable
7
- DEFAULT_RECORDS_PER_PAGE = 25
8
-
9
- def make_get_request(endpoint, query_params)
10
- uri = endpoint + "?" + ::URI.encode_www_form(query_params.sort)
11
- ::Atrium.client.make_request(:get, uri)
12
- end
13
-
14
- def paginate(options = {})
15
- records_per_page = options.fetch(:records_per_page, DEFAULT_RECORDS_PER_PAGE)
16
- results = PaginationBatch.new
17
- paginate_in_batches(options.merge(:limit => records_per_page)) do |batch|
18
- results = batch
19
- end
20
- results
21
- end
22
-
23
- def paginate_each(options = {})
24
- paginate_in_batches(options) do |batch|
25
- batch.each do |record|
26
- yield record
27
- end
28
- end
29
- end
30
-
31
- def paginate_in_batches(options = {})
32
- fail ::ArgumentError, "A block is required" unless block_given?
33
-
34
- endpoint = options.fetch(:endpoint)
35
- resource = options.fetch(:resource)
36
- klass = options.fetch(:klass, self)
37
-
38
- query_params = options.fetch(:query_params, {})
39
- limit = options.fetch(:limit, nil)
40
- current_page = options.fetch(:initial_page, 1)
41
- records_per_page = options.fetch(:records_per_page, DEFAULT_RECORDS_PER_PAGE)
42
-
43
- pagination_info_query_params = query_params.merge(:records_per_page => records_per_page)
44
- pagination = pagination_info(endpoint, pagination_info_query_params)
45
- total_pages = pagination["total_pages"]
46
- total_entries = pagination["total_entries"]
47
- # "total_pages > 1" check exists since some query_params only return 1 page
48
- total_pages = limit / records_per_page if limit.present? && total_pages > 1
49
-
50
- until current_page > total_pages
51
- params = query_params.merge(:page => current_page, :records_per_page => records_per_page)
52
- response = make_get_request(endpoint, params)
53
-
54
- records = response[resource].map { |attributes| klass.new(attributes) }
55
-
56
- batch = ::Atrium::PaginationBatch.new(records)
57
- batch.total_pages = total_pages
58
- batch.total_entries = total_entries
59
- batch.current_page = current_page
60
- batch.records_per_page = records_per_page
61
- yield batch
62
-
63
- current_page += 1
64
- end
65
-
66
- nil
67
- end
68
-
69
- def pagination_info(endpoint, query_params)
70
- response = make_get_request(endpoint, query_params.merge(:page => 1))
71
- response["pagination"]
72
- end
73
- end
74
- end
@@ -1,92 +0,0 @@
1
- require "uri"
2
-
3
- module Atrium
4
- module Paginate
5
- DEFAULT_RECORDS_PER_PAGE = 25
6
- INITIAL_PAGE = 1
7
-
8
- attr_accessor :current_page, :endpoint, :total_pages
9
-
10
- def endpoint_name(query_params: nil)
11
- @endpoint = if query_params.present?
12
- "/" + klass_name + "?" + URI.encode_www_form(query_params) + "&"
13
- else
14
- "/" + klass_name + "?"
15
- end
16
- end
17
-
18
- # rubocop:disable Style/AccessorMethodName
19
- def get_total_pages
20
- @current_page = INITIAL_PAGE
21
-
22
- paginated_endpoint = endpoint + "page=#{current_page}&records_per_page=#{records_per_page}"
23
- response = ::Atrium.client.make_request(:get, paginated_endpoint)
24
-
25
- pagination = response["pagination"]
26
- @total_pages = pagination["total_pages"]
27
- end
28
- # rubocop:enable Style/AccessorMethodName
29
-
30
- def klass_name
31
- @klass_name ||= name.gsub("Atrium::", "").downcase.pluralize
32
- end
33
-
34
- def paginate_endpoint(query_params: nil, limit: nil)
35
- endpoint_name(:query_params => query_params)
36
- get_total_pages
37
- response_list(:limit => limit)
38
- end
39
-
40
- def paginate_endpoint_in_batches(query_params: nil, limit: nil, &block)
41
- return "method requires block to be passed" unless block_given?
42
-
43
- endpoint_name(:query_params => query_params)
44
- get_total_pages
45
- response_list_in_batches(:limit => limit, &block)
46
- end
47
-
48
- def records_per_page
49
- @records_per_page ||= DEFAULT_RECORDS_PER_PAGE
50
- end
51
-
52
- def response_list(limit: nil)
53
- # "total_pages > 1" check exists since some query_params only return 1 page
54
- @total_pages = limit / records_per_page if limit.present? && total_pages > 1
55
- list = []
56
-
57
- until current_page > total_pages
58
- paginated_endpoint = endpoint + "page=#{current_page}&records_per_page=#{records_per_page}"
59
- response = ::Atrium.client.make_request(:get, paginated_endpoint)
60
-
61
- # Add new objects to the list
62
- response[klass_name.to_s].each do |params|
63
- list << new(params)
64
- end
65
- @current_page += 1
66
- end
67
-
68
- if limit.present?
69
- list.first(limit)
70
- else
71
- list
72
- end
73
- end
74
-
75
- def response_list_in_batches(limit: nil)
76
- # "total_pages > 1" check exists since some query_params only return 1 page
77
- @total_pages = limit / records_per_page if limit.present? && total_pages > 1
78
-
79
- until current_page > total_pages
80
- paginated_endpoint = endpoint + "page=#{current_page}&records_per_page=#{records_per_page}"
81
- response = ::Atrium.client.make_request(:get, paginated_endpoint)
82
- list = []
83
-
84
- response[klass_name.to_s].each do |params|
85
- list << new(params)
86
- end
87
- @current_page += 1
88
- yield list
89
- end
90
- end
91
- end
92
- end