mollie-api-ruby 3.1.5 → 4.0.0.pre.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +0 -3
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +63 -119
  5. data/bin/console +15 -0
  6. data/bin/setup +8 -0
  7. data/docs/migration_v2_2_x.md +67 -0
  8. data/docs/migration_v3_x.md +227 -0
  9. data/examples/chargebacks/get.rb +4 -0
  10. data/examples/chargebacks/list.rb +1 -0
  11. data/{website-docs → examples}/connect/authorize.rb +3 -2
  12. data/{website-docs → examples}/connect/tokens.rb +1 -1
  13. data/examples/customers/create-payment.rb +6 -0
  14. data/examples/customers/create.rb +5 -0
  15. data/examples/customers/delete.rb +1 -0
  16. data/examples/customers/get.rb +1 -0
  17. data/examples/customers/list-payments.rb +1 -0
  18. data/examples/customers/list.rb +1 -0
  19. data/examples/customers/update.rb +4 -0
  20. data/examples/invoices/get.rb +1 -0
  21. data/examples/invoices/list.rb +1 -0
  22. data/examples/mandates/create.rb +9 -0
  23. data/examples/mandates/delete.rb +1 -0
  24. data/examples/mandates/get.rb +1 -0
  25. data/examples/mandates/list.rb +1 -0
  26. data/examples/methods/get.rb +4 -0
  27. data/examples/methods/list.rb +4 -0
  28. data/examples/organisations/get-current.rb +1 -0
  29. data/examples/organisations/get.rb +1 -0
  30. data/examples/payments/create.rb +9 -0
  31. data/examples/payments/delete.rb +1 -0
  32. data/examples/payments/get-customer.rb +2 -0
  33. data/examples/payments/get-mandate.rb +2 -0
  34. data/examples/payments/get-settlement.rb +2 -0
  35. data/examples/payments/get-subscription.rb +2 -0
  36. data/examples/payments/get.rb +1 -0
  37. data/examples/payments/list.rb +1 -0
  38. data/examples/payments/webhook.rb +12 -0
  39. data/examples/permissions/get.rb +1 -0
  40. data/examples/permissions/list.rb +1 -0
  41. data/examples/profiles/create.rb +8 -0
  42. data/examples/profiles/delete.rb +1 -0
  43. data/examples/profiles/get.rb +1 -0
  44. data/examples/profiles/list-chargebacks.rb +2 -0
  45. data/examples/profiles/list-methods.rb +2 -0
  46. data/examples/profiles/list-payments.rb +2 -0
  47. data/examples/profiles/list-refunds.rb +2 -0
  48. data/examples/profiles/list.rb +1 -0
  49. data/examples/profiles/update.rb +5 -0
  50. data/examples/refunds/create.rb +5 -0
  51. data/examples/refunds/delete.rb +4 -0
  52. data/examples/refunds/get-payment.rb +2 -0
  53. data/examples/refunds/get.rb +4 -0
  54. data/examples/refunds/list.rb +1 -0
  55. data/examples/settlements/get.rb +1 -0
  56. data/examples/settlements/list-chargebacks.rb +1 -0
  57. data/examples/settlements/list-payments.rb +1 -0
  58. data/examples/settlements/list-refunds.rb +1 -0
  59. data/examples/settlements/list.rb +1 -0
  60. data/examples/settlements/next.rb +1 -0
  61. data/examples/settlements/open.rb +1 -0
  62. data/examples/subscriptions/create.rb +8 -0
  63. data/examples/subscriptions/delete.rb +4 -0
  64. data/examples/subscriptions/get.rb +4 -0
  65. data/examples/subscriptions/list.rb +1 -0
  66. data/examples/subscriptions/update.rb +5 -0
  67. data/lib/cacert.pem +168 -48
  68. data/lib/mollie.rb +1 -3
  69. data/lib/mollie/amount.rb +20 -0
  70. data/lib/mollie/base.rb +9 -8
  71. data/lib/mollie/chargeback.rb +25 -15
  72. data/lib/mollie/client.rb +33 -13
  73. data/lib/mollie/customer.rb +9 -14
  74. data/lib/mollie/customer/mandate.rb +17 -5
  75. data/lib/mollie/customer/subscription.rb +14 -15
  76. data/lib/mollie/exception.rb +15 -3
  77. data/lib/mollie/invoice.rb +30 -26
  78. data/lib/mollie/list.rb +27 -18
  79. data/lib/mollie/method.rb +17 -25
  80. data/lib/mollie/organization.rb +5 -11
  81. data/lib/mollie/payment.rb +89 -61
  82. data/lib/mollie/permission.rb +0 -1
  83. data/lib/mollie/profile.rb +18 -13
  84. data/lib/mollie/refund.rb +27 -7
  85. data/lib/mollie/settlement.rb +50 -9
  86. data/lib/mollie/util.rb +11 -0
  87. data/lib/mollie/version.rb +1 -1
  88. data/mollie-api-ruby.gemspec +0 -7
  89. data/test/mollie/amount_test.rb +30 -0
  90. data/test/mollie/base_test.rb +44 -44
  91. data/test/mollie/chargeback_test.rb +78 -17
  92. data/test/mollie/client_test.rb +29 -12
  93. data/test/mollie/customer/mandate_test.rb +85 -9
  94. data/test/mollie/customer/payment_test.rb +2 -2
  95. data/test/mollie/customer/subscription_test.rb +71 -20
  96. data/test/mollie/customer_test.rb +17 -89
  97. data/test/mollie/invoice_test.rb +40 -24
  98. data/test/mollie/list_test.rb +62 -18
  99. data/test/mollie/method_test.rb +2 -8
  100. data/test/mollie/organization_test.rb +28 -23
  101. data/test/mollie/payment/chargeback_test.rb +2 -3
  102. data/test/mollie/payment/refund_test.rb +2 -3
  103. data/test/mollie/payment_test.rb +272 -86
  104. data/test/mollie/permission_test.rb +0 -2
  105. data/test/mollie/profile_test.rb +129 -35
  106. data/test/mollie/refund_test.rb +90 -10
  107. data/test/mollie/settlement/chargeback_test.rb +2 -4
  108. data/test/mollie/settlement/payment_test.rb +2 -2
  109. data/test/mollie/settlement/refund_test.rb +2 -3
  110. data/test/mollie/settlement_test.rb +199 -98
  111. data/test/mollie/util_test.rb +31 -0
  112. metadata +96 -239
  113. data/examples/apis/api_docs.rb +0 -37
  114. data/examples/apis/chargebacks.rb +0 -17
  115. data/examples/apis/connect.rb +0 -58
  116. data/examples/apis/customers.rb +0 -116
  117. data/examples/apis/invoices.rb +0 -38
  118. data/examples/apis/issuers.rb +0 -35
  119. data/examples/apis/mandates.rb +0 -83
  120. data/examples/apis/methods.rb +0 -50
  121. data/examples/apis/organizations.rb +0 -16
  122. data/examples/apis/payments.rb +0 -174
  123. data/examples/apis/permissions.rb +0 -32
  124. data/examples/apis/profiles.rb +0 -126
  125. data/examples/apis/refunds.rb +0 -17
  126. data/examples/apis/settlements.rb +0 -84
  127. data/examples/apis/subscriptions.rb +0 -165
  128. data/examples/config.ru +0 -57
  129. data/examples/public/images/collapse.gif +0 -0
  130. data/examples/public/images/expand.gif +0 -0
  131. data/examples/public/images/explorer_icons.png +0 -0
  132. data/examples/public/images/favicon-16x16.png +0 -0
  133. data/examples/public/images/favicon-32x32.png +0 -0
  134. data/examples/public/images/favicon.ico +0 -0
  135. data/examples/public/images/logo_small.png +0 -0
  136. data/examples/public/images/pet_store_api.png +0 -0
  137. data/examples/public/images/throbber.gif +0 -0
  138. data/examples/public/images/wordnik_api.png +0 -0
  139. data/examples/public/index.html +0 -101
  140. data/examples/public/javascripts/lib/backbone-min.js +0 -1
  141. data/examples/public/javascripts/lib/es5-shim.js +0 -1
  142. data/examples/public/javascripts/lib/handlebars-4.0.5.js +0 -3
  143. data/examples/public/javascripts/lib/highlight.9.1.0.pack.js +0 -1
  144. data/examples/public/javascripts/lib/highlight.9.1.0.pack_extended.js +0 -1
  145. data/examples/public/javascripts/lib/jquery-1.8.0.min.js +0 -3
  146. data/examples/public/javascripts/lib/jquery.ba-bbq.min.js +0 -1
  147. data/examples/public/javascripts/lib/jquery.slideto.min.js +0 -1
  148. data/examples/public/javascripts/lib/jquery.wiggle.min.js +0 -1
  149. data/examples/public/javascripts/lib/js-yaml.min.js +0 -2
  150. data/examples/public/javascripts/lib/jsoneditor.min.js +0 -5
  151. data/examples/public/javascripts/lib/lodash.min.js +0 -2
  152. data/examples/public/javascripts/lib/marked.js +0 -1
  153. data/examples/public/javascripts/lib/object-assign-pollyfill.js +0 -1
  154. data/examples/public/javascripts/lib/sanitize-html.min.js +0 -4
  155. data/examples/public/javascripts/lib/swagger-oauth.js +0 -1
  156. data/examples/public/javascripts/swagger-ui.js +0 -25378
  157. data/examples/public/javascripts/swagger-ui.min.js +0 -15
  158. data/examples/public/javascripts/swagger_docs.js +0 -14
  159. data/examples/public/o2c.html +0 -20
  160. data/examples/public/stylesheets/reset.css +0 -1
  161. data/examples/public/stylesheets/screen.css +0 -1545
  162. data/examples/public/stylesheets/swagger_docs.css +0 -4
  163. data/examples/public/stylesheets/typography.css +0 -0
  164. data/lib/mollie/issuer.rb +0 -5
  165. data/lib/mollie/profile/api_key.rb +0 -19
  166. data/lib/mollie/relation.rb +0 -36
  167. data/test/mollie/issuer_test.rb +0 -19
  168. data/test/mollie/profile/apikey_test.rb +0 -31
  169. data/website-docs/chargebacks/list-all.rb +0 -12
  170. data/website-docs/customers/create-payment.rb +0 -13
  171. data/website-docs/customers/create.rb +0 -12
  172. data/website-docs/customers/delete.rb +0 -10
  173. data/website-docs/customers/get.rb +0 -10
  174. data/website-docs/customers/list-payments.rb +0 -10
  175. data/website-docs/customers/list.rb +0 -12
  176. data/website-docs/customers/update.rb +0 -11
  177. data/website-docs/invoices/get.rb +0 -10
  178. data/website-docs/invoices/list.rb +0 -12
  179. data/website-docs/issuers/get.rb +0 -10
  180. data/website-docs/issuers/list.rb +0 -12
  181. data/website-docs/mandates/create.rb +0 -16
  182. data/website-docs/mandates/delete.rb +0 -10
  183. data/website-docs/mandates/get.rb +0 -10
  184. data/website-docs/mandates/list.rb +0 -12
  185. data/website-docs/methods/get.rb +0 -10
  186. data/website-docs/methods/list.rb +0 -12
  187. data/website-docs/organisations/get.rb +0 -10
  188. data/website-docs/payments/create-refund.rb +0 -14
  189. data/website-docs/payments/create.rb +0 -16
  190. data/website-docs/payments/delete-refund.rb +0 -13
  191. data/website-docs/payments/delete.rb +0 -12
  192. data/website-docs/payments/get-chargeback.rb +0 -11
  193. data/website-docs/payments/get-refund.rb +0 -11
  194. data/website-docs/payments/get.rb +0 -10
  195. data/website-docs/payments/list-chargeback.rb +0 -13
  196. data/website-docs/payments/list-refunds.rb +0 -13
  197. data/website-docs/payments/list.rb +0 -12
  198. data/website-docs/payments/payment-webhook.rb +0 -21
  199. data/website-docs/permissions/get.rb +0 -10
  200. data/website-docs/permissions/list.rb +0 -12
  201. data/website-docs/profiles/create.rb +0 -15
  202. data/website-docs/profiles/delete.rb +0 -10
  203. data/website-docs/profiles/get-key.rb +0 -11
  204. data/website-docs/profiles/get.rb +0 -10
  205. data/website-docs/profiles/list-keys.rb +0 -13
  206. data/website-docs/profiles/list.rb +0 -12
  207. data/website-docs/profiles/reset-key.rb +0 -13
  208. data/website-docs/profiles/update.rb +0 -12
  209. data/website-docs/refunds/list.rb +0 -12
  210. data/website-docs/settlements/get.rb +0 -10
  211. data/website-docs/settlements/list-chargebacks.rb +0 -13
  212. data/website-docs/settlements/list-payments.rb +0 -13
  213. data/website-docs/settlements/list-refunds.rb +0 -13
  214. data/website-docs/settlements/list.rb +0 -12
  215. data/website-docs/settlements/next.rb +0 -9
  216. data/website-docs/settlements/open.rb +0 -9
  217. data/website-docs/subscriptions/create.rb +0 -14
  218. data/website-docs/subscriptions/delete.rb +0 -10
  219. data/website-docs/subscriptions/get.rb +0 -10
  220. data/website-docs/subscriptions/list.rb +0 -12
data/lib/mollie.rb CHANGED
@@ -13,21 +13,19 @@ require 'mollie/util'
13
13
  require 'mollie/version'
14
14
 
15
15
  require 'mollie/base'
16
- require 'mollie/relation'
16
+ require 'mollie/amount'
17
17
  require 'mollie/chargeback'
18
18
  require 'mollie/client'
19
19
  require 'mollie/customer'
20
20
  require 'mollie/customer/mandate'
21
21
  require 'mollie/customer/subscription'
22
22
  require 'mollie/invoice'
23
- require 'mollie/issuer'
24
23
  require 'mollie/list'
25
24
  require 'mollie/method'
26
25
  require 'mollie/organization'
27
26
  require 'mollie/payment'
28
27
  require 'mollie/permission'
29
28
  require 'mollie/profile'
30
- require 'mollie/profile/api_key'
31
29
  require 'mollie/refund'
32
30
  require 'mollie/settlement'
33
31
 
@@ -0,0 +1,20 @@
1
+ module Mollie
2
+ class Amount < Base
3
+ attr_accessor :value, :currency
4
+
5
+ def initialize(attributes)
6
+ super unless attributes.nil?
7
+ end
8
+
9
+ def value=(val)
10
+ @value = BigDecimal.new(val.to_s)
11
+ end
12
+
13
+ def to_h
14
+ {
15
+ value: attributes['value'],
16
+ currency: attributes['currency']
17
+ }
18
+ end
19
+ end
20
+ end
data/lib/mollie/base.rb CHANGED
@@ -20,10 +20,11 @@ module Mollie
20
20
  end
21
21
  end
22
22
 
23
- def all(*args)
24
- options = args.last.is_a?(Hash) ? args.pop : {}
25
- offset, limit = args
26
- request("GET", nil, {}, { offset: offset || 0, count: limit || 50 }.merge(options)) do |response|
23
+ def all(options = {})
24
+ id = nil
25
+ data = {}
26
+
27
+ request("GET", id, data, options) do |response|
27
28
  Mollie::List.new(response, self)
28
29
  end
29
30
  end
@@ -35,7 +36,7 @@ module Mollie
35
36
  end
36
37
 
37
38
  def update(id, data = {})
38
- request("POST", id, data) do |response|
39
+ request("PATCH", id, data) do |response|
39
40
  new(response)
40
41
  end
41
42
  end
@@ -44,9 +45,9 @@ module Mollie
44
45
  request("DELETE", id, options)
45
46
  end
46
47
 
47
- def request(method, id = 0, data = {}, query = {})
48
- parent_id = query.delete(self.parent_id) || data.delete(self.parent_id)
49
- response = Mollie::Client.instance.perform_http_call(method, resource_name(parent_id), id, data, query)
48
+ def request(method, id = 0, data = {}, options = {})
49
+ parent_id = options.delete(self.parent_id) || data.delete(self.parent_id)
50
+ response = Mollie::Client.instance.perform_http_call(method, resource_name(parent_id), id, data, options)
50
51
  yield(response) if block_given?
51
52
  end
52
53
 
@@ -4,33 +4,43 @@ module Mollie
4
4
  attr_accessor :id,
5
5
  :payment,
6
6
  :amount,
7
- :chargeback_datetime,
8
- :settlement_id,
9
- :reversed_datetime
7
+ :settlement_amount,
8
+ :created_at,
9
+ :payment_id,
10
+ :reversed_at,
11
+ :_links
10
12
 
13
+ alias_method :links, :_links
11
14
 
12
15
  def reversed?
13
- !!reversed_datetime
16
+ !!reversed_at
14
17
  end
15
18
 
16
- def reversed_datetime=(reversed_datetime)
17
- @reversed_datetime = Time.parse(reversed_datetime) rescue nil
19
+ def reversed_at=(reversed_at)
20
+ @reversed_at = Time.parse(reversed_at) rescue nil
18
21
  end
19
22
 
20
- def chargeback_datetime=(chargeback_datetime)
21
- @chargeback_datetime = Time.parse(chargeback_datetime) rescue nil
23
+ def created_at=(created_at)
24
+ @created_at = Time.parse(created_at) rescue nil
22
25
  end
23
26
 
24
27
  def amount=(amount)
25
- @amount = BigDecimal.new(amount.to_s) if amount
28
+ @amount = Mollie::Amount.new(amount)
26
29
  end
27
30
 
28
- def payment=(payment)
29
- if payment.is_a?(Hash)
30
- @payment = Payment.new(payment)
31
- else
32
- @payment = payment
33
- end
31
+ def settlement_amount=(settlement_amount)
32
+ @settlement_amount = Mollie::Amount.new(settlement_amount)
34
33
  end
34
+
35
+ def payment(options = {})
36
+ Payment.get(payment_id, options)
37
+ end
38
+
39
+ def settlement(options = {})
40
+ settlement_id = Util.extract_id(links, "settlement")
41
+ return if settlement_id.nil?
42
+ Settlement.get(settlement_id, options)
43
+ end
44
+
35
45
  end
36
46
  end
data/lib/mollie/client.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Mollie
2
2
  class Client
3
- API_ENDPOINT = 'https://api.mollie.nl'
4
- API_VERSION = 'v1'
3
+ API_ENDPOINT = 'https://api.mollie.com'
4
+ API_VERSION = 'v2'
5
5
 
6
6
  MODE_TEST = 'test'
7
7
  MODE_LIVE = 'live'
@@ -68,7 +68,7 @@ module Mollie
68
68
 
69
69
  if query.length > 0
70
70
  camelized_query = Util.camelize_keys(query)
71
- path += "?#{URI.encode_www_form(camelized_query)}"
71
+ path += "?#{build_nested_query(camelized_query)}"
72
72
  end
73
73
 
74
74
  uri = URI.parse(api_endpoint)
@@ -84,6 +84,10 @@ module Mollie
84
84
  http_body.delete_if { |k, v| v.nil? }
85
85
  request = Net::HTTP::Post.new(path)
86
86
  request.body = Util.camelize_keys(http_body).to_json
87
+ when 'PATCH'
88
+ http_body.delete_if { |k, v| v.nil? }
89
+ request = Net::HTTP::Patch.new(path)
90
+ request.body = Util.camelize_keys(http_body).to_json
87
91
  when 'DELETE'
88
92
  http_body.delete_if { |k, v| v.nil? }
89
93
  request = Net::HTTP::Delete.new(path)
@@ -111,18 +115,34 @@ module Mollie
111
115
  when 204
112
116
  {} # No Content
113
117
  else
114
- response = JSON.parse(response.body)
115
- if response['error']
116
- exception = Mollie::Exception.new response['error']['message']
117
- exception.field = response['error']['field'] unless response['error']['field'].nil?
118
- elsif response['errors']
119
- exception = Mollie::Exception.new response['errors'].values.join(', ')
120
- else
121
- exception = Mollie::Exception.new response.body
122
- end
123
- exception.code = http_code
118
+ json = JSON.parse(response.body)
119
+ exception = Mollie::RequestError.new(json)
124
120
  raise exception
125
121
  end
126
122
  end
123
+
124
+ private
125
+
126
+ def build_nested_query(value, prefix = nil)
127
+ case value
128
+ when Array
129
+ value.map { |v|
130
+ build_nested_query(v, "#{prefix}[]")
131
+ }.join("&")
132
+ when Hash
133
+ value.map { |k, v|
134
+ build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
135
+ }.reject(&:empty?).join('&')
136
+ when nil
137
+ prefix
138
+ else
139
+ raise ArgumentError, "value must be a Hash" if prefix.nil?
140
+ "#{prefix}=#{escape(value)}"
141
+ end
142
+ end
143
+
144
+ def escape(s)
145
+ URI.encode_www_form_component(s)
146
+ end
127
147
  end
128
148
  end
@@ -6,31 +6,26 @@ module Mollie
6
6
  :email,
7
7
  :locale,
8
8
  :metadata,
9
- :recently_used_methods,
10
- :created_datetime
9
+ :created_at
11
10
 
12
- def created_datetime=(created_datetime)
13
- @created_datetime = Time.parse(created_datetime.to_s)
14
- end
15
-
16
- def recently_used_methods=(methods)
17
- @recently_used_methods = Array(methods).map(&:to_s)
11
+ def created_at=(created_at)
12
+ @created_at = Time.parse(created_at.to_s)
18
13
  end
19
14
 
20
15
  def metadata=(metadata)
21
16
  @metadata = OpenStruct.new(metadata) if metadata.is_a?(Hash)
22
17
  end
23
18
 
24
- def payments
25
- Relation.new(self, Customer::Payment)
19
+ def mandates(options = {})
20
+ Mandate.all(options.merge(customer_id: id))
26
21
  end
27
22
 
28
- def mandates
29
- Relation.new(self, Customer::Mandate)
23
+ def payments(options = {})
24
+ Payment.all(options.merge(customer_id: id))
30
25
  end
31
26
 
32
- def subscriptions
33
- Relation.new(self, Customer::Subscription)
27
+ def subscriptions(options = {})
28
+ Subscription.all(options.merge(customer_id: id))
34
29
  end
35
30
  end
36
31
  end
@@ -3,31 +3,43 @@ module Mollie
3
3
  class Mandate < Base
4
4
  STATUS_VALID = "valid"
5
5
  STATUS_INVALID = "invalid"
6
+ STATUS_PENDING = "pending"
6
7
 
7
8
  attr_accessor :id,
8
9
  :status,
9
10
  :method,
10
- :customer_id,
11
11
  :details,
12
- :created_datetime,
13
- :mandate_reference
12
+ :mandate_reference,
13
+ :signature_date,
14
+ :created_at,
15
+ :_links
14
16
 
17
+ alias_method :links, :_links
15
18
 
16
19
  def details=(details)
17
20
  @details = OpenStruct.new(details) if details.is_a?(Hash)
18
21
  end
19
22
 
20
- def created_datetime=(created_datetime)
21
- @created_datetime = Time.parse(created_datetime.to_s) rescue nil
23
+ def created_at=(created_at)
24
+ @created_at = Time.parse(created_at.to_s) rescue nil
22
25
  end
23
26
 
24
27
  def valid?
25
28
  status == STATUS_VALID
26
29
  end
27
30
 
31
+ def pending?
32
+ status == STATUS_PENDING
33
+ end
34
+
28
35
  def invalid?
29
36
  status == STATUS_INVALID
30
37
  end
38
+
39
+ def customer(options = {})
40
+ customer_id = Util.extract_id(links, "customer")
41
+ Customer.get(customer_id, options)
42
+ end
31
43
  end
32
44
  end
33
45
  end
@@ -3,23 +3,22 @@ module Mollie
3
3
  class Subscription < Base
4
4
  STATUS_ACTIVE = "active"
5
5
  STATUS_PENDING = "pending" # Waiting for a valid mandate.
6
- STATUS_CANCELLED = "cancelled"
6
+ STATUS_CANCELED = "canceled"
7
7
  STATUS_SUSPENDED = "suspended" # Active, but mandate became invalid.
8
8
  STATUS_COMPLETED = "completed"
9
9
 
10
- attr_accessor :resource,
11
- :id,
10
+ attr_accessor :id,
12
11
  :customer_id,
13
12
  :mode,
14
- :created_datetime,
13
+ :created_at,
15
14
  :status,
16
15
  :amount,
17
16
  :times,
18
17
  :interval,
19
18
  :description,
20
19
  :method,
21
- :cancelled_datetime,
22
- :links
20
+ :canceled_at,
21
+ :webhook_url
23
22
 
24
23
  def active?
25
24
  status == STATUS_ACTIVE
@@ -33,32 +32,32 @@ module Mollie
33
32
  status == STATUS_SUSPENDED
34
33
  end
35
34
 
36
- def cancelled?
37
- status == STATUS_CANCELLED
35
+ def canceled?
36
+ status == STATUS_CANCELED
38
37
  end
39
38
 
40
39
  def completed?
41
40
  status == STATUS_COMPLETED
42
41
  end
43
42
 
44
- def created_datetime=(created_datetime)
45
- @created_datetime = Time.parse(created_datetime.to_s) rescue nil
43
+ def created_at=(created_at)
44
+ @created_at = Time.parse(created_at.to_s) rescue nil
46
45
  end
47
46
 
48
- def cancelled_datetime=(cancelled_datetime)
49
- @cancelled_datetime = Time.parse(cancelled_datetime.to_s) rescue nil
47
+ def canceled_at=(canceled_at)
48
+ @canceled_at = Time.parse(canceled_at.to_s) rescue nil
50
49
  end
51
50
 
52
51
  def amount=(amount)
53
- @amount = BigDecimal.new(amount.to_s)
52
+ @amount = Mollie::Amount.new(amount)
54
53
  end
55
54
 
56
55
  def times=(times)
57
56
  @times = times.to_i
58
57
  end
59
58
 
60
- def webhook_url
61
- links && links['webhook_url']
59
+ def customer(options = {})
60
+ Customer.get(customer_id, options)
62
61
  end
63
62
  end
64
63
  end
@@ -1,8 +1,20 @@
1
1
  module Mollie
2
2
  class Exception < StandardError
3
- @field = nil
4
- @code = nil
3
+ end
4
+
5
+ class RequestError < Exception
6
+ attr_accessor :status, :title, :detail, :field, :links
7
+
8
+ def initialize(error)
9
+ exception.status = error['status']
10
+ exception.title = error['title']
11
+ exception.detail = error['detail']
12
+ exception.field = error['field']
13
+ exception.links = error['_links']
14
+ end
5
15
 
6
- attr_accessor :field, :code
16
+ def to_s
17
+ "#{status} #{title}: #{detail}"
18
+ end
7
19
  end
8
20
  end
@@ -4,32 +4,28 @@ module Mollie
4
4
  STATUS_PAID = "paid"
5
5
  STATUS_OVERDUE = "overdue"
6
6
 
7
- class Amount < Base
8
- attr_accessor :net, :vat, :gross
9
-
10
- def net=(net)
11
- @net = BigDecimal.new(net.to_s)
12
- end
13
-
14
- def vat=(vat)
15
- @vat = BigDecimal.new(vat.to_s, 2)
16
- end
17
-
18
- def gross=(gross)
19
- @gross = BigDecimal.new(gross.to_s)
20
- end
21
- end
22
-
23
7
  class Line < Base
24
8
  attr_accessor :period, :description, :count, :vat_percentage, :amount
25
9
 
26
10
  def amount=(amount)
27
- @amount = BigDecimal.new(amount.to_s)
11
+ @amount = Mollie::Amount.new(amount)
28
12
  end
29
13
  end
30
14
 
31
- attr_accessor :resource, :id, :reference, :vat_number, :status,
32
- :issue_date, :due_date, :amount, :lines, :links
15
+ attr_accessor :id,
16
+ :reference,
17
+ :vat_number,
18
+ :status,
19
+ :issued_at,
20
+ :paid_at,
21
+ :due_at,
22
+ :net_amount,
23
+ :vat_amount,
24
+ :gross_amount,
25
+ :lines,
26
+ :_links
27
+
28
+ alias_method :links, :_links
33
29
 
34
30
  def open?
35
31
  status == STATUS_OPEN
@@ -43,16 +39,24 @@ module Mollie
43
39
  status == STATUS_OVERDUE
44
40
  end
45
41
 
46
- def amount=(amount)
47
- @amount = Amount.new(amount)
42
+ def net_amount=(net_amount)
43
+ @net_amount = Mollie::Amount.new(net_amount)
44
+ end
45
+
46
+ def vat_amount=(vat_amount)
47
+ @vat_amount = Mollie::Amount.new(vat_amount)
48
+ end
49
+
50
+ def gross_amount=(gross_amount)
51
+ @gross_amount = Mollie::Amount.new(gross_amount)
48
52
  end
49
53
 
50
- def issue_date=(issue_date)
51
- @issue_date = Time.parse(issue_date) rescue nil
54
+ def issued_at=(issued_at)
55
+ @issued_at = Time.parse(issued_at) rescue nil
52
56
  end
53
57
 
54
- def due_date=(due_date)
55
- @due_date = Time.parse(due_date) rescue nil
58
+ def due_at=(due_at)
59
+ @due_at = Time.parse(due_at) rescue nil
56
60
  end
57
61
 
58
62
  def lines=(lines)
@@ -60,7 +64,7 @@ module Mollie
60
64
  end
61
65
 
62
66
  def pdf
63
- links && links['pdf']
67
+ Util.extract_url(links, 'pdf')
64
68
  end
65
69
  end
66
70
  end