fat_zebra 2.0.13 → 3.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 (233) hide show
  1. checksums.yaml +5 -13
  2. data/.rubocop.yml +42 -0
  3. data/.travis.yml +9 -2
  4. data/Gemfile +1 -1
  5. data/{README.markdown → README.md} +19 -20
  6. data/Rakefile +2 -12
  7. data/fat_zebra.gemspec +27 -0
  8. data/lib/fat_zebra/api_operation/delete.rb +38 -0
  9. data/lib/fat_zebra/api_operation/find.rb +23 -0
  10. data/lib/fat_zebra/api_operation/save.rb +62 -0
  11. data/lib/fat_zebra/api_operation/search.rb +32 -0
  12. data/lib/fat_zebra/api_operation/void.rb +52 -0
  13. data/lib/fat_zebra/api_resource.rb +135 -0
  14. data/lib/fat_zebra/bank_account.rb +21 -0
  15. data/lib/fat_zebra/batch.rb +56 -0
  16. data/lib/fat_zebra/card.rb +22 -0
  17. data/lib/fat_zebra/config.rb +65 -25
  18. data/lib/fat_zebra/customer.rb +27 -0
  19. data/lib/fat_zebra/direct_credit.rb +27 -0
  20. data/lib/fat_zebra/direct_debit.rb +27 -0
  21. data/lib/fat_zebra/errors.rb +18 -4
  22. data/lib/fat_zebra/fat_zebra_object.rb +179 -0
  23. data/lib/fat_zebra/information.rb +25 -0
  24. data/lib/fat_zebra/payment_plan.rb +62 -0
  25. data/lib/fat_zebra/purchase.rb +99 -0
  26. data/lib/fat_zebra/refund.rb +25 -0
  27. data/lib/fat_zebra/request/multipart/epilogue.rb +23 -0
  28. data/lib/fat_zebra/request/multipart/file_io.rb +40 -0
  29. data/lib/fat_zebra/request/multipart/param.rb +37 -0
  30. data/lib/fat_zebra/request/multipart/part.rb +28 -0
  31. data/lib/fat_zebra/request/multipart/stream.rb +55 -0
  32. data/lib/fat_zebra/request.rb +162 -0
  33. data/lib/fat_zebra/util.rb +70 -0
  34. data/lib/fat_zebra/validation.rb +47 -0
  35. data/lib/fat_zebra/version.rb +1 -1
  36. data/lib/fat_zebra/web_hook.rb +23 -0
  37. data/lib/fat_zebra.rb +51 -55
  38. data/spec/cassettes/FatZebra_BankAccount/_create/1_1_1.yml +57 -0
  39. data/spec/cassettes/FatZebra_BankAccount/_create/1_1_2.yml +57 -0
  40. data/spec/cassettes/FatZebra_BankAccount/_create/validations/1_1_3_1.yml +57 -0
  41. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_1.yml +172 -0
  42. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_2.yml +172 -0
  43. data/spec/cassettes/FatZebra_BankAccount/_search/1_2_3.yml +172 -0
  44. data/spec/cassettes/FatZebra_Batch/_create/1_1_1.yml +58 -0
  45. data/spec/cassettes/FatZebra_Batch/_create/1_1_2.yml +58 -0
  46. data/spec/cassettes/FatZebra_Batch/_create/validations/1_1_3_1.yml +57 -0
  47. data/spec/cassettes/FatZebra_Batch/_create/with_file/1_1_1_1.yml +58 -0
  48. data/spec/cassettes/FatZebra_Batch/_create/with_file/1_1_1_2.yml +58 -0
  49. data/spec/cassettes/FatZebra_Batch/_create/with_path/1_1_2_1.yml +58 -0
  50. data/spec/cassettes/FatZebra_Batch/_create/with_path/1_1_2_2.yml +58 -0
  51. data/spec/cassettes/FatZebra_Batch/_find/1_2_1.yml +109 -0
  52. data/spec/cassettes/FatZebra_Batch/_find/1_2_2.yml +109 -0
  53. data/spec/cassettes/FatZebra_Batch/_result/1_4_1.yml +160 -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 +55 -0
  58. data/spec/cassettes/FatZebra_Card/_create/1_1_2.yml +55 -0
  59. data/spec/cassettes/FatZebra_Card/_create/1_1_3.yml +55 -0
  60. data/spec/cassettes/FatZebra_Card/_create/1_1_4.yml +55 -0
  61. data/spec/cassettes/FatZebra_Card/_create/1_1_5.yml +55 -0
  62. data/spec/cassettes/FatZebra_Card/_create/1_1_6.yml +55 -0
  63. data/spec/cassettes/FatZebra_Card/_create/validations/1_1_7_1.yml +56 -0
  64. data/spec/cassettes/FatZebra_Card/_update/1_2_1.yml +105 -0
  65. data/spec/cassettes/FatZebra_Card/_update/1_2_2.yml +105 -0
  66. data/spec/cassettes/FatZebra_Card/_update/1_2_3.yml +105 -0
  67. data/spec/cassettes/FatZebra_Card/_update/validations/1_2_4_1.yml +55 -0
  68. data/spec/cassettes/FatZebra_Customer/_create/1_1_1.yml +59 -0
  69. data/spec/cassettes/FatZebra_Customer/_create/1_1_2.yml +59 -0
  70. data/spec/cassettes/FatZebra_Customer/_create/1_1_3.yml +59 -0
  71. data/spec/cassettes/FatZebra_Customer/_create/1_1_4.yml +59 -0
  72. data/spec/cassettes/FatZebra_Customer/_create/1_1_5.yml +59 -0
  73. data/spec/cassettes/FatZebra_Customer/_create/1_1_6.yml +59 -0
  74. data/spec/cassettes/FatZebra_Customer/_create/validations/1_1_7_1.yml +56 -0
  75. data/spec/cassettes/FatZebra_Customer/_delete/1_4_1.yml +113 -0
  76. data/spec/cassettes/FatZebra_Customer/_delete/1_5_1.yml +113 -0
  77. data/spec/cassettes/FatZebra_Customer/_find/1_2_1.yml +111 -0
  78. data/spec/cassettes/FatZebra_Customer/_find/1_2_2.yml +111 -0
  79. data/spec/cassettes/FatZebra_Customer/_find/1_3_1.yml +111 -0
  80. data/spec/cassettes/FatZebra_Customer/_find/1_3_2.yml +111 -0
  81. data/spec/cassettes/FatZebra_Customer/_search/1_2_1.yml +56 -0
  82. data/spec/cassettes/FatZebra_Customer/_search/1_2_2.yml +56 -0
  83. data/spec/cassettes/FatZebra_Customer/_search/1_2_3.yml +56 -0
  84. data/spec/cassettes/FatZebra_Customer/_update/1_3_1.yml +114 -0
  85. data/spec/cassettes/FatZebra_Customer/_update/1_3_2.yml +114 -0
  86. data/spec/cassettes/FatZebra_Customer/_update/1_4_1.yml +114 -0
  87. data/spec/cassettes/FatZebra_Customer/_update/1_4_2.yml +114 -0
  88. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_1.yml +56 -0
  89. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_2.yml +56 -0
  90. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_3.yml +56 -0
  91. data/spec/cassettes/FatZebra_DirectCredit/_create/1_1_4.yml +56 -0
  92. data/spec/cassettes/FatZebra_DirectCredit/_create/validations/1_1_5_1.yml +59 -0
  93. data/spec/cassettes/FatZebra_DirectCredit/_delete/1_4_1.yml +109 -0
  94. data/spec/cassettes/FatZebra_DirectCredit/_find/1_2_1.yml +107 -0
  95. data/spec/cassettes/FatZebra_DirectCredit/_find/1_2_2.yml +107 -0
  96. data/spec/cassettes/FatZebra_DirectCredit/_search/1_3_1.yml +160 -0
  97. data/spec/cassettes/FatZebra_DirectCredit/_search/1_3_2.yml +160 -0
  98. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_1.yml +56 -0
  99. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_2.yml +56 -0
  100. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_3.yml +56 -0
  101. data/spec/cassettes/FatZebra_DirectDebit/_create/1_1_4.yml +56 -0
  102. data/spec/cassettes/FatZebra_DirectDebit/_create/validations/1_1_5_1.yml +59 -0
  103. data/spec/cassettes/FatZebra_DirectDebit/_delete/1_4_1.yml +109 -0
  104. data/spec/cassettes/FatZebra_DirectDebit/_find/1_2_1.yml +107 -0
  105. data/spec/cassettes/FatZebra_DirectDebit/_find/1_2_2.yml +107 -0
  106. data/spec/cassettes/FatZebra_DirectDebit/_search/1_3_1.yml +160 -0
  107. data/spec/cassettes/FatZebra_DirectDebit/_search/1_3_2.yml +160 -0
  108. data/spec/cassettes/FatZebra_Information/_ping/1_1_1.yml +54 -0
  109. data/spec/cassettes/FatZebra_Information/_ping/1_1_2.yml +54 -0
  110. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_7_1.yml +238 -0
  111. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_7_2.yml +238 -0
  112. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_8_1.yml +238 -0
  113. data/spec/cassettes/FatZebra_PaymentPlan/_active_/1_8_2.yml +238 -0
  114. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_1.yml +118 -0
  115. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_2.yml +118 -0
  116. data/spec/cassettes/FatZebra_PaymentPlan/_create/1_1_3.yml +118 -0
  117. data/spec/cassettes/FatZebra_PaymentPlan/_create/validations/1_1_4_1.yml +55 -0
  118. data/spec/cassettes/FatZebra_PaymentPlan/_delete/1_5_1.yml +172 -0
  119. data/spec/cassettes/FatZebra_PaymentPlan/_destroy/1_6_1.yml +172 -0
  120. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_1.yml +175 -0
  121. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_2.yml +175 -0
  122. data/spec/cassettes/FatZebra_PaymentPlan/_find/1_2_3.yml +175 -0
  123. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_6_1.yml +178 -0
  124. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_6_2.yml +178 -0
  125. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_7_1.yml +178 -0
  126. data/spec/cassettes/FatZebra_PaymentPlan/_suspend_/1_7_2.yml +178 -0
  127. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_1.yml +172 -0
  128. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_2.yml +172 -0
  129. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_3_3.yml +172 -0
  130. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_4_1.yml +178 -0
  131. data/spec/cassettes/FatZebra_PaymentPlan/_update/1_4_2.yml +178 -0
  132. data/spec/cassettes/FatZebra_Purchase/_capture/1_5_1.yml +111 -0
  133. data/spec/cassettes/FatZebra_Purchase/_capture/1_5_2.yml +111 -0
  134. data/spec/cassettes/FatZebra_Purchase/_capture/1_6_1.yml +111 -0
  135. data/spec/cassettes/FatZebra_Purchase/_capture/1_6_2.yml +111 -0
  136. data/spec/cassettes/FatZebra_Purchase/_create/1_1_1.yml +57 -0
  137. data/spec/cassettes/FatZebra_Purchase/_create/1_1_10.yml +57 -0
  138. data/spec/cassettes/FatZebra_Purchase/_create/1_1_11.yml +57 -0
  139. data/spec/cassettes/FatZebra_Purchase/_create/1_1_12.yml +57 -0
  140. data/spec/cassettes/FatZebra_Purchase/_create/1_1_2.yml +57 -0
  141. data/spec/cassettes/FatZebra_Purchase/_create/1_1_3.yml +57 -0
  142. data/spec/cassettes/FatZebra_Purchase/_create/1_1_4.yml +57 -0
  143. data/spec/cassettes/FatZebra_Purchase/_create/1_1_5.yml +57 -0
  144. data/spec/cassettes/FatZebra_Purchase/_create/1_1_6.yml +57 -0
  145. data/spec/cassettes/FatZebra_Purchase/_create/1_1_7.yml +57 -0
  146. data/spec/cassettes/FatZebra_Purchase/_create/1_1_8.yml +57 -0
  147. data/spec/cassettes/FatZebra_Purchase/_create/1_1_9.yml +57 -0
  148. data/spec/cassettes/FatZebra_Purchase/_find/1_2_1.yml +109 -0
  149. data/spec/cassettes/FatZebra_Purchase/_find/1_2_2.yml +109 -0
  150. data/spec/cassettes/FatZebra_Purchase/_find/1_2_3.yml +109 -0
  151. data/spec/cassettes/FatZebra_Purchase/_find/1_4_1.yml +109 -0
  152. data/spec/cassettes/FatZebra_Purchase/_find/1_4_2.yml +109 -0
  153. data/spec/cassettes/FatZebra_Purchase/_find/1_4_3.yml +109 -0
  154. data/spec/cassettes/FatZebra_Purchase/_refund/1_4_1.yml +111 -0
  155. data/spec/cassettes/FatZebra_Purchase/_refund/1_4_2.yml +111 -0
  156. data/spec/cassettes/FatZebra_Purchase/_refund/1_5_1.yml +111 -0
  157. data/spec/cassettes/FatZebra_Purchase/_refund/1_5_2.yml +111 -0
  158. data/spec/cassettes/FatZebra_Purchase/_search/1_3_1.yml +170 -0
  159. data/spec/cassettes/FatZebra_Purchase/_search/1_3_2.yml +170 -0
  160. data/spec/cassettes/FatZebra_Purchase/_search/1_3_3.yml +170 -0
  161. data/spec/cassettes/FatZebra_Purchase/_search/with_data/1_3_2_1.yml +164 -0
  162. data/spec/cassettes/FatZebra_Purchase/_search/with_data/1_3_2_2.yml +165 -0
  163. data/spec/cassettes/FatZebra_Purchase/_search/with_data/1_3_2_3.yml +164 -0
  164. data/spec/cassettes/FatZebra_Purchase/_search/without_data/1_3_1_1.yml +54 -0
  165. data/spec/cassettes/FatZebra_Purchase/_search/without_data/1_3_1_2.yml +54 -0
  166. data/spec/cassettes/FatZebra_Purchase/_search/without_data/1_3_1_3.yml +54 -0
  167. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_1.yml +613 -0
  168. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_2.yml +615 -0
  169. data/spec/cassettes/FatZebra_Purchase/_settlement/1_8_3.yml +617 -0
  170. data/spec/cassettes/FatZebra_Purchase/_void/1_6_1.yml +111 -0
  171. data/spec/cassettes/FatZebra_Purchase/_void/1_6_2.yml +111 -0
  172. data/spec/cassettes/FatZebra_Purchase/_void/1_6_3.yml +111 -0
  173. data/spec/cassettes/FatZebra_Purchase/_void/1_7_1.yml +111 -0
  174. data/spec/cassettes/FatZebra_Purchase/_void/1_7_2.yml +111 -0
  175. data/spec/cassettes/FatZebra_Purchase/_void/1_7_3.yml +111 -0
  176. data/spec/cassettes/FatZebra_Refund/_create/1_1_1.yml +111 -0
  177. data/spec/cassettes/FatZebra_Refund/_create/1_1_2.yml +111 -0
  178. data/spec/cassettes/FatZebra_Refund/_create/1_1_3.yml +111 -0
  179. data/spec/cassettes/FatZebra_Refund/_create/1_1_4.yml +111 -0
  180. data/spec/cassettes/FatZebra_Refund/_create/1_1_5.yml +111 -0
  181. data/spec/cassettes/FatZebra_Refund/_create/1_1_6.yml +111 -0
  182. data/spec/cassettes/FatZebra_Refund/_create/1_1_7.yml +111 -0
  183. data/spec/cassettes/FatZebra_Refund/_create/1_1_8.yml +111 -0
  184. data/spec/cassettes/FatZebra_Refund/_create/1_1_9.yml +111 -0
  185. data/spec/cassettes/FatZebra_Refund/_find/1_2_1.yml +163 -0
  186. data/spec/cassettes/FatZebra_Refund/_find/1_2_2.yml +163 -0
  187. data/spec/cassettes/FatZebra_Refund/_search/1_3_1.yml +281 -0
  188. data/spec/cassettes/FatZebra_Refund/_search/1_3_2.yml +281 -0
  189. data/spec/cassettes/FatZebra_Refund/_void/1_4_1.yml +165 -0
  190. data/spec/cassettes/FatZebra_Refund/_void/1_4_2.yml +165 -0
  191. data/spec/cassettes/FatZebra_Refund/_void/1_4_3.yml +165 -0
  192. data/spec/cassettes/FatZebra_WebHook/_create/1_1_1.yml +57 -0
  193. data/spec/cassettes/FatZebra_WebHook/_create/1_1_2.yml +57 -0
  194. data/spec/cassettes/FatZebra_WebHook/_create/1_1_3.yml +57 -0
  195. data/spec/cassettes/FatZebra_WebHook/_create/validations/1_1_4_1.yml +56 -0
  196. data/spec/cassettes/FatZebra_WebHook/_delete/1_4_1.yml +111 -0
  197. data/spec/cassettes/FatZebra_WebHook/_search/1_2_1.yml +222 -0
  198. data/spec/cassettes/FatZebra_WebHook/_search/1_2_2.yml +224 -0
  199. data/spec/cassettes/FatZebra_WebHook/_update/1_3_1.yml +112 -0
  200. data/spec/cassettes/FatZebra_WebHook/_update/1_3_2.yml +112 -0
  201. data/spec/fixtures/batch_test.csv +4 -0
  202. data/spec/lib/fat_zebra/bank_account_spec.rb +34 -0
  203. data/spec/lib/fat_zebra/batch_spec.rb +59 -0
  204. data/spec/lib/fat_zebra/card_spec.rb +41 -0
  205. data/spec/lib/fat_zebra/config_spec.rb +52 -0
  206. data/spec/lib/fat_zebra/customer_spec.rb +53 -0
  207. data/spec/lib/fat_zebra/direct_credit_spec.rb +53 -0
  208. data/spec/lib/fat_zebra/direct_debit_spec.rb +53 -0
  209. data/spec/lib/fat_zebra/fat_zebra_object_spec.rb +116 -0
  210. data/spec/lib/fat_zebra/information_spec.rb +13 -0
  211. data/spec/lib/fat_zebra/payment_plan_spec.rb +94 -0
  212. data/spec/lib/fat_zebra/purchase_spec.rb +92 -0
  213. data/spec/lib/fat_zebra/refund_spec.rb +72 -0
  214. data/spec/lib/fat_zebra/util_spec.rb +24 -0
  215. data/spec/lib/fat_zebra/validation_spec.rb +22 -0
  216. data/spec/lib/fat_zebra/web_hook_spec.rb +50 -0
  217. data/spec/spec_helper.rb +49 -3
  218. data/spec/support/payloads.rb +43 -0
  219. metadata +238 -65
  220. data/FatZebra.gemspec +0 -31
  221. data/lib/fat_zebra/constants.rb +0 -2
  222. data/lib/fat_zebra/gateway.rb +0 -292
  223. data/lib/fat_zebra/models/base.rb +0 -33
  224. data/lib/fat_zebra/models/card.rb +0 -49
  225. data/lib/fat_zebra/models/purchase.rb +0 -185
  226. data/lib/fat_zebra/models/refund.rb +0 -46
  227. data/lib/fat_zebra/models/response.rb +0 -33
  228. data/lib/rest-client/request_ext.rb +0 -15
  229. data/spec/config_spec.rb +0 -37
  230. data/spec/gateway_spec.rb +0 -120
  231. data/spec/models/purchase_spec.rb +0 -55
  232. data/spec/models/refund_spec.rb +0 -9
  233. data/spec/models/response_spec.rb +0 -25
@@ -1,38 +1,78 @@
1
1
  module FatZebra
2
+ ##
3
+ # == FatZebra \Config
4
+ #
5
+ # Represent the FatZebra configuration for the API
2
6
  class Config
3
7
 
4
- # Returns the config values in a hash
5
- def config
6
- @config ||= {}
7
- end
8
+ ##
9
+ # @return [String] Username
10
+ attr_accessor :username
8
11
 
9
- [:username, :token, :test_mode, :sandbox, :options, :gateway, :proxy].each do |attr|
10
- define_method "#{attr}" do |value = nil|
11
- if value.nil?
12
- config[attr.to_s]
13
- else
14
- config[attr.to_s] = value
15
- end
16
- end
17
- end
12
+ ##
13
+ # @return [String] Token
14
+ attr_accessor :token
15
+
16
+ ##
17
+ # @return [String] Test mode
18
+ attr_accessor :test_mode
19
+
20
+ ##
21
+ # @return [String] Sandbox
22
+ attr_accessor :sandbox
23
+
24
+ ##
25
+ # @return [String] Options
26
+ attr_accessor :options
18
27
 
19
- # Validates the configuration
20
- def validate!
21
- @errors = []
28
+ ##
29
+ # @return [String] Gateway url
30
+ attr_accessor :gateway
22
31
 
23
- @errors << "Username is required" if self.username.nil?
24
- @errors << "Token is required" if self.token.nil?
32
+ ##
33
+ # @return [String] Proxy url
34
+ attr_accessor :proxy
25
35
 
26
- raise "The following errors were raised during configuration: #{@errors.join(", ")}}" unless @errors.empty?
36
+ ##
37
+ # @return [String] http secure
38
+ attr_accessor :http_secure
39
+
40
+ ##
41
+ # @return [String] api version
42
+ attr_accessor :api_version
43
+
44
+ ##
45
+ # @param [Hash{Symbol=>Object}]
46
+ # Initialize and validate the configuration
47
+ def initialize(options = {})
48
+ self.token = options[:token]
49
+ self.username = options[:username]
50
+ self.gateway = options[:gateway] || 'gateway.fatzebra.com.au'
51
+ self.test_mode = options[:test_mode] || false
52
+ self.http_secure = options[:http_secure] || true
53
+ self.api_version = options[:api_version] || 'v1.0'
54
+ self.sandbox = options[:sandbox]
55
+ self.options = options[:options]
56
+ self.proxy = options[:proxy]
27
57
  end
28
58
 
29
- def self.from_hash(hash)
30
- c = new
31
- hash.each do |key, value|
32
- c.send key, value
59
+ ##
60
+ # validate the configuration
61
+ # Raise when configuration is not valid
62
+ # @return [Boolean] true
63
+ def valid!
64
+ %i[username token].each do |field|
65
+ validate_presence(field)
33
66
  end
34
67
 
35
- c
68
+ true
69
+ end
70
+
71
+ private
72
+
73
+ def validate_presence(field)
74
+ raise FatZebra::ConfigurationError, "#{field} can't be blank" if send(field).nil? || send(field).empty?
36
75
  end
76
+
37
77
  end
38
- end
78
+ end
@@ -0,0 +1,27 @@
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
+ extend FatZebra::APIOperation::Search
15
+ extend FatZebra::APIOperation::Find
16
+
17
+ include FatZebra::APIOperation::Save
18
+ include FatZebra::APIOperation::Delete
19
+
20
+ validates :first_name, required: true, on: :create
21
+ validates :last_name, required: true, on: :create
22
+ validates :reference, required: true, on: :create
23
+ validates :email, required: true, on: :create
24
+ validates :ip_address, required: true, on: :create
25
+
26
+ end
27
+ end
@@ -0,0 +1,27 @@
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
+ extend FatZebra::APIOperation::Find
15
+ extend FatZebra::APIOperation::Search
16
+
17
+ include FatZebra::APIOperation::Save
18
+ include FatZebra::APIOperation::Delete
19
+
20
+ validates :description, required: true, on: :create
21
+ validates :amount, required: true, class_type: Integer, on: :create
22
+ validates :bsb, required: true, on: :create
23
+ validates :account_name, required: true, on: :create
24
+ validates :account_number, required: true, on: :create
25
+
26
+ end
27
+ end
@@ -0,0 +1,27 @@
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
+ extend FatZebra::APIOperation::Find
15
+ extend FatZebra::APIOperation::Search
16
+
17
+ include FatZebra::APIOperation::Save
18
+ include FatZebra::APIOperation::Delete
19
+
20
+ validates :description, required: true, on: :create
21
+ validates :amount, required: true, class_type: Integer, on: :create
22
+ validates :bsb, required: true, on: :create
23
+ validates :account_name, required: true, on: :create
24
+ validates :account_number, required: true, on: :create
25
+
26
+ end
27
+ end
@@ -1,5 +1,19 @@
1
1
  module FatZebra
2
- class InvalidArgumentError < StandardError; end
3
- class RequestError < StandardError; end
4
- class GatewayError < StandardError; end
5
- end
2
+
3
+ ##
4
+ # Configuration Error
5
+ class ConfigurationError < StandardError; end
6
+
7
+ ##
8
+ # Request to API Error
9
+ class RequestError < StandardError; end
10
+
11
+ ##
12
+ # Validations for the request
13
+ class RequestValidationError < StandardError; end
14
+
15
+ ##
16
+ # Method unknown for the request
17
+ class UnknownRequestMethod < StandardError; end
18
+
19
+ end
@@ -0,0 +1,179 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Object
4
+ #
5
+ # Define the API objects
6
+ class FatZebraObject
7
+ extend Validation
8
+
9
+ ##
10
+ # @return [Hash] JSON parsed response
11
+ attr_reader :raw
12
+
13
+ ##
14
+ # @return [Hash] JSON parsed response
15
+ attr_reader :data
16
+
17
+ attr_reader :successful
18
+ alias successful? successful
19
+
20
+ attr_reader :errors
21
+
22
+ class << self
23
+
24
+ ##
25
+ # Initialize from the API response
26
+ #
27
+ # @return [FatZebra::FatZebraObject]
28
+ def initialize_from(response)
29
+ object = new
30
+
31
+ object.load_response_api(response.is_a?(Hash) ? response : JSON.parse(response))
32
+
33
+ if object.raw['response']
34
+ if object.raw['response'].is_a?(Array)
35
+ object.raw['response'].each { |response_object| object.add_data(initialize_from(response_object)) }
36
+ else
37
+ object.update_attributes(object.raw['response'])
38
+ end
39
+ else
40
+ object.update_attributes(object.raw)
41
+ end
42
+
43
+ object
44
+ end
45
+
46
+ end
47
+
48
+ ##
49
+ # Initialize and create accessor for values
50
+ #
51
+ # @params [Hash] values
52
+ def initialize(values = {})
53
+ @data = []
54
+ @values = {}
55
+
56
+ update_attributes(values)
57
+ end
58
+
59
+ ##
60
+ # Update the object based on the response from the API
61
+ # Remove and new acessor
62
+ #
63
+ # @param [Hash] response
64
+ #
65
+ # @return [FatZebra::FatZebraObject]
66
+ def update_from(response)
67
+ load_response_api(response.is_a?(Hash) ? response : JSON.parse(response))
68
+
69
+ # attributes to remove
70
+ (@values.keys - raw['response'].keys).each { |key| remove_accessor(key) }
71
+
72
+ update_attributes(raw['response'])
73
+
74
+ self
75
+ end
76
+
77
+ ##
78
+ # get attribute value
79
+ def [](key)
80
+ @values[key.to_sym]
81
+ end
82
+
83
+ ##
84
+ # set attribute value
85
+ def []=(key, value)
86
+ send(:"#{key}=", value)
87
+ end
88
+
89
+ ##
90
+ # @return [Array] all the keys
91
+ def keys
92
+ @values.keys
93
+ end
94
+
95
+ ##
96
+ # @return [Hash] values to hash
97
+ def to_hash
98
+ @values
99
+ end
100
+
101
+ ##
102
+ # @return [JSON] values to JSON
103
+ def to_json
104
+ JSON.generate(@values)
105
+ end
106
+
107
+ ##
108
+ # Update the attribute and add accessor for new attributes
109
+ #
110
+ # @param [Hash] values
111
+ def update_attributes(attributes)
112
+ attributes.each do |(key, value)|
113
+ add_accessor(key, value)
114
+ end
115
+ end
116
+
117
+ ##
118
+ # Load the root components for the API response
119
+ #
120
+ # @param [Hash] values
121
+ def load_response_api(response)
122
+ @raw = response
123
+ @successful = response['successful']
124
+ @errors = response['errors']
125
+ end
126
+
127
+ ##
128
+ # Add data for sub-object
129
+ #
130
+ # @param [Object] data
131
+ def add_data(data)
132
+ @data << data
133
+ end
134
+
135
+ protected
136
+
137
+ def inspect
138
+ id_string = respond_to?(:id) && !id.nil? ? " id=#{id}" : ''
139
+ "#<#{self.class}:0x#{object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
140
+ end
141
+
142
+ def method_missing(name, *args)
143
+ super unless name.to_s.end_with?('=')
144
+
145
+ attribute = name.to_s[0...-1].to_sym
146
+ value = args.first
147
+
148
+ add_accessor(attribute, value)
149
+ end
150
+
151
+ private
152
+
153
+ def add_accessors(keys, payload = raw)
154
+ keys.each do |key|
155
+ add_accessor(key, payload[key])
156
+ end
157
+ end
158
+
159
+ def add_accessor(name, value)
160
+ @values[name] = value
161
+
162
+ define_singleton_method(name) { @values[name] }
163
+ define_singleton_method(:"#{name}=") do |v|
164
+ @values[name] = v
165
+ end
166
+
167
+ define_singleton_method(:"#{name}?") { value } if [FalseClass, TrueClass].include?(value.class)
168
+ end
169
+
170
+ def remove_accessor(name)
171
+ @values.delete(name)
172
+
173
+ singleton_class.class_eval { remove_method name.to_sym } if singleton_methods.include?(name.to_sym)
174
+ singleton_class.class_eval { remove_method "#{name}=".to_sym } if singleton_methods.include?("#{name}=".to_sym)
175
+ singleton_class.class_eval { remove_method "#{name}?".to_sym } if singleton_methods.include?("#{name}?".to_sym)
176
+ end
177
+
178
+ end
179
+ end
@@ -0,0 +1,25 @@
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
+ ##
13
+ # Ping the API
14
+ #
15
+ # @param [String] echo param
16
+ #
17
+ # @return [FatZebra::Information] response
18
+ def ping(nonce = SecureRandom.hex)
19
+ response = request(:get, '/ping', echo: nonce)
20
+ initialize_from(response)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,62 @@
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
+ extend FatZebra::APIOperation::Find
16
+
17
+ include FatZebra::APIOperation::Save
18
+ include FatZebra::APIOperation::Delete
19
+
20
+ validates :payment_method, required: true, on: :create
21
+ validates :customer, required: true, on: :create
22
+ validates :reference, required: true, on: :create
23
+ validates :setup_fee, required: true, on: :create
24
+ validates :amount, required: true, on: :create
25
+ validates :start_date, required: true, on: :create
26
+ validates :frequency, required: true, on: :create
27
+ validates :anniversary, required: true, on: :create
28
+ validates :total_count, required: true, on: :create
29
+ validates :total_amount, required: true, on: :create
30
+
31
+ ##
32
+ # Suspend a payment plan
33
+ #
34
+ # @param [Hash] params
35
+ # @param [Hash] options for the request, and configurations (Optional)
36
+ #
37
+ # @return [FatZebra::PaymentPlan]
38
+ def suspend!(params = {}, options = {})
39
+ params = {
40
+ new_status: 'Suspended'
41
+ }.merge(params)
42
+
43
+ save(params, options)
44
+ end
45
+
46
+ ##
47
+ # Activate a payment plan
48
+ #
49
+ # @param [Hash] params
50
+ # @param [Hash] options for the request, and configurations (Optional)
51
+ #
52
+ # @return [FatZebra::PaymentPlan]
53
+ def active!(params = {}, options = {})
54
+ params = {
55
+ new_status: 'Active'
56
+ }.merge(params)
57
+
58
+ save(params, options)
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,99 @@
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
+ extend FatZebra::APIOperation::Find
18
+ extend FatZebra::APIOperation::Search
19
+
20
+ include FatZebra::APIOperation::Save
21
+ include FatZebra::APIOperation::Void
22
+
23
+ validates :card_number, required: { unless: %i[card_token wallet] }, on: :create
24
+ validates :card_token, required: { unless: %i[card_number wallet] }, on: :create
25
+ validates :card_expiry, required: { unless: %i[card_token wallet] }, on: :create
26
+ validates :amount, required: true, class_type: Integer, on: :create
27
+ validates :reference, required: true, on: :create
28
+ validates :customer_ip, required: true, on: :create
29
+
30
+ validates :from, required: true, on: :settlement
31
+ validates :to, required: true, on: :settlement
32
+
33
+ class << self
34
+
35
+ ##
36
+ # Create a payment plan
37
+ # Default currency to AUD
38
+ #
39
+ # @param [Hash] params
40
+ # @param [Hash] options for the request, and configurations (Optional)
41
+ #
42
+ # @return [FatZebra::PaymentPlan]
43
+ def create(params, options = {})
44
+ params[:currency] ||= 'AUD'
45
+
46
+ super(params, options)
47
+ end
48
+
49
+ ##
50
+ # Return all the settlements
51
+ #
52
+ # @param [Hash] params (from and to are date required)
53
+ # @param [Hash] options for the request, and configurations (Optional)
54
+ #
55
+ # @return [FatZebra::Purchase]
56
+ def settlement(params = {}, options = {})
57
+ valid!(params, :settlement)
58
+
59
+ params = Util.format_dates_in_hash(params)
60
+
61
+ response = request(:get, "#{resource_path}/settlement", params, options)
62
+ initialize_from(response)
63
+ end
64
+
65
+ end
66
+
67
+ ##
68
+ # Refunds the current purchase
69
+ #
70
+ # @param [Hash] params for refund API (Optional)
71
+ # @param [Hash] options for the request, and configurations (Optional)
72
+ #
73
+ # @return [FatZebra::Refund] object
74
+ def refund(params = {}, options = {})
75
+ Refund.create({
76
+ transaction_id: id,
77
+ amount: amount,
78
+ reference: reference
79
+ }.merge(params), options)
80
+ end
81
+
82
+ ##
83
+ # Captures an authorization
84
+ #
85
+ # @param [Hash] params for capture API (Optional)
86
+ # @param [Hash] options for the request, and configurations (Optional)
87
+ #
88
+ # @return [Response] Purchase response object
89
+ def capture(params = {}, options = {})
90
+ params = {
91
+ amount: amount
92
+ }.merge(params)
93
+
94
+ response = request(:post, resource_path("purchases/#{id}/capture"), params, options)
95
+ update_from(response)
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,25 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Refund
4
+ #
5
+ # Manage refund for the API
6
+ #
7
+ # * search
8
+ # * save
9
+ # * find
10
+ # * void
11
+ #
12
+ class Refund < APIResource
13
+
14
+ extend FatZebra::APIOperation::Find
15
+ extend FatZebra::APIOperation::Search
16
+
17
+ include FatZebra::APIOperation::Save
18
+ include FatZebra::APIOperation::Void
19
+
20
+ validates :transaction_id, required: true, on: :create
21
+ validates :amount, required: true, on: :create
22
+ validates :reference, required: true, on: :create
23
+
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Request \Multipart \Epilogue
4
+ #
5
+ # Add the epilogue to the multipart
6
+ class Request
7
+ module Multipart
8
+ class Epilogue
9
+ include Part
10
+
11
+ def initialize
12
+ @io = StringIO.new(footer)
13
+ end
14
+
15
+ private
16
+
17
+ def footer
18
+ "--#{boundary}--#{LINE_BREAK}"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Request \Multipart \FileIO
4
+ #
5
+ # Add file to the multipart
6
+ class Request
7
+ module Multipart
8
+ class FileIO
9
+ include Part
10
+
11
+ attr_reader :length, :stream
12
+
13
+ def initialize(options)
14
+ @filename = options[:filename]
15
+ @file = options[:file]
16
+ @content_type = options[:content_type]
17
+ @options = options
18
+ @file_size = File.size(@file)
19
+ @footer = LINE_BREAK
20
+ @length = header.bytesize + @file_size + @footer.length
21
+ @io = Stream.new(StringIO.new(header), @file, StringIO.new(@footer))
22
+ end
23
+
24
+ def header
25
+ part = []
26
+ part << "--#{boundary}"
27
+ part << "Content-Disposition: form-data; name=\"#{@filename}\"; filename=\"#{@filename}\""
28
+ part << "Content-Length: #{@size}"
29
+ part << "Content-Type: #{@content_type}"
30
+ part << 'Content-Transfer-Encoding: binary'
31
+ part << LINE_BREAK
32
+
33
+ part.join(LINE_BREAK)
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ module FatZebra
2
+ ##
3
+ # == FatZebra \Request \Multipart \Param
4
+ #
5
+ # Add param to the multipart
6
+ class Request
7
+ module Multipart
8
+ class Param
9
+ include Part
10
+
11
+ def initialize(name, value)
12
+ @name = name
13
+ @value = value
14
+ @io = StringIO.new(part)
15
+ end
16
+
17
+ def length
18
+ part.bytesize
19
+ end
20
+
21
+ private
22
+
23
+ def part
24
+ part = []
25
+ part << "--#{boundary}"
26
+ part << "Content-Disposition: form-data; name=\"#{@name}\""
27
+ part << ''
28
+ part << @value
29
+
30
+ part.join(LINE_BREAK)
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
37
+ end