fat_zebra_multi 3.1.0.1

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 (211) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +0 -0
  4. data/.rubocop.yml +44 -0
  5. data/.travis.yml +10 -0
  6. data/Gemfile +4 -0
  7. data/README.md +104 -0
  8. data/Rakefile +11 -0
  9. data/fat_zebra_multi.gemspec +27 -0
  10. data/lib/fat_zebra.rb +65 -0
  11. data/lib/fat_zebra/api_helper.rb +91 -0
  12. data/lib/fat_zebra/api_operation/delete.rb +38 -0
  13. data/lib/fat_zebra/api_operation/find.rb +30 -0
  14. data/lib/fat_zebra/api_operation/save.rb +67 -0
  15. data/lib/fat_zebra/api_operation/search.rb +39 -0
  16. data/lib/fat_zebra/api_operation/void.rb +52 -0
  17. data/lib/fat_zebra/api_resource.rb +88 -0
  18. data/lib/fat_zebra/bank_account.rb +20 -0
  19. data/lib/fat_zebra/batch.rb +60 -0
  20. data/lib/fat_zebra/card.rb +23 -0
  21. data/lib/fat_zebra/config.rb +90 -0
  22. data/lib/fat_zebra/customer.rb +26 -0
  23. data/lib/fat_zebra/direct_credit.rb +26 -0
  24. data/lib/fat_zebra/direct_debit.rb +26 -0
  25. data/lib/fat_zebra/errors.rb +37 -0
  26. data/lib/fat_zebra/fat_zebra_object.rb +68 -0
  27. data/lib/fat_zebra/information.rb +29 -0
  28. data/lib/fat_zebra/object_helper.rb +119 -0
  29. data/lib/fat_zebra/payment_plan.rb +61 -0
  30. data/lib/fat_zebra/purchase.rb +96 -0
  31. data/lib/fat_zebra/refund.rb +27 -0
  32. data/lib/fat_zebra/request.rb +174 -0
  33. data/lib/fat_zebra/request/multipart/epilogue.rb +23 -0
  34. data/lib/fat_zebra/request/multipart/file_io.rb +40 -0
  35. data/lib/fat_zebra/request/multipart/param.rb +37 -0
  36. data/lib/fat_zebra/request/multipart/part.rb +28 -0
  37. data/lib/fat_zebra/request/multipart/stream.rb +57 -0
  38. data/lib/fat_zebra/util.rb +71 -0
  39. data/lib/fat_zebra/validation.rb +67 -0
  40. data/lib/fat_zebra/version.rb +3 -0
  41. data/lib/fat_zebra/web_hook.rb +22 -0
  42. data/spec/cassettes/FatZebra_BankAccount/_create/1_1_1.yml +53 -0
  43. data/spec/cassettes/FatZebra_BankAccount/_create/1_1_2.yml +53 -0
  44. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_1.yml +164 -0
  45. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_2.yml +164 -0
  46. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_3.yml +164 -0
  47. data/spec/cassettes/FatZebra_Batch/_create/with_file/1_1_1_1.yml +61 -0
  48. data/spec/cassettes/FatZebra_Batch/_create/with_file/1_1_1_2.yml +61 -0
  49. data/spec/cassettes/FatZebra_Batch/_create/with_path/1_1_2_1.yml +61 -0
  50. data/spec/cassettes/FatZebra_Batch/_create/with_path/1_1_2_2.yml +61 -0
  51. data/spec/cassettes/FatZebra_Batch/_find/1_2_1.yml +112 -0
  52. data/spec/cassettes/FatZebra_Batch/_find/1_2_2.yml +112 -0
  53. data/spec/cassettes/FatZebra_Batch/_result/1_4_1.yml +163 -0
  54. data/spec/cassettes/FatZebra_Batch/_search/1_3_1.yml +54 -0
  55. data/spec/cassettes/FatZebra_Batch/_search/1_3_2.yml +54 -0
  56. data/spec/cassettes/FatZebra_Batch/_search/1_3_3.yml +54 -0
  57. data/spec/cassettes/FatZebra_Card/_create/1_1_1.yml +54 -0
  58. data/spec/cassettes/FatZebra_Card/_create/1_1_2.yml +54 -0
  59. data/spec/cassettes/FatZebra_Card/_create/1_1_3.yml +54 -0
  60. data/spec/cassettes/FatZebra_Card/_create/1_1_4.yml +54 -0
  61. data/spec/cassettes/FatZebra_Card/_create/1_1_5.yml +54 -0
  62. data/spec/cassettes/FatZebra_Card/_create/1_1_6.yml +54 -0
  63. data/spec/cassettes/FatZebra_Card/_update/1_2_1.yml +105 -0
  64. data/spec/cassettes/FatZebra_Card/_update/1_2_2.yml +105 -0
  65. data/spec/cassettes/FatZebra_Card/_update/1_2_3.yml +105 -0
  66. data/spec/cassettes/FatZebra_Card/_update/validations/1_2_4_1.yml +54 -0
  67. data/spec/cassettes/FatZebra_Customer/_create/1_1_1.yml +55 -0
  68. data/spec/cassettes/FatZebra_Customer/_create/1_1_2.yml +55 -0
  69. data/spec/cassettes/FatZebra_Customer/_create/1_1_3.yml +55 -0
  70. data/spec/cassettes/FatZebra_Customer/_create/1_1_4.yml +55 -0
  71. data/spec/cassettes/FatZebra_Customer/_create/1_1_5.yml +55 -0
  72. data/spec/cassettes/FatZebra_Customer/_create/1_1_6.yml +55 -0
  73. data/spec/cassettes/FatZebra_Customer/_delete/1_5_1.yml +103 -0
  74. data/spec/cassettes/FatZebra_Customer/_find/1_3_1.yml +107 -0
  75. data/spec/cassettes/FatZebra_Customer/_find/1_3_2.yml +107 -0
  76. data/spec/cassettes/FatZebra_Customer/_search/1_2_1.yml +60 -0
  77. data/spec/cassettes/FatZebra_Customer/_search/1_2_2.yml +60 -0
  78. data/spec/cassettes/FatZebra_Customer/_search/1_2_3.yml +60 -0
  79. data/spec/cassettes/FatZebra_Customer/_update/1_4_1.yml +106 -0
  80. data/spec/cassettes/FatZebra_Customer/_update/1_4_2.yml +106 -0
  81. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_1.yml +52 -0
  82. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_2.yml +52 -0
  83. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_3.yml +52 -0
  84. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_4.yml +52 -0
  85. data/spec/cassettes/FatZebra_DirectCredit/_create/validations/valid/1_1_5_1_1.yml +52 -0
  86. data/spec/cassettes/FatZebra_DirectCredit/_delete/1_4_1.yml +99 -0
  87. data/spec/cassettes/FatZebra_DirectCredit/_find/1_2_1.yml +103 -0
  88. data/spec/cassettes/FatZebra_DirectCredit/_find/1_2_2.yml +103 -0
  89. data/spec/cassettes/FatZebra_DirectCredit/_find/1_2_3.yml +103 -0
  90. data/spec/cassettes/FatZebra_DirectCredit/_search/1_3_1.yml +152 -0
  91. data/spec/cassettes/FatZebra_DirectCredit/_search/1_3_2.yml +152 -0
  92. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_1.yml +52 -0
  93. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_2.yml +52 -0
  94. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_3.yml +52 -0
  95. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_4.yml +52 -0
  96. data/spec/cassettes/FatZebra_DirectDebit/_create/validations/valid/1_1_5_1_1.yml +52 -0
  97. data/spec/cassettes/FatZebra_DirectDebit/_delete/1_4_1.yml +99 -0
  98. data/spec/cassettes/FatZebra_DirectDebit/_find/1_2_1.yml +103 -0
  99. data/spec/cassettes/FatZebra_DirectDebit/_find/1_2_2.yml +103 -0
  100. data/spec/cassettes/FatZebra_DirectDebit/_find/1_2_3.yml +103 -0
  101. data/spec/cassettes/FatZebra_DirectDebit/_search/1_3_1.yml +152 -0
  102. data/spec/cassettes/FatZebra_DirectDebit/_search/1_3_2.yml +152 -0
  103. data/spec/cassettes/FatZebra_Information/_ping/1_1_1.yml +54 -0
  104. data/spec/cassettes/FatZebra_Information/_ping/1_1_2.yml +54 -0
  105. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_8_1.yml +222 -0
  106. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_8_2.yml +222 -0
  107. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_1.yml +110 -0
  108. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_2.yml +110 -0
  109. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_3.yml +110 -0
  110. data/spec/cassettes/FatZebra_PaymentPlan/_delete/1_5_1.yml +158 -0
  111. data/spec/cassettes/FatZebra_PaymentPlan/_destroy/1_6_1.yml +158 -0
  112. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_1.yml +167 -0
  113. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_2.yml +167 -0
  114. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_3.yml +167 -0
  115. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_7_1.yml +166 -0
  116. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_7_2.yml +166 -0
  117. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_1.yml +160 -0
  118. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_2.yml +160 -0
  119. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_3.yml +160 -0
  120. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_4_1.yml +166 -0
  121. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_4_2.yml +166 -0
  122. data/spec/cassettes/FatZebra_Purchase/_capture/1_5_1.yml +115 -0
  123. data/spec/cassettes/FatZebra_Purchase/_capture/1_5_2.yml +115 -0
  124. data/spec/cassettes/FatZebra_Purchase/_capture/1_5_3.yml +115 -0
  125. data/spec/cassettes/FatZebra_Purchase/_create/1_1_1.yml +53 -0
  126. data/spec/cassettes/FatZebra_Purchase/_create/1_1_10.yml +53 -0
  127. data/spec/cassettes/FatZebra_Purchase/_create/1_1_11.yml +53 -0
  128. data/spec/cassettes/FatZebra_Purchase/_create/1_1_12.yml +53 -0
  129. data/spec/cassettes/FatZebra_Purchase/_create/1_1_13.yml +53 -0
  130. data/spec/cassettes/FatZebra_Purchase/_create/1_1_2.yml +53 -0
  131. data/spec/cassettes/FatZebra_Purchase/_create/1_1_3.yml +53 -0
  132. data/spec/cassettes/FatZebra_Purchase/_create/1_1_4.yml +53 -0
  133. data/spec/cassettes/FatZebra_Purchase/_create/1_1_5.yml +53 -0
  134. data/spec/cassettes/FatZebra_Purchase/_create/1_1_6.yml +53 -0
  135. data/spec/cassettes/FatZebra_Purchase/_create/1_1_7.yml +53 -0
  136. data/spec/cassettes/FatZebra_Purchase/_create/1_1_8.yml +53 -0
  137. data/spec/cassettes/FatZebra_Purchase/_create/1_1_9.yml +53 -0
  138. data/spec/cassettes/FatZebra_Purchase/_create/bad_request/1_1_14_1.yml +55 -0
  139. data/spec/cassettes/FatZebra_Purchase/_create/bad_request/1_1_14_2.yml +55 -0
  140. data/spec/cassettes/FatZebra_Purchase/_find/1_2_1.yml +117 -0
  141. data/spec/cassettes/FatZebra_Purchase/_find/1_2_2.yml +117 -0
  142. data/spec/cassettes/FatZebra_Purchase/_find/1_2_3.yml +117 -0
  143. data/spec/cassettes/FatZebra_Purchase/_find/1_2_4.yml +117 -0
  144. data/spec/cassettes/FatZebra_Purchase/_refund/1_4_1.yml +115 -0
  145. data/spec/cassettes/FatZebra_Purchase/_refund/1_4_2.yml +115 -0
  146. data/spec/cassettes/FatZebra_Purchase/_refund/1_4_3.yml +115 -0
  147. data/spec/cassettes/FatZebra_Purchase/_search/1_3_1.yml +164 -0
  148. data/spec/cassettes/FatZebra_Purchase/_search/1_3_2.yml +164 -0
  149. data/spec/cassettes/FatZebra_Purchase/_search/1_3_3.yml +164 -0
  150. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_1.yml +652 -0
  151. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_2.yml +652 -0
  152. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_3.yml +652 -0
  153. data/spec/cassettes/FatZebra_Purchase/_void/1_6_1.yml +103 -0
  154. data/spec/cassettes/FatZebra_Purchase/_void/1_6_2.yml +103 -0
  155. data/spec/cassettes/FatZebra_Purchase/_void/1_6_3.yml +103 -0
  156. data/spec/cassettes/FatZebra_Purchase/_void/1_6_4.yml +103 -0
  157. data/spec/cassettes/FatZebra_Purchase/_void/1_7_1.yml +103 -0
  158. data/spec/cassettes/FatZebra_Purchase/_void/1_7_2.yml +103 -0
  159. data/spec/cassettes/FatZebra_Purchase/_void/1_7_3.yml +103 -0
  160. data/spec/cassettes/FatZebra_Purchase/_void/1_7_4.yml +103 -0
  161. data/spec/cassettes/FatZebra_Refund/_create/1_1_1.yml +103 -0
  162. data/spec/cassettes/FatZebra_Refund/_create/1_1_10.yml +103 -0
  163. data/spec/cassettes/FatZebra_Refund/_create/1_1_2.yml +103 -0
  164. data/spec/cassettes/FatZebra_Refund/_create/1_1_3.yml +103 -0
  165. data/spec/cassettes/FatZebra_Refund/_create/1_1_4.yml +103 -0
  166. data/spec/cassettes/FatZebra_Refund/_create/1_1_5.yml +103 -0
  167. data/spec/cassettes/FatZebra_Refund/_create/1_1_6.yml +103 -0
  168. data/spec/cassettes/FatZebra_Refund/_create/1_1_7.yml +103 -0
  169. data/spec/cassettes/FatZebra_Refund/_create/1_1_8.yml +103 -0
  170. data/spec/cassettes/FatZebra_Refund/_create/1_1_9.yml +103 -0
  171. data/spec/cassettes/FatZebra_Refund/_find/1_2_1.yml +155 -0
  172. data/spec/cassettes/FatZebra_Refund/_find/1_2_2.yml +155 -0
  173. data/spec/cassettes/FatZebra_Refund/_find/1_2_3.yml +155 -0
  174. data/spec/cassettes/FatZebra_Refund/_search/responds_with_the_newly-created_refunds.yml +214 -0
  175. data/spec/cassettes/FatZebra_Refund/_void/1_4_1.yml +153 -0
  176. data/spec/cassettes/FatZebra_Refund/_void/1_4_2.yml +153 -0
  177. data/spec/cassettes/FatZebra_Refund/_void/1_4_3.yml +153 -0
  178. data/spec/cassettes/FatZebra_Refund/_void/1_4_4.yml +153 -0
  179. data/spec/cassettes/FatZebra_WebHook/_create/1_1_1.yml +53 -0
  180. data/spec/cassettes/FatZebra_WebHook/_create/1_1_2.yml +53 -0
  181. data/spec/cassettes/FatZebra_WebHook/_create/1_1_3.yml +53 -0
  182. data/spec/cassettes/FatZebra_WebHook/_delete/1_4_1.yml +101 -0
  183. data/spec/cassettes/FatZebra_WebHook/_search/1_2_1.yml +298 -0
  184. data/spec/cassettes/FatZebra_WebHook/_search/1_2_2.yml +300 -0
  185. data/spec/cassettes/FatZebra_WebHook/_update/1_3_1.yml +104 -0
  186. data/spec/cassettes/FatZebra_WebHook/_update/1_3_2.yml +104 -0
  187. data/spec/cassettes/Multiple_accounts/The_basics/1_1_5.yml +59 -0
  188. data/spec/cassettes/Multiple_accounts/The_basics/1_1_6.yml +59 -0
  189. data/spec/fixtures/batch_test.csv +4 -0
  190. data/spec/lib/fat_zebra/api_resource_spec.rb +25 -0
  191. data/spec/lib/fat_zebra/bank_account_spec.rb +34 -0
  192. data/spec/lib/fat_zebra/batch_spec.rb +59 -0
  193. data/spec/lib/fat_zebra/card_spec.rb +41 -0
  194. data/spec/lib/fat_zebra/config_spec.rb +69 -0
  195. data/spec/lib/fat_zebra/customer_spec.rb +53 -0
  196. data/spec/lib/fat_zebra/direct_credit_spec.rb +74 -0
  197. data/spec/lib/fat_zebra/direct_debit_spec.rb +74 -0
  198. data/spec/lib/fat_zebra/fat_zebra_object_spec.rb +117 -0
  199. data/spec/lib/fat_zebra/information_spec.rb +13 -0
  200. data/spec/lib/fat_zebra/multiple_accounts_spec.rb +69 -0
  201. data/spec/lib/fat_zebra/payment_plan_spec.rb +94 -0
  202. data/spec/lib/fat_zebra/purchase_spec.rb +105 -0
  203. data/spec/lib/fat_zebra/refund_spec.rb +95 -0
  204. data/spec/lib/fat_zebra/request_spec.rb +59 -0
  205. data/spec/lib/fat_zebra/util_spec.rb +43 -0
  206. data/spec/lib/fat_zebra/validation_spec.rb +22 -0
  207. data/spec/lib/fat_zebra/web_hook_spec.rb +50 -0
  208. data/spec/spec_helper.rb +68 -0
  209. data/spec/support/payloads.rb +43 -0
  210. data/vendor/cacert.pem +3390 -0
  211. metadata +338 -0
@@ -0,0 +1,26 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Customer
4
+ #
5
+ # Manage customer for the API
6
+ #
7
+ # * search
8
+ # * save
9
+ # * find
10
+ # * delete
11
+ #
12
+ class Customer < APIResource
13
+
14
+ include FatZebra::APIOperation::Search
15
+ include FatZebra::APIOperation::Find
16
+ include FatZebra::APIOperation::Save
17
+ include FatZebra::APIOperation::Delete
18
+
19
+ validates :first_name, required: true, on: :create
20
+ validates :last_name, required: true, on: :create
21
+ validates :reference, required: true, on: :create
22
+ validates :email, required: true, on: :create
23
+ validates :ip_address, required: true, on: :create
24
+
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Direct \Credit
4
+ #
5
+ # Manage direct credit for the API
6
+ #
7
+ # * search
8
+ # * save
9
+ # * find
10
+ # * delete
11
+ #
12
+ class DirectCredit < APIResource
13
+
14
+ include FatZebra::APIOperation::Find
15
+ include FatZebra::APIOperation::Search
16
+ include FatZebra::APIOperation::Save
17
+ include FatZebra::APIOperation::Delete
18
+
19
+ validates :description, required: true, on: :create
20
+ validates :amount, required: true, type: :positive_float, on: :create
21
+ validates :bsb, required: true, on: :create
22
+ validates :account_name, required: true, on: :create
23
+ validates :account_number, required: true, on: :create
24
+
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Direct \Debit
4
+ #
5
+ # Manage direct debit for the API
6
+ #
7
+ # * search
8
+ # * save
9
+ # * find
10
+ # * delete
11
+ #
12
+ class DirectDebit < APIResource
13
+
14
+ include FatZebra::APIOperation::Find
15
+ include FatZebra::APIOperation::Search
16
+ include FatZebra::APIOperation::Save
17
+ include FatZebra::APIOperation::Delete
18
+
19
+ validates :description, required: true, on: :create
20
+ validates :amount, required: true, type: :positive_float, on: :create
21
+ validates :bsb, required: true, on: :create
22
+ validates :account_name, required: true, on: :create
23
+ validates :account_number, required: true, on: :create
24
+
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ module FatZebra
2
+
3
+ ##
4
+ # Configuration Error
5
+ class ConfigurationError < StandardError; end
6
+
7
+ ##
8
+ # Validations for the request
9
+ class RequestValidationError < StandardError; end
10
+
11
+ ##
12
+ # Method unknown for the request
13
+ class UnknownRequestMethod < StandardError; end
14
+
15
+ ##
16
+ # Request to API Error
17
+ class RequestError < StandardError
18
+
19
+ attr_reader :http_body
20
+ attr_reader :http_status
21
+ attr_reader :http_status_type
22
+ attr_reader :http_message
23
+
24
+ def initialize(response, message: nil)
25
+ @http_status = response.code.to_i
26
+ @http_status_type = response.code_type
27
+ @http_body = response.body
28
+ @http_message = message || response.message
29
+ end
30
+
31
+ def to_s
32
+ "Status #{http_status}: #{http_message}"
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,68 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Object
4
+ #
5
+ # Define the API objects
6
+ class FatZebraObject
7
+ include ObjectHelper
8
+ extend Validation
9
+
10
+ attr_reader :accepted
11
+ alias accepted? accepted
12
+
13
+ class << self
14
+
15
+ ##
16
+ # Initialize from the API response
17
+ #
18
+ # @return [FatZebra::FatZebraObject]
19
+ def initialize_from(response)
20
+ object = new
21
+
22
+ object.load_response_api(response.is_a?(Hash) ? response : JSON.parse(response))
23
+
24
+ if object.raw['response']
25
+ if object.raw['response'].is_a?(Array)
26
+ object.raw['response'].each { |response_object| object.add_data(initialize_from(response_object)) }
27
+ else
28
+ object.update_attributes(object.raw['response'])
29
+ end
30
+ else
31
+ object.update_attributes(object.raw)
32
+ end
33
+
34
+ object
35
+ end
36
+
37
+ end
38
+
39
+ ##
40
+ # Update the object based on the response from the API
41
+ # Remove and new acessor
42
+ #
43
+ # @param [Hash] response
44
+ #
45
+ # @return [FatZebra::FatZebraObject]
46
+ def update_from(response)
47
+ load_response_api(response.is_a?(Hash) ? response : JSON.parse(response))
48
+
49
+ # attributes to remove
50
+ (@values.keys - raw['response'].keys).each { |key| remove_accessor(key) }
51
+
52
+ update_attributes(raw['response'])
53
+
54
+ self
55
+ end
56
+
57
+ ##
58
+ # Load the root components for the API response
59
+ #
60
+ # @param [Hash] values
61
+ def load_response_api(response)
62
+ @raw = response
63
+ @accepted = response['successful']
64
+ @errors = response['errors']
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,29 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Information
4
+ #
5
+ # Manage information for the API
6
+ #
7
+ # * ping
8
+ #
9
+ class Information < APIResource
10
+ class << self
11
+
12
+ def base_path(_account)
13
+ ''
14
+ end
15
+
16
+ ##
17
+ # Ping the API
18
+ #
19
+ # @param [String] echo param
20
+ #
21
+ # @return [FatZebra::Information] response
22
+ def ping(nonce = SecureRandom.hex)
23
+ response = request(:get, 'ping', echo: nonce)
24
+ initialize_from(response)
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,119 @@
1
+ module FatZebra
2
+ ##
3
+ # == Object \Helper
4
+ #
5
+ # API objects helper
6
+ module ObjectHelper
7
+
8
+ ##
9
+ # @return [Hash] JSON parsed response
10
+ attr_reader :raw
11
+
12
+ ##
13
+ # @return [Hash] JSON parsed response
14
+ attr_reader :data
15
+
16
+ attr_reader :errors
17
+
18
+ ##
19
+ # Initialize and create accessor for values
20
+ #
21
+ # @params [Hash] values
22
+ def initialize(values = {})
23
+ @data = []
24
+ @values = {}
25
+ @errors = []
26
+
27
+ update_attributes(values)
28
+ end
29
+
30
+ ##
31
+ # get attribute value
32
+ def [](key)
33
+ @values[key.to_sym]
34
+ end
35
+
36
+ ##
37
+ # set attribute value
38
+ def []=(key, value)
39
+ send(:"#{key}=", value)
40
+ end
41
+
42
+ ##
43
+ # @return [Array] all the keys
44
+ def keys
45
+ @values.keys
46
+ end
47
+
48
+ ##
49
+ # @return [Hash] values to hash
50
+ def to_hash
51
+ @values
52
+ end
53
+
54
+ ##
55
+ # @return [JSON] values to JSON
56
+ def to_json(_object = nil)
57
+ JSON.generate(@values)
58
+ end
59
+
60
+ ##
61
+ # Update the attribute and add accessor for new attributes
62
+ #
63
+ # @param [Hash] values
64
+ def update_attributes(attributes)
65
+ attributes.each do |(key, value)|
66
+ add_accessor(key, value)
67
+ end
68
+ end
69
+
70
+ ##
71
+ # Add data for sub-object
72
+ #
73
+ # @param [Object] data
74
+ def add_data(data)
75
+ @data << data
76
+ end
77
+
78
+ def inspect
79
+ id_string = respond_to?(:id) && !id.nil? ? " id=#{id}" : ''
80
+ "#<#{self.class}:0x#{object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
81
+ end
82
+
83
+ def method_missing(name, *args)
84
+ super unless name.to_s.end_with?('=')
85
+
86
+ attribute = name.to_s[0...-1].to_sym
87
+ value = args.first
88
+
89
+ add_accessor(attribute, value)
90
+ end
91
+
92
+ def add_accessors(keys, payload = raw)
93
+ keys.each do |key|
94
+ add_accessor(key, payload[key])
95
+ end
96
+ end
97
+
98
+ def add_accessor(name, value)
99
+ @values[name] = value
100
+
101
+ define_singleton_method(name) { @values[name] }
102
+ define_singleton_method(:"#{name}=") do |v|
103
+ @values[name] = v
104
+ end
105
+
106
+ define_singleton_method(:"#{name}?") { value } if [FalseClass, TrueClass].include?(value.class)
107
+ end
108
+
109
+ def remove_accessor(name)
110
+ @values.delete(name)
111
+
112
+ singleton_class.class_eval { remove_method name.to_sym } if singleton_methods.include?(name.to_sym)
113
+ singleton_class.class_eval { remove_method "#{name}=".to_sym } if singleton_methods.include?("#{name}=".to_sym)
114
+ singleton_class.class_eval { remove_method "#{name}?".to_sym } if singleton_methods.include?("#{name}?".to_sym)
115
+ end
116
+
117
+ end
118
+
119
+ end
@@ -0,0 +1,61 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Payment \Plan
4
+ #
5
+ # Manage payment plan for the API
6
+ #
7
+ # * save
8
+ # * find
9
+ # * delete
10
+ # * suspend!
11
+ # * active!
12
+ #
13
+ class PaymentPlan < APIResource
14
+
15
+ include FatZebra::APIOperation::Find
16
+ include FatZebra::APIOperation::Save
17
+ include FatZebra::APIOperation::Delete
18
+
19
+ validates :payment_method, required: true, on: :create
20
+ validates :customer, required: true, on: :create
21
+ validates :reference, required: true, on: :create
22
+ validates :setup_fee, required: true, on: :create
23
+ validates :amount, required: true, on: :create
24
+ validates :start_date, required: true, on: :create
25
+ validates :frequency, required: true, on: :create
26
+ validates :anniversary, required: true, on: :create
27
+ validates :total_count, required: true, on: :create
28
+ validates :total_amount, required: true, on: :create
29
+
30
+ ##
31
+ # Suspend a payment plan
32
+ #
33
+ # @param [Hash] params
34
+ # @param [Hash] options for the request, and configurations (Optional)
35
+ #
36
+ # @return [FatZebra::PaymentPlan]
37
+ def suspend!(params = {}, options = {})
38
+ params = {
39
+ new_status: 'Suspended'
40
+ }.merge(params)
41
+
42
+ save(params, options)
43
+ end
44
+
45
+ ##
46
+ # Activate a payment plan
47
+ #
48
+ # @param [Hash] params
49
+ # @param [Hash] options for the request, and configurations (Optional)
50
+ #
51
+ # @return [FatZebra::PaymentPlan]
52
+ def active!(params = {}, options = {})
53
+ params = {
54
+ new_status: 'Active'
55
+ }.merge(params)
56
+
57
+ save(params, options)
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,96 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Purchase
4
+ #
5
+ # Manage purchase for the API
6
+ #
7
+ # * search
8
+ # * save
9
+ # * find
10
+ # * void
11
+ # * settlement
12
+ # * refund
13
+ # * capture
14
+ #
15
+ class Purchase < APIResource
16
+
17
+ include FatZebra::APIOperation::Find
18
+ include FatZebra::APIOperation::Search
19
+ include FatZebra::APIOperation::Save
20
+ include FatZebra::APIOperation::Void
21
+
22
+ validates :card_number, required: { unless: %i[card_token wallet] }, on: :create
23
+ validates :card_token, required: { unless: %i[card_number wallet] }, on: :create
24
+ validates :card_expiry, required: { unless: %i[card_token wallet] }, on: :create
25
+ validates :amount, required: true, type: :positive_integer, on: :create
26
+ validates :reference, required: true, on: :create
27
+ validates :customer_ip, required: true, on: :create
28
+
29
+ validates :from, required: true, on: :settlement
30
+ validates :to, required: true, on: :settlement
31
+
32
+ class << self
33
+
34
+ ##
35
+ # Create a payment plan
36
+ # Default currency to AUD
37
+ #
38
+ # @param [Hash] params
39
+ # @param [Hash] options for the request, and configurations (Optional)
40
+ #
41
+ # @return [FatZebra::PaymentPlan]
42
+ def create(params, options = {})
43
+ params[:currency] ||= 'AUD'
44
+
45
+ super(params, options)
46
+ end
47
+
48
+ ##
49
+ # Return all the settlements
50
+ #
51
+ # @param [Hash] params (from and to are date required)
52
+ # @param [Hash] options for the request, and configurations (Optional)
53
+ #
54
+ # @return [FatZebra::Purchase]
55
+ def settlement(params = {}, options = {})
56
+ valid!(params, :settlement) if respond_to?(:valid!)
57
+
58
+ response = request(:get, "#{resource_path}/settlement", params, options)
59
+ initialize_from(response)
60
+ end
61
+
62
+ end
63
+
64
+ ##
65
+ # Refunds the current purchase
66
+ #
67
+ # @param [Hash] params for refund API (Optional)
68
+ # @param [Hash] options for the request, and configurations (Optional)
69
+ #
70
+ # @return [FatZebra::Refund] object
71
+ def refund(params = {}, options = {})
72
+ Refund.create({
73
+ transaction_id: id,
74
+ amount: amount,
75
+ reference: reference
76
+ }.merge(params), options)
77
+ end
78
+
79
+ ##
80
+ # Captures an authorization
81
+ #
82
+ # @param [Hash] params for capture API (Optional)
83
+ # @param [Hash] options for the request, and configurations (Optional)
84
+ #
85
+ # @return [Response] Purchase response object
86
+ def capture(params = {}, options = {})
87
+ params = {
88
+ amount: amount
89
+ }.merge(params)
90
+
91
+ response = request(:post, resource_path("purchases/#{id}/capture"), params, options)
92
+ update_from(response)
93
+ end
94
+
95
+ end
96
+ end