tikkie-api 0.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +31 -7
  3. data/.travis.yml +8 -4
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +39 -33
  6. data/LICENSE.txt +1 -1
  7. data/README.md +211 -61
  8. data/lib/tikkie/api.rb +52 -25
  9. data/lib/tikkie/api/amount.rb +35 -0
  10. data/lib/tikkie/api/client.rb +16 -8
  11. data/lib/tikkie/api/clients/base.rb +16 -0
  12. data/lib/tikkie/api/clients/payment_requests.rb +25 -0
  13. data/lib/tikkie/api/clients/payment_requests_subscription.rb +20 -0
  14. data/lib/tikkie/api/clients/payments.rb +20 -0
  15. data/lib/tikkie/api/clients/refunds.rb +20 -0
  16. data/lib/tikkie/api/clients/sandbox_apps.rb +15 -0
  17. data/lib/tikkie/api/configuration.rb +8 -47
  18. data/lib/tikkie/api/exception.rb +28 -8
  19. data/lib/tikkie/api/request.rb +51 -27
  20. data/lib/tikkie/api/resources/base.rb +66 -0
  21. data/lib/tikkie/api/{responses → resources}/error.rb +11 -9
  22. data/lib/tikkie/api/resources/list.rb +52 -0
  23. data/lib/tikkie/api/resources/payment.rb +68 -0
  24. data/lib/tikkie/api/resources/payment_request.rb +97 -0
  25. data/lib/tikkie/api/resources/payment_requests.rb +40 -0
  26. data/lib/tikkie/api/resources/payment_requests_subscription.rb +24 -0
  27. data/lib/tikkie/api/resources/payments.rb +48 -0
  28. data/lib/tikkie/api/resources/refund.rb +71 -0
  29. data/lib/tikkie/api/resources/sandbox_app.rb +20 -0
  30. data/lib/tikkie/api/response.rb +64 -0
  31. data/lib/tikkie/api/v1/access_token.rb +21 -0
  32. data/lib/tikkie/api/v1/authentication.rb +67 -0
  33. data/lib/tikkie/api/v1/client.rb +26 -0
  34. data/lib/tikkie/api/v1/configuration.rb +64 -0
  35. data/lib/tikkie/api/v1/exception.rb +24 -0
  36. data/lib/tikkie/api/v1/request.rb +59 -0
  37. data/lib/tikkie/api/v1/requests/payment_requests.rb +59 -0
  38. data/lib/tikkie/api/v1/requests/platforms.rb +34 -0
  39. data/lib/tikkie/api/v1/requests/users.rb +33 -0
  40. data/lib/tikkie/api/v1/responses/bank_account.rb +24 -0
  41. data/lib/tikkie/api/v1/responses/base.rb +69 -0
  42. data/lib/tikkie/api/v1/responses/error.rb +36 -0
  43. data/lib/tikkie/api/v1/responses/pagination.rb +22 -0
  44. data/lib/tikkie/api/v1/responses/payment.rb +50 -0
  45. data/lib/tikkie/api/v1/responses/payment_request.rb +68 -0
  46. data/lib/tikkie/api/v1/responses/payment_request_created.rb +24 -0
  47. data/lib/tikkie/api/v1/responses/payment_requests.rb +44 -0
  48. data/lib/tikkie/api/v1/responses/platform.rb +46 -0
  49. data/lib/tikkie/api/v1/responses/platforms.rb +34 -0
  50. data/lib/tikkie/api/v1/responses/user.rb +43 -0
  51. data/lib/tikkie/api/v1/responses/users.rb +38 -0
  52. data/lib/tikkie/api/v1/types/payment_request_status.rb +17 -0
  53. data/lib/tikkie/api/v1/types/payment_status.rb +16 -0
  54. data/lib/tikkie/api/v1/types/platform_status.rb +14 -0
  55. data/lib/tikkie/api/v1/types/platform_usage.rb +14 -0
  56. data/lib/tikkie/api/v1/types/user_status.rb +14 -0
  57. data/lib/tikkie/api/version.rb +1 -1
  58. data/lib/tikkie/notification.rb +23 -0
  59. data/lib/tikkie/notifications/bundle_notification.rb +28 -0
  60. data/lib/tikkie/notifications/payment_notification.rb +32 -0
  61. data/lib/tikkie/notifications/refund_notification.rb +36 -0
  62. data/tikkie-api.gemspec +4 -3
  63. metadata +69 -44
  64. data/lib/tikkie/api/access_token.rb +0 -19
  65. data/lib/tikkie/api/authentication.rb +0 -60
  66. data/lib/tikkie/api/requests/payment_requests.rb +0 -56
  67. data/lib/tikkie/api/requests/platforms.rb +0 -32
  68. data/lib/tikkie/api/requests/users.rb +0 -31
  69. data/lib/tikkie/api/responses/bank_account.rb +0 -22
  70. data/lib/tikkie/api/responses/base.rb +0 -53
  71. data/lib/tikkie/api/responses/pagination.rb +0 -20
  72. data/lib/tikkie/api/responses/payment.rb +0 -48
  73. data/lib/tikkie/api/responses/payment_request.rb +0 -64
  74. data/lib/tikkie/api/responses/payment_request_created.rb +0 -22
  75. data/lib/tikkie/api/responses/payment_requests.rb +0 -42
  76. data/lib/tikkie/api/responses/platform.rb +0 -44
  77. data/lib/tikkie/api/responses/platforms.rb +0 -30
  78. data/lib/tikkie/api/responses/user.rb +0 -39
  79. data/lib/tikkie/api/responses/users.rb +0 -34
  80. data/lib/tikkie/api/types/payment_request_status.rb +0 -15
  81. data/lib/tikkie/api/types/payment_status.rb +0 -14
  82. data/lib/tikkie/api/types/platform_status.rb +0 -12
  83. data/lib/tikkie/api/types/platform_usage.rb +0 -12
  84. data/lib/tikkie/api/types/user_status.rb +0 -12
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module Resources
6
+ # Base class for all resources.
7
+ class Base
8
+ attr_reader :config, :options
9
+
10
+ def initialize(config, options = {})
11
+ @config = config
12
+ @options = options
13
+ @body = options.delete(:body) if options.key?(:body)
14
+ end
15
+
16
+ def load
17
+ @response ||= load_resource
18
+
19
+ self
20
+ end
21
+
22
+ def save(attributes = {})
23
+ @response = create_resource(attributes)
24
+
25
+ self
26
+ end
27
+
28
+ def delete
29
+ delete_resource
30
+
31
+ nil
32
+ end
33
+
34
+ def loaded?
35
+ !@response.nil?
36
+ end
37
+
38
+ private
39
+
40
+ def load_resource
41
+ raise NotImplementedError
42
+ end
43
+
44
+ def create_resource
45
+ raise NotImplementedError
46
+ end
47
+
48
+ def delete_resource
49
+ raise NotImplementedError
50
+ end
51
+
52
+ def body
53
+ @body ||= begin
54
+ load unless loaded?
55
+
56
+ @response.body
57
+ end
58
+ end
59
+
60
+ def request
61
+ @request ||= Tikkie::Api::Request.new(config)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -2,9 +2,15 @@
2
2
 
3
3
  module Tikkie
4
4
  module Api
5
- module Responses
6
- # Error response from Tikkie.
7
- class Error < Base
5
+ module Resources
6
+ # Error object in non-successful responses.
7
+ class Error
8
+ attr_reader :data
9
+
10
+ def initialize(data)
11
+ @data = data
12
+ end
13
+
8
14
  def code
9
15
  data[:code]
10
16
  end
@@ -17,16 +23,12 @@ module Tikkie
17
23
  data[:reference]
18
24
  end
19
25
 
20
- def trace_id
21
- data[:traceId]
22
- end
23
-
24
26
  def status
25
27
  data[:status]
26
28
  end
27
29
 
28
- def category
29
- data[:category]
30
+ def trace_id
31
+ data[:traceId]
30
32
  end
31
33
  end
32
34
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bigdecimal'
4
+
5
+ module Tikkie
6
+ module Api
7
+ module Resources
8
+ # Base class for all list resources.
9
+ class List < Base
10
+ attr_reader :page_number, :page_size
11
+
12
+ def initialize(config, options = {})
13
+ @page_number = options.fetch(:page_number, 0)
14
+ @page_size = options.fetch(:page_size, 50)
15
+ super(config, options)
16
+ end
17
+
18
+ def total_elements
19
+ body[:totalElementCount].to_i
20
+ end
21
+
22
+ def total_pages
23
+ (total_elements / BigDecimal(page_size)).ceil
24
+ end
25
+
26
+ def next_page
27
+ page_number + 1 if next_page?
28
+ end
29
+
30
+ def next_page?
31
+ page_number && (page_number + 1) < total_pages
32
+ end
33
+
34
+ def previous_page
35
+ page_number - 1 if previous_page?
36
+ end
37
+
38
+ def previous_page?
39
+ page_number && page_number.positive?
40
+ end
41
+
42
+ def next
43
+ self.class.new(config, options.merge(page_number: next_page)) if next_page?
44
+ end
45
+
46
+ def previous
47
+ self.class.new(config, options.merge(page_number: previous_page)) if previous_page?
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module Tikkie
6
+ module Api
7
+ module Resources
8
+ # Resource for a Payment.
9
+ class Payment < Base
10
+ attr_reader :payment_request_token
11
+
12
+ def initialize(config, options = {})
13
+ @payment_request_token = options.delete(:payment_request_token)
14
+ @payment_token = options.delete(:payment_token)
15
+ super(config, options)
16
+ end
17
+
18
+ def payment_token
19
+ @payment_token || body[:paymentToken]
20
+ end
21
+
22
+ def tikkie_id
23
+ body[:tikkieId]
24
+ end
25
+
26
+ def counter_party_name
27
+ body[:counterPartyName]
28
+ end
29
+
30
+ def counter_party_account_number
31
+ body[:counterPartyAccountNumber]
32
+ end
33
+
34
+ def amount
35
+ Tikkie::Api::Amount.from_cents(body[:amountInCents]).to_d
36
+ end
37
+
38
+ def description
39
+ body[:description]
40
+ end
41
+
42
+ def created_at
43
+ Time.parse(body[:createdDateTime]) if body[:createdDateTime]
44
+ end
45
+
46
+ def refunds
47
+ @refunds ||= begin
48
+ refunds = []
49
+
50
+ if body[:refunds]
51
+ body[:refunds].each do |refund|
52
+ refunds << Tikkie::Api::Resources::Refund.new(config, body: refund)
53
+ end
54
+ end
55
+
56
+ refunds
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def load_resource
63
+ request.get("paymentrequests/#{payment_request_token}/payments/#{payment_token}", options)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module Tikkie
6
+ module Api
7
+ module Resources
8
+ # Resource for a Payment Request.
9
+ class PaymentRequest < Base
10
+ STATUS_OPEN = "OPEN"
11
+ STATUS_CLOSED = "CLOSED"
12
+ STATUS_EXPIRED = "EXPIRED"
13
+ STATUS_MAX_YIELDED_REACHED = "MAX_YIELD_REACHED"
14
+ STATUS_MAX_SUCCESSFUL_PAYMENTS_REACHED = "MAX_SUCCESSFUL_PAYMENTS_REACHED"
15
+
16
+ def initialize(config, options = {})
17
+ @payment_request_token = options.delete(:payment_request_token)
18
+ super(config, options)
19
+ end
20
+
21
+ def payment_request_token
22
+ @payment_request_token || body[:paymentRequestToken]
23
+ end
24
+
25
+ def url
26
+ body[:url]
27
+ end
28
+
29
+ def amount
30
+ Tikkie::Api::Amount.from_cents(body[:amountInCents]).to_d
31
+ end
32
+
33
+ def description
34
+ body[:description]
35
+ end
36
+
37
+ def reference_id
38
+ body[:referenceId]
39
+ end
40
+
41
+ def created_at
42
+ Time.parse(body[:createdDateTime]) if body[:createdDateTime]
43
+ end
44
+
45
+ def expiry_date
46
+ Date.parse(body[:expiryDate]) if body[:expiryDate]
47
+ end
48
+
49
+ def status
50
+ body[:status]
51
+ end
52
+
53
+ def open?
54
+ status == STATUS_OPEN
55
+ end
56
+
57
+ def closed?
58
+ status == STATUS_CLOSED
59
+ end
60
+
61
+ def expired?
62
+ status == STATUS_EXPIRED
63
+ end
64
+
65
+ def number_of_payments
66
+ body[:numberOfPayments]
67
+ end
68
+
69
+ def total_amount_paid
70
+ Tikkie::Api::Amount.from_cents(body[:totalAmountPaidInCents]).to_d
71
+ end
72
+
73
+ def payments
74
+ @payments ||= Tikkie::Api::Resources::Payments.new(config, payment_request_token: payment_request_token)
75
+ end
76
+
77
+ private
78
+
79
+ def load_resource
80
+ request.get("paymentrequests/#{payment_request_token}", options)
81
+ end
82
+
83
+ def create_resource(attributes)
84
+ params = { description: attributes.fetch(:description) }
85
+ if attributes.key?(:amount)
86
+ amount = Tikkie::Api::Amount.new(attributes[:amount])
87
+ params[:amountInCents] = amount.to_cents
88
+ end
89
+ params[:expiryDate] = attributes[:expiry_date].respond_to?(:strftime) ? attributes[:expiry_date].strftime("%F") : attributes[:expiry_date] if attributes.key?(:expiry_date)
90
+ params[:referenceId] = attributes[:reference_id] if attributes.key?(:reference_id)
91
+
92
+ request.post("paymentrequests", options, params)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module Resources
6
+ # Resource for Payment Requests.
7
+ class PaymentRequests < List
8
+ include Enumerable
9
+
10
+ def each(&block)
11
+ payment_requests.each(&block)
12
+ end
13
+
14
+ private
15
+
16
+ def load_resource
17
+ params = { pageNumber: page_number, pageSize: page_size }
18
+ params[:fromDate] = options[:from_date].respond_to?(:utc) ? options[:from_date].utc.iso8601 : options[:from_date] if options.key?(:from_date)
19
+ params[:toDate] = options[:to_date].respond_to?(:utc) ? options[:to_date].utc.iso8601 : options[:to_date] if options.key?(:to_date)
20
+
21
+ request.get("paymentrequests", params)
22
+ end
23
+
24
+ def payment_requests
25
+ @payment_requests ||= begin
26
+ payment_requests = []
27
+
28
+ if body[:paymentRequests]
29
+ body[:paymentRequests].each do |payment_request|
30
+ payment_requests << Tikkie::Api::Resources::PaymentRequest.new(config, body: payment_request)
31
+ end
32
+ end
33
+
34
+ payment_requests
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module Resources
6
+ # Resource for a Payment Request Subscription.
7
+ class PaymentRequestsSubscription < Base
8
+ def subscription_id
9
+ body[:subscriptionId]
10
+ end
11
+
12
+ private
13
+
14
+ def create_resource(attributes)
15
+ request.post("paymentrequestssubscription", options, attributes)
16
+ end
17
+
18
+ def delete_resource
19
+ request.delete("paymentrequestssubscription", options)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module Resources
6
+ # Resource for Payments.
7
+ class Payments < List
8
+ include Enumerable
9
+
10
+ attr_reader :payment_request_token
11
+
12
+ def initialize(config, options = {})
13
+ @payment_request_token = options.delete(:payment_request_token)
14
+ super(config, options)
15
+ end
16
+
17
+ def each(&block)
18
+ payments.each(&block)
19
+ end
20
+
21
+ private
22
+
23
+ def load_resource
24
+ params = { pageNumber: page_number, pageSize: page_size }
25
+ params[:fromDate] = options[:from_date].respond_to?(:utc) ? options[:from_date].utc.iso8601 : options[:from_date] if options.key?(:from_date)
26
+ params[:toDate] = options[:to_date].respond_to?(:utc) ? options[:to_date].utc.iso8601 : options[:to_date] if options.key?(:to_date)
27
+ params[:includeRefunds] = options[:include_refunds] if options.key?(:include_refunds)
28
+
29
+ request.get("paymentrequests/#{payment_request_token}/payments", params)
30
+ end
31
+
32
+ def payments
33
+ @payments ||= begin
34
+ payments = []
35
+
36
+ if body[:payments]
37
+ body[:payments].each do |payment|
38
+ payments << Tikkie::Api::Resources::Payment.new(config, body: payment)
39
+ end
40
+ end
41
+
42
+ payments
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module Tikkie
6
+ module Api
7
+ module Resources
8
+ # Resource for a Refund.
9
+ class Refund < Base
10
+ STATUS_PENDING = "PENDING"
11
+ STATUS_PAID = "PAID"
12
+
13
+ attr_reader :payment_request_token, :payment_token
14
+
15
+ def initialize(config, options = {})
16
+ @payment_request_token = options.delete(:payment_request_token)
17
+ @payment_token = options.delete(:payment_token)
18
+ @refund_token = options.delete(:refund_token)
19
+ super(config, options)
20
+ end
21
+
22
+ def refund_token
23
+ @refund_token || body[:refundToken]
24
+ end
25
+
26
+ def amount
27
+ Tikkie::Api::Amount.from_cents(body[:amountInCents]).to_d
28
+ end
29
+
30
+ def description
31
+ body[:description]
32
+ end
33
+
34
+ def reference_id
35
+ body[:referenceId]
36
+ end
37
+
38
+ def created_at
39
+ Time.parse(body[:createdDateTime]) if body[:createdDateTime]
40
+ end
41
+
42
+ def status
43
+ body[:status]
44
+ end
45
+
46
+ def pending?
47
+ status == STATUS_PENDING
48
+ end
49
+
50
+ def paid?
51
+ status == STATUS_PAID
52
+ end
53
+
54
+ private
55
+
56
+ def load_resource
57
+ request.get("paymentrequests/#{payment_request_token}/payments/#{payment_token}/refunds/#{refund_token}", options)
58
+ end
59
+
60
+ def create_resource(attributes)
61
+ params = { description: attributes.fetch(:description) }
62
+ amount = Tikkie::Api::Amount.new(attributes.fetch(:amount))
63
+ params[:amountInCents] = amount.to_cents
64
+ params[:referenceId] = attributes[:reference_id] if attributes.key?(:reference_id)
65
+
66
+ request.post("paymentrequests/#{payment_request_token}/payments/#{payment_token}/refunds", options, params)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end