fat_zebra_multi 3.1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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