mangopay-v4 4.0.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.
Files changed (214) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +30 -0
  3. data/.rspec +4 -0
  4. data/.rubocop.yml +2 -0
  5. data/.travis.yml +13 -0
  6. data/Gemfile +2 -0
  7. data/LICENSE +20 -0
  8. data/README.md +380 -0
  9. data/bin/mangopay +9 -0
  10. data/lib/mangopay.rb +133 -0
  11. data/lib/mangopay/api/api.rb +9 -0
  12. data/lib/mangopay/api/api_methods.rb +137 -0
  13. data/lib/mangopay/api/auth_token_manager.rb +173 -0
  14. data/lib/mangopay/api/http_client.rb +325 -0
  15. data/lib/mangopay/api/service/bank_accounts.rb +146 -0
  16. data/lib/mangopay/api/service/cards.rb +152 -0
  17. data/lib/mangopay/api/service/client_wallets.rb +89 -0
  18. data/lib/mangopay/api/service/clients.rb +68 -0
  19. data/lib/mangopay/api/service/dispute_documents.rb +158 -0
  20. data/lib/mangopay/api/service/disputes.rb +187 -0
  21. data/lib/mangopay/api/service/e_money.rb +42 -0
  22. data/lib/mangopay/api/service/events.rb +47 -0
  23. data/lib/mangopay/api/service/hooks.rb +93 -0
  24. data/lib/mangopay/api/service/kyc_documents.rb +153 -0
  25. data/lib/mangopay/api/service/mandates.rb +142 -0
  26. data/lib/mangopay/api/service/oauth_tokens.rb +25 -0
  27. data/lib/mangopay/api/service/pay_ins.rb +260 -0
  28. data/lib/mangopay/api/service/pay_outs.rb +54 -0
  29. data/lib/mangopay/api/service/pre_authorizations.rb +69 -0
  30. data/lib/mangopay/api/service/refunds.rb +62 -0
  31. data/lib/mangopay/api/service/reports.rb +151 -0
  32. data/lib/mangopay/api/service/repudiations.rb +32 -0
  33. data/lib/mangopay/api/service/responses.rb +102 -0
  34. data/lib/mangopay/api/service/settlement_transfers.rb +55 -0
  35. data/lib/mangopay/api/service/transactions.rb +183 -0
  36. data/lib/mangopay/api/service/transfers.rb +54 -0
  37. data/lib/mangopay/api/service/ubo_declarations.rb +70 -0
  38. data/lib/mangopay/api/service/users.rb +163 -0
  39. data/lib/mangopay/api/service/wallets.rb +99 -0
  40. data/lib/mangopay/api/uri_provider.rb +35 -0
  41. data/lib/mangopay/common/json_tag_converter.rb +68 -0
  42. data/lib/mangopay/common/jsonifier.rb +249 -0
  43. data/lib/mangopay/common/log_provider.rb +34 -0
  44. data/lib/mangopay/common/rate_limit_interval.rb +17 -0
  45. data/lib/mangopay/common/read_only_fields.rb +27 -0
  46. data/lib/mangopay/common/response_error.rb +61 -0
  47. data/lib/mangopay/common/sort_direction.rb +15 -0
  48. data/lib/mangopay/common/sort_field.rb +13 -0
  49. data/lib/mangopay/common/template_url_options.rb +9 -0
  50. data/lib/mangopay/configuration.rb +39 -0
  51. data/lib/mangopay/environment.rb +66 -0
  52. data/lib/mangopay/model/address.rb +27 -0
  53. data/lib/mangopay/model/declared_ubo.rb +21 -0
  54. data/lib/mangopay/model/dispute_reason.rb +15 -0
  55. data/lib/mangopay/model/document_page_consult.rb +15 -0
  56. data/lib/mangopay/model/e_money.rb +18 -0
  57. data/lib/mangopay/model/entity/account/bank_account.rb +26 -0
  58. data/lib/mangopay/model/entity/account/ca_bank_account.rb +27 -0
  59. data/lib/mangopay/model/entity/account/gb_bank_account.rb +21 -0
  60. data/lib/mangopay/model/entity/account/iban_bank_account.rb +21 -0
  61. data/lib/mangopay/model/entity/account/other_bank_account.rb +24 -0
  62. data/lib/mangopay/model/entity/account/us_bank_account.rb +24 -0
  63. data/lib/mangopay/model/entity/card.rb +45 -0
  64. data/lib/mangopay/model/entity/card_registration.rb +43 -0
  65. data/lib/mangopay/model/entity/client.rb +63 -0
  66. data/lib/mangopay/model/entity/client_wallet.rb +23 -0
  67. data/lib/mangopay/model/entity/dispute.rb +50 -0
  68. data/lib/mangopay/model/entity/dispute_document.rb +29 -0
  69. data/lib/mangopay/model/entity/entity_base.rb +18 -0
  70. data/lib/mangopay/model/entity/hook.rb +26 -0
  71. data/lib/mangopay/model/entity/kyc_document.rb +28 -0
  72. data/lib/mangopay/model/entity/mandate.rb +51 -0
  73. data/lib/mangopay/model/entity/pay_in/bank_wire_direct_pay_in.rb +22 -0
  74. data/lib/mangopay/model/entity/pay_in/card_direct_pay_in.rb +33 -0
  75. data/lib/mangopay/model/entity/pay_in/card_pre_authorized_pay_in.rb +13 -0
  76. data/lib/mangopay/model/entity/pay_in/card_web_pay_in.rb +40 -0
  77. data/lib/mangopay/model/entity/pay_in/direct_debit_direct_pay_in.rb +23 -0
  78. data/lib/mangopay/model/entity/pay_in/direct_debit_web_pay_in.rb +38 -0
  79. data/lib/mangopay/model/entity/pay_in/pay_in.rb +16 -0
  80. data/lib/mangopay/model/entity/pay_out.rb +22 -0
  81. data/lib/mangopay/model/entity/pre_authorization.rb +68 -0
  82. data/lib/mangopay/model/entity/refund.rb +18 -0
  83. data/lib/mangopay/model/entity/report.rb +51 -0
  84. data/lib/mangopay/model/entity/repudiation.rb +18 -0
  85. data/lib/mangopay/model/entity/settlement_transfer.rb +17 -0
  86. data/lib/mangopay/model/entity/transaction.rb +52 -0
  87. data/lib/mangopay/model/entity/transfer.rb +13 -0
  88. data/lib/mangopay/model/entity/ubo_declaration.rb +32 -0
  89. data/lib/mangopay/model/entity/user/legal_user.rb +53 -0
  90. data/lib/mangopay/model/entity/user/natural_user.rb +50 -0
  91. data/lib/mangopay/model/entity/user/user.rb +18 -0
  92. data/lib/mangopay/model/entity/wallet.rb +28 -0
  93. data/lib/mangopay/model/enum/account_type.rb +24 -0
  94. data/lib/mangopay/model/enum/card_status.rb +15 -0
  95. data/lib/mangopay/model/enum/card_type.rb +33 -0
  96. data/lib/mangopay/model/enum/card_validity.rb +19 -0
  97. data/lib/mangopay/model/enum/country_iso.rb +759 -0
  98. data/lib/mangopay/model/enum/culture_code.rb +44 -0
  99. data/lib/mangopay/model/enum/currency_iso.rb +552 -0
  100. data/lib/mangopay/model/enum/declared_ubo_refused_reason_type.rb +16 -0
  101. data/lib/mangopay/model/enum/declared_ubo_status.rb +18 -0
  102. data/lib/mangopay/model/enum/deposit_type.rb +15 -0
  103. data/lib/mangopay/model/enum/direct_debit_type.rb +13 -0
  104. data/lib/mangopay/model/enum/dispute_doc_refused_reason_type.rb +25 -0
  105. data/lib/mangopay/model/enum/dispute_document_type.rb +23 -0
  106. data/lib/mangopay/model/enum/dispute_reason_type.rb +33 -0
  107. data/lib/mangopay/model/enum/dispute_status.rb +21 -0
  108. data/lib/mangopay/model/enum/dispute_type.rb +15 -0
  109. data/lib/mangopay/model/enum/document_status.rb +21 -0
  110. data/lib/mangopay/model/enum/download_format.rb +11 -0
  111. data/lib/mangopay/model/enum/event_type.rb +74 -0
  112. data/lib/mangopay/model/enum/funds_type.rb +15 -0
  113. data/lib/mangopay/model/enum/hook_status.rb +13 -0
  114. data/lib/mangopay/model/enum/hook_validity.rb +15 -0
  115. data/lib/mangopay/model/enum/income_range.rb +21 -0
  116. data/lib/mangopay/model/enum/kyc_doc_refused_reason_type.rb +37 -0
  117. data/lib/mangopay/model/enum/kyc_document_type.rb +19 -0
  118. data/lib/mangopay/model/enum/kyc_level.rb +13 -0
  119. data/lib/mangopay/model/enum/legal_person_type.rb +15 -0
  120. data/lib/mangopay/model/enum/mandate_culture_code.rb +23 -0
  121. data/lib/mangopay/model/enum/mandate_execution_type.rb +11 -0
  122. data/lib/mangopay/model/enum/mandate_scheme.rb +13 -0
  123. data/lib/mangopay/model/enum/mandate_status.rb +24 -0
  124. data/lib/mangopay/model/enum/mandate_type.rb +11 -0
  125. data/lib/mangopay/model/enum/natural_user_capacity.rb +15 -0
  126. data/lib/mangopay/model/enum/pay_in_execution_type.rb +18 -0
  127. data/lib/mangopay/model/enum/pay_in_payment_type.rb +21 -0
  128. data/lib/mangopay/model/enum/pay_out_payment_type.rb +11 -0
  129. data/lib/mangopay/model/enum/payment_status.rb +21 -0
  130. data/lib/mangopay/model/enum/person_type.rb +15 -0
  131. data/lib/mangopay/model/enum/platform_type.rb +23 -0
  132. data/lib/mangopay/model/enum/pre_authorization_execution_type.rb +11 -0
  133. data/lib/mangopay/model/enum/pre_authorization_status.rb +18 -0
  134. data/lib/mangopay/model/enum/refund_reason_type.rb +21 -0
  135. data/lib/mangopay/model/enum/report_status.rb +17 -0
  136. data/lib/mangopay/model/enum/report_type.rb +13 -0
  137. data/lib/mangopay/model/enum/secure_mode.rb +16 -0
  138. data/lib/mangopay/model/enum/transaction_nature.rb +17 -0
  139. data/lib/mangopay/model/enum/transaction_status.rb +15 -0
  140. data/lib/mangopay/model/enum/transaction_type.rb +15 -0
  141. data/lib/mangopay/model/enum/ubo_declaration_refused_reason_type.rb +19 -0
  142. data/lib/mangopay/model/enum/ubo_declaration_status.rb +21 -0
  143. data/lib/mangopay/model/event.rb +18 -0
  144. data/lib/mangopay/model/model.rb +194 -0
  145. data/lib/mangopay/model/money.rb +17 -0
  146. data/lib/mangopay/model/pay_in_web_extended_view.rb +31 -0
  147. data/lib/mangopay/model/refund_reason.rb +15 -0
  148. data/lib/mangopay/model/report_filter.rb +83 -0
  149. data/lib/mangopay/model/request/cancel_request.rb +16 -0
  150. data/lib/mangopay/model/request/complete_registration_request.rb +13 -0
  151. data/lib/mangopay/model/request/currency_request.rb +13 -0
  152. data/lib/mangopay/model/request/deactivation_request.rb +10 -0
  153. data/lib/mangopay/model/request/filter_request.rb +38 -0
  154. data/lib/mangopay/model/request/submit_document_request.rb +14 -0
  155. data/lib/mangopay/model/request/submit_ubo_declaration_request.rb +14 -0
  156. data/lib/mangopay/model/request/upload_file_request.rb +9 -0
  157. data/lib/mangopay/model/response_replica.rb +27 -0
  158. data/lib/mangopay/util/custom_formatter.rb +12 -0
  159. data/lib/mangopay/util/custom_logger.rb +34 -0
  160. data/lib/mangopay/util/enum.rb +52 -0
  161. data/lib/mangopay/util/file_encoder.rb +16 -0
  162. data/lib/mangopay/util/non_instantiable.rb +6 -0
  163. data/lib/mangopay/util/storage_strategy.rb +10 -0
  164. data/lib/mangopay/util/void_logger.rb +6 -0
  165. data/mangopay.gemspec +32 -0
  166. data/spec/context/address_context.rb +25 -0
  167. data/spec/context/bank_account_context.rb +138 -0
  168. data/spec/context/card_context.rb +46 -0
  169. data/spec/context/client_context.rb +45 -0
  170. data/spec/context/dispute_context.rb +37 -0
  171. data/spec/context/dispute_document_context.rb +20 -0
  172. data/spec/context/hook_context.rb +16 -0
  173. data/spec/context/kyc_document_context.rb +23 -0
  174. data/spec/context/mandate_context.rb +27 -0
  175. data/spec/context/pay_in_context.rb +225 -0
  176. data/spec/context/pay_out_context.rb +39 -0
  177. data/spec/context/pre_authorization_context.rb +41 -0
  178. data/spec/context/refund_context.rb +33 -0
  179. data/spec/context/report_context.rb +22 -0
  180. data/spec/context/repudiation_context.rb +19 -0
  181. data/spec/context/settlement_transfer_context.rb +28 -0
  182. data/spec/context/transfer_context.rb +51 -0
  183. data/spec/context/ubo_declaration_context.rb +25 -0
  184. data/spec/context/user_context.rb +83 -0
  185. data/spec/context/wallet_context.rb +53 -0
  186. data/spec/mangopay/bank_accounts_spec.rb +229 -0
  187. data/spec/mangopay/cards_spec.rb +135 -0
  188. data/spec/mangopay/client_wallets_spec.rb +148 -0
  189. data/spec/mangopay/clients_spec.rb +55 -0
  190. data/spec/mangopay/configuration_spec.rb +126 -0
  191. data/spec/mangopay/dispute_documents_spec.rb +174 -0
  192. data/spec/mangopay/disputes_spec.rb +265 -0
  193. data/spec/mangopay/e_money_spec.rb +38 -0
  194. data/spec/mangopay/events_spec.rb +50 -0
  195. data/spec/mangopay/hooks_spec.rb +71 -0
  196. data/spec/mangopay/kyc_documents_spec.rb +180 -0
  197. data/spec/mangopay/mandates_spec.rb +219 -0
  198. data/spec/mangopay/oauth_tokens_spec.rb +41 -0
  199. data/spec/mangopay/pay_ins_spec.rb +181 -0
  200. data/spec/mangopay/pay_outs_spec.rb +39 -0
  201. data/spec/mangopay/pre_authorizations_spec.rb +58 -0
  202. data/spec/mangopay/refunds_spec.rb +40 -0
  203. data/spec/mangopay/reports_spec.rb +121 -0
  204. data/spec/mangopay/responses_spec.rb +295 -0
  205. data/spec/mangopay/settlement_transfers_spec.rb +37 -0
  206. data/spec/mangopay/transactions_spec.rb +233 -0
  207. data/spec/mangopay/transfers_spec.rb +38 -0
  208. data/spec/mangopay/ubo_declarations_spec.rb +65 -0
  209. data/spec/mangopay/users_spec.rb +146 -0
  210. data/spec/mangopay/wallets_spec.rb +104 -0
  211. data/spec/resources/logo.png +0 -0
  212. data/spec/resources/test_pdf.pdf +0 -0
  213. data/spec/spec_helper.rb +72 -0
  214. metadata +349 -0
@@ -0,0 +1,183 @@
1
+ require_relative '../uri_provider'
2
+
3
+ module MangoApi
4
+
5
+ # Provides API method delegates concerning the +Transaction+ entity
6
+ module Transactions
7
+ class << self
8
+ include UriProvider
9
+
10
+ # Retrieves pages of transaction entities belonging to a certain user.
11
+ # Allows configuration of paging and sorting parameters by
12
+ # yielding a filtering object to a provided block. When no filters
13
+ # are specified, will retrieve the first page of 10 newest results.
14
+ #
15
+ # Allowed +FilterRequest+ params:
16
+ # * page
17
+ # * per_page
18
+ # * sort_field and sort_direction
19
+ # * before_date
20
+ # * after_date
21
+ # * status
22
+ # * nature
23
+ # * type
24
+ #
25
+ # @param +id+ [String] ID of the user whose transactions to retrieve
26
+ # @return [Array] the requested Transaction entity objects
27
+ def of_user(id)
28
+ uri = provide_uri(:get_users_transactions, id)
29
+ filter_request = nil
30
+ yield filter_request = FilterRequest.new if block_given?
31
+ results = HttpClient.get(uri, filter_request)
32
+ parse_results results
33
+ end
34
+
35
+ # Retrieves pages of transaction entities belonging to a certain wallet.
36
+ # Allows configuration of paging and sorting parameters by
37
+ # yielding a filtering object to a provided block. When no filters
38
+ # are specified, will retrieve the first page of 10 newest results.
39
+ #
40
+ # Allowed +FilterRequest+ params:
41
+ # * page
42
+ # * per_page
43
+ # * sort_field and sort_direction
44
+ # * before_date
45
+ # * after_date
46
+ # * status
47
+ # * nature
48
+ # * type
49
+ #
50
+ # @param +id+ [String] ID of the user whose transactions to retrieve
51
+ # @return [Array] the requested Transaction entity objects
52
+ def of_wallet(id)
53
+ uri = provide_uri(:get_wallets_transactions, id)
54
+ filter_request = nil
55
+ yield filter_request = FilterRequest.new if block_given?
56
+ results = HttpClient.get(uri, filter_request)
57
+ parse_results results
58
+ end
59
+
60
+ # Retrieves pages of transaction entities belonging to a certain dispute.
61
+ # Allows configuration of paging and sorting parameters by
62
+ # yielding a filtering object to a provided block. When no filters
63
+ # are specified, will retrieve the first page of 10 newest results.
64
+ #
65
+ # Allowed +FilterRequest+ params:
66
+ # * page
67
+ # * per_page
68
+ # * sort_field and sort_direction
69
+ # * before_date
70
+ # * after_date
71
+ # * status
72
+ # * nature
73
+ # * type
74
+ #
75
+ # @param +id+ [String] ID of the dispute whose transactions to retrieve
76
+ # @return [Array] the requested Transaction entity objects
77
+ def of_dispute(id)
78
+ uri = provide_uri(:get_disputes_transactions, id)
79
+ filter_request = nil
80
+ yield filter_request = FilterRequest.new if block_given?
81
+ results = HttpClient.get(uri, filter_request)
82
+ parse_results results
83
+ end
84
+
85
+ # Retrieves pages of transaction entities belonging to
86
+ # the current environment's client. Allows configuration of
87
+ # paging and sorting parameters by yielding a filtering object
88
+ # to a provided block. When no filters are specified, will
89
+ # retrieve the first page of 10 newest results.
90
+ #
91
+ # Allowed +FilterRequest+ params:
92
+ # * page
93
+ # * per_page
94
+ # * sort_field and sort_direction
95
+ # * before_date
96
+ # * after_date
97
+ # * status
98
+ # * nature
99
+ # * type
100
+ #
101
+ # @return [Array] the requested Transaction entity objects
102
+ def of_client
103
+ uri = provide_uri(:get_clients_transactions)
104
+ filter_request = nil
105
+ yield filter_request = FilterRequest.new if block_given?
106
+ results = HttpClient.get(uri, filter_request)
107
+ parse_results results
108
+ end
109
+
110
+ # Retrieves pages of transaction entities belonging to
111
+ # the current environment's client wallet specified by
112
+ # +funds_type+ and +currency+. Allows configuration of
113
+ # paging and sorting parameters by yielding a filtering object
114
+ # to a provided block. When no filters are specified, will
115
+ # retrieve the first page of 10 newest results.
116
+ #
117
+ # Allowed +FilterRequest+ params:
118
+ # * page
119
+ # * per_page
120
+ # * sort_field and sort_direction
121
+ # * before_date
122
+ # * after_date
123
+ # * status
124
+ # * nature
125
+ # * type
126
+ #
127
+ # @param +funds_type+ [FundsType] the funds' type of the wallet to
128
+ # retrieve Transactions for
129
+ # @return [Array] the requested Transaction entity objects
130
+ def of_client_wallet(funds_type, currency)
131
+ uri = provide_uri(:get_client_wallets_transactions,
132
+ funds_type,
133
+ currency)
134
+ filter_request = nil
135
+ yield filter_request = FilterRequest.new if block_given?
136
+ results = HttpClient.get(uri, filter_request)
137
+ parse_results results
138
+ end
139
+
140
+ # Retrieves pages of transaction entities belonging to a certain
141
+ # pre-authorization.Allows configuration of paging and sorting parameters
142
+ # by yielding a filtering object to a provided block. When no filters
143
+ # are specified, will retrieve the first page of 10 newest results.
144
+ #
145
+ # Allowed +FilterRequest+ params:
146
+ # * page
147
+ # * per_page
148
+ # * sort_field and sort_direction
149
+ #
150
+ # @param +id+ [String] ID of the dispute whose transactions to retrieve
151
+ # @return [Array] the requested Transaction entity objects
152
+ def of_pre_authorization(id)
153
+ uri = provide_uri(:get_pre_authorizations_transactions, id)
154
+ filter_request = nil
155
+ yield filter_request = FilterRequest.new if block_given?
156
+ results = HttpClient.get(uri, filter_request)
157
+ parse_results results
158
+ end
159
+
160
+ private
161
+
162
+ # Parses an array of JSON-originating hashes into the corresponding
163
+ # Transaction entity objects.
164
+ #
165
+ # @param +results+ [Array] JSON-originating data hashes
166
+ # @return [Array] parsed Transaction entity objects
167
+ def parse_results(results)
168
+ results.collect do |entity|
169
+ parse entity
170
+ end
171
+ end
172
+
173
+ # Parses a JSON-originating hash into the corresponding
174
+ # Transaction entity object.
175
+ #
176
+ # @param +response+ [Hash] JSON-originating data hash
177
+ # @return [Transaction] corresponding Transaction entity object
178
+ def parse(response)
179
+ MangoModel::Transaction.new.dejsonify response
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,54 @@
1
+ require_relative '../uri_provider'
2
+
3
+ module MangoApi
4
+
5
+ # Provides API method delegates concerning the +Transfer+ entity
6
+ module Transfers
7
+ class << self
8
+ include UriProvider
9
+
10
+ # Creates a new transfer entity.
11
+ #
12
+ # +Transfer+ properties:
13
+ # * Required
14
+ # * author_id
15
+ # * debited_funds
16
+ # * fees
17
+ # * debited_wallet_id
18
+ # * credited_wallet_id
19
+ # * Optional
20
+ # * tag
21
+ # * credited_user_id
22
+ #
23
+ # @param +transfer+ [Transfer] model object of transfer to be created
24
+ # @param +id_key+ [String] idempotency key for future response replication
25
+ # @return [Transfer] the newly-created Transfer entity object
26
+ def create(transfer, id_key = nil)
27
+ uri = provide_uri(:create_transfer)
28
+ response = HttpClient.post(uri, transfer, id_key)
29
+ parse response
30
+ end
31
+
32
+ # Retrieves a transfer entity.
33
+ #
34
+ # @param +id+ [String] ID of the transfer to be retrieved
35
+ # @return [Transfer] the requested entity object
36
+ def get(id)
37
+ uri = provide_uri(:get_transfer, id)
38
+ response = HttpClient.get(uri)
39
+ parse response
40
+ end
41
+
42
+ private
43
+
44
+ # Parses a JSON-originating hash into the corresponding
45
+ # Transfer entity object.
46
+ #
47
+ # @param +response+ [Hash] JSON-originating data hash
48
+ # @return [Transfer] corresponding Transfer entity object
49
+ def parse(response)
50
+ MangoModel::Transfer.new.dejsonify response
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,70 @@
1
+ require_relative '../uri_provider'
2
+ require_relative '../../model/request/submit_ubo_declaration_request'
3
+
4
+ module MangoApi
5
+
6
+ # Provides API method delegates for the +UboDeclaration+ entity
7
+ module UboDeclarations
8
+ class << self
9
+ include UriProvider
10
+
11
+ # Creates a UBO Declaration entity.
12
+ #
13
+ # +UboDeclaration+ properties:
14
+ # * Optional
15
+ # * tag
16
+ # * declared_ubos
17
+ #
18
+ # @param +ubo_declaration+ [UboDeclaration] model object of the
19
+ # UBO declaration to be created
20
+ # @param +user_id+ [String] ID of the user who the declaration is
21
+ # being created for
22
+ # @return [UboDeclaration] the newly-created UboDeclaration entity object
23
+ def create(ubo_declaration, user_id, id_key = nil)
24
+ uri = provide_uri(:create_ubo_declaration, user_id)
25
+ response = HttpClient.post(uri, ubo_declaration, id_key)
26
+ parse response
27
+ end
28
+
29
+ # Updates the UBO declaration entity identifiable by the provided
30
+ # +UboDeclaration+ object's ID.
31
+ #
32
+ # +UboDeclaration+ optional properties:
33
+ # * tag
34
+ # * status
35
+ # * declared_ubos
36
+ #
37
+ # @param +ubo_declaration+ [UboDeclaration] UBO declaration object
38
+ # with corresponding ID and updated data
39
+ # @return [UboDeclaration] the updated UboDeclaration entity object
40
+ def update(ubo_declaration)
41
+ uri = provide_uri(:update_ubo_declaration, ubo_declaration.id)
42
+ response = HttpClient.put(uri, ubo_declaration)
43
+ parse response
44
+ end
45
+
46
+ # Submits a UBO declaration entity for approval.
47
+ #
48
+ # @param +id+ [String] ID of the UBO declaration to submit
49
+ # @param +tag+ [String] custom data to add with the request
50
+ # @return [UboDeclaration] the submitted UboDeclaration entity object
51
+ def submit(id, tag = nil)
52
+ uri = provide_uri(:submit_ubo_declaration, id)
53
+ submit_request = SubmitUboDeclarationRequest.new(tag)
54
+ response = HttpClient.put(uri, submit_request)
55
+ parse response
56
+ end
57
+
58
+ private
59
+
60
+ # Parses a JSON-originating hash into the corresponding
61
+ # UboDeclaration entity object.
62
+ #
63
+ # @param +response+ [Hash] JSON-originating data hash
64
+ # @return [UboDeclaration] corresponding UboDeclaration entity object
65
+ def parse(response)
66
+ MangoModel::UboDeclaration.new.dejsonify response
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,163 @@
1
+ require_relative '../uri_provider'
2
+ require_relative '../../model/request/filter_request'
3
+
4
+ module MangoApi
5
+
6
+ # Provides API method delegates concerning the +User+ entity.
7
+ module Users
8
+ class << self
9
+ include UriProvider
10
+
11
+ # Creates a new user entity.
12
+ #
13
+ # +User+ properties:
14
+ # * +NaturalUser+
15
+ # * +first_name+ - required
16
+ # * +last_name+ - required
17
+ # * +birthday+ - required
18
+ # * +nationality+ - required
19
+ # * +country_of_residence+ - required
20
+ # * +email+ - required
21
+ # * +tag+ - optional
22
+ # * +address+ - optional
23
+ # * +occupation+ - optional
24
+ # * +income_range+ - optional
25
+ # * +capacity+ - optional
26
+ # * +LegalUser+
27
+ # * +legal_person_type+ - required
28
+ # * +name+ - required
29
+ # * +legal_representative_birthday+ - required
30
+ # * +legal_representative_country_of_residence+ - required
31
+ # * +legal_representative_nationality+ - required
32
+ # * +legal_representative_first_name+ - required
33
+ # * +legal_representative_last_name+ - required
34
+ # * +email+ - required
35
+ # * +tag+ - optional
36
+ # * +headquarters_address+ - optional
37
+ # * +legal_representative_address+ - optional
38
+ # * +legal_representative_email+ - optional
39
+ # * +company_number+ - optional
40
+ #
41
+ # +User+ properties:
42
+ # * Optional
43
+ # * tag
44
+ # * declared_ubos
45
+ #
46
+ # @param +user+ [User] model object of user to be created
47
+ # @param +id_key+ [String] idempotency key for future response replication
48
+ # @return [User] the newly-created User entity object
49
+ def create(user, id_key = nil)
50
+ uri = provide_uri(:create_user, user)
51
+ response = HttpClient.post(uri, user, id_key)
52
+ parse response
53
+ end
54
+
55
+ # Updates the user entity identifiable by
56
+ # the provided user object's ID.
57
+ #
58
+ # +User+ optional properties:
59
+ # * +NaturalUser+
60
+ # * tag
61
+ # * first_name
62
+ # * last_name
63
+ # * address
64
+ # * birthday
65
+ # * nationality
66
+ # * country_of_residence
67
+ # * occupation
68
+ # * income_range
69
+ # * email
70
+ # * +Legal_user+
71
+ # * tag
72
+ # * headquarters_address
73
+ # * name
74
+ # * legal_representative_address
75
+ # * legal_representative_birthday
76
+ # * legal_representative_country_of_residence
77
+ # * legal_representative_nationality
78
+ # * legal_representative_email
79
+ # * legal_representative_first_name
80
+ # * legal_representative_last_name
81
+ # * legal_person_type
82
+ # * company_number
83
+ #
84
+ # @param +user+ [User] user object with corresponding ID
85
+ # and updated data
86
+ # @return [User] the updated User entity object
87
+ def update(user)
88
+ uri = provide_uri :update_user,
89
+ user.person_type.to_s.downcase,
90
+ user.id
91
+ response = HttpClient.put(uri, user)
92
+ parse response
93
+ end
94
+
95
+ # Retrieves a user entity.
96
+ #
97
+ # @param +id+ [String] ID of the user to be retrieved
98
+ # @return [User] the requested entity object
99
+ def get(id)
100
+ uri = provide_uri(:get_user, id)
101
+ response = HttpClient.get(uri)
102
+ parse response
103
+ end
104
+
105
+ # Retrieves user entity pages. Allows configuration
106
+ # of paging and sorting parameters by yielding a filtering
107
+ # object to a provided block. When no filters are specified,
108
+ # will retrieve the first page of 10 newest results.
109
+ #
110
+ # Allowed +FilterRequest+ params:
111
+ # * page
112
+ # * per_page
113
+ # * sort_field and sort_direction
114
+ # * before_date
115
+ # * after_date
116
+ #
117
+ # @return [Array] corresponding User entity objects
118
+ def all
119
+ uri = provide_uri(:get_users)
120
+ filter_request = nil
121
+ yield filter_request = FilterRequest.new if block_given?
122
+ results = HttpClient.get(uri, filter_request)
123
+ parse_results results
124
+ end
125
+
126
+ private
127
+
128
+ # Parses an array of JSON-originating hashes into the corresponding
129
+ # User entity objects.
130
+ #
131
+ # @param +results+ [Array] JSON-originating data hashes
132
+ # @return [Array] parsed User entity objects
133
+ def parse_results(results)
134
+ results.collect do |entity|
135
+ parse entity
136
+ end
137
+ end
138
+
139
+ # Parses a JSON-originating hash into the corresponding
140
+ # User entity object.
141
+ #
142
+ # @param +response+ [Hash] JSON-originating data hash
143
+ # @return [User] corresponding User entity object
144
+ def parse(response)
145
+ type = user_type(response)
146
+ type.new.dejsonify response
147
+ end
148
+
149
+ # Asserts the type of user represented by a hash.
150
+ #
151
+ # @param +hash+ [Hash] source hash
152
+ # @return [Class] type of user represented by the hash
153
+ def user_type(hash)
154
+ case hash['PersonType']
155
+ when MangoModel::PersonType::NATURAL.to_s
156
+ MangoModel::NaturalUser
157
+ else
158
+ MangoModel::LegalUser
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end