tikkie-api 0.1.0 → 2.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 (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,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Requests
7
+ # Users operations at Tikkie.
8
+ class Users
9
+ def initialize(request)
10
+ @request = request
11
+ end
12
+
13
+ def list(platform_token)
14
+ response = @request.get("/tikkie/platforms/#{platform_token}/users")
15
+ Tikkie::Api::V1::Responses::Users.new(response)
16
+ end
17
+
18
+ def create(platform_token, options = {})
19
+ params = {
20
+ name: options.fetch(:name),
21
+ phoneNumber: options.fetch(:phone_number),
22
+ iban: options.fetch(:iban),
23
+ bankAccountLabel: options.fetch(:bank_account_label)
24
+ }
25
+ response = @request.post("/tikkie/platforms/#{platform_token}/users", params)
26
+
27
+ Tikkie::Api::V1::Responses::User.new(response)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Bank account of a user.
8
+ class BankAccount < Base
9
+ def bank_account_token
10
+ data[:bankAccountToken]
11
+ end
12
+
13
+ def bank_account_label
14
+ data[:bankAccountLabel]
15
+ end
16
+
17
+ def iban
18
+ data[:iban]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Tikkie
6
+ module Api
7
+ module V1
8
+ module Responses
9
+ # Base class for all responses.
10
+ class Base
11
+ attr_reader :response, :data
12
+
13
+ def initialize(response)
14
+ if response.respond_to?(:body)
15
+ @response = response
16
+ @data = parse_body(response.body)
17
+ else
18
+ @data = response
19
+ end
20
+ end
21
+
22
+ def response_code
23
+ response.code.to_i if response
24
+ end
25
+
26
+ def success?
27
+ (response_code == 200 || response_code == 201) && !@invalid
28
+ end
29
+
30
+ def error?
31
+ !success?
32
+ end
33
+
34
+ def trace_id
35
+ response["Trace-Id"] if response
36
+ end
37
+
38
+ def errors
39
+ @errors ||= begin
40
+ errors = []
41
+
42
+ if data[:errors]
43
+ data[:errors].each do |error|
44
+ errors << Tikkie::Api::V1::Responses::Error.new(error)
45
+ end
46
+ end
47
+
48
+ errors
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def parse_body(body)
55
+ body = body.respond_to?(:read) ? body.read : body
56
+
57
+ JSON.parse(body, symbolize_names: true)
58
+ rescue JSON::ParserError => ex
59
+ @invalid = true
60
+
61
+ {
62
+ message: "Unable to parse JSON: #{ex.message}"
63
+ }
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Error response from Tikkie.
8
+ class Error < Base
9
+ def code
10
+ data[:code]
11
+ end
12
+
13
+ def message
14
+ data[:message]
15
+ end
16
+
17
+ def reference
18
+ data[:reference]
19
+ end
20
+
21
+ def trace_id
22
+ data[:traceId]
23
+ end
24
+
25
+ def status
26
+ data[:status]
27
+ end
28
+
29
+ def category
30
+ data[:category]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Helper for paginated responses.
8
+ module Pagination
9
+ attr_accessor :offset, :limit, :elements, :total_elements
10
+
11
+ def more_elements?
12
+ @total_elements && @total_elements > @offset + @elements
13
+ end
14
+
15
+ def next_offset
16
+ @offset + @limit if more_elements?
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bigdecimal'
4
+ require 'time'
5
+
6
+ module Tikkie
7
+ module Api
8
+ module V1
9
+ module Responses
10
+ # Payment that is associated with a payment request.
11
+ class Payment < Base
12
+ def payment_token
13
+ data[:paymentToken]
14
+ end
15
+
16
+ def counter_party_name
17
+ data[:counterPartyName]
18
+ end
19
+
20
+ def amount
21
+ decimal = BigDecimal(data[:amountInCents])
22
+ decimal /= 100.0
23
+ decimal
24
+ end
25
+
26
+ def currency
27
+ data[:amountCurrency]
28
+ end
29
+
30
+ def description
31
+ data[:description]
32
+ end
33
+
34
+ def created_at
35
+ Time.parse(data[:created]) if data[:created]
36
+ end
37
+
38
+ # See PaymentStatus
39
+ def online_payment_status
40
+ data[:onlinePaymentStatus]
41
+ end
42
+
43
+ def paid?
44
+ online_payment_status == Tikkie::Api::V1::Types::PaymentStatus::PAID
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bigdecimal'
4
+ require 'time'
5
+
6
+ module Tikkie
7
+ module Api
8
+ module V1
9
+ module Responses
10
+ # Response for a payment request.
11
+ class PaymentRequest < Base
12
+ def payment_request_token
13
+ data[:paymentRequestToken]
14
+ end
15
+
16
+ def amount
17
+ decimal = BigDecimal(data[:amountInCents])
18
+ decimal /= 100.0
19
+ decimal
20
+ end
21
+
22
+ def currency
23
+ data[:currency]
24
+ end
25
+
26
+ def created_at
27
+ Time.parse(data[:created]) if data[:created]
28
+ end
29
+
30
+ def expired_at
31
+ Time.parse(data[:expired]) if data[:expired]
32
+ end
33
+
34
+ # see PaymentRequestStatus
35
+ def status
36
+ data[:status]
37
+ end
38
+
39
+ def expired?
40
+ status == Tikkie::Api::V1::Types::PaymentRequestStatus::EXPIRED
41
+ end
42
+
43
+ def bank_account_yielded_too_fast?
44
+ data[:bankAccountYieldedTooFast]
45
+ end
46
+
47
+ def external_id
48
+ data[:externalId]
49
+ end
50
+
51
+ def payments
52
+ @payments ||= begin
53
+ payments = []
54
+
55
+ if data[:payments]
56
+ data[:payments].each do |data|
57
+ payments << Tikkie::Api::V1::Responses::Payment.new(data)
58
+ end
59
+ end
60
+
61
+ payments
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Response when creating a payment request.
8
+ class PaymentRequestCreated < Base
9
+ def payment_request_url
10
+ data[:paymentRequestUrl]
11
+ end
12
+
13
+ def payment_request_token
14
+ data[:paymentRequestToken]
15
+ end
16
+
17
+ def external_id
18
+ data[:externalId]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Response when requesting payment requests (list).
8
+ class PaymentRequests < Base
9
+ include Enumerable
10
+ include Tikkie::Api::V1::Responses::Pagination
11
+
12
+ def initialize(response, options = {})
13
+ super(response)
14
+
15
+ @offset = options[:offset]
16
+ @limit = options[:limit]
17
+ @total_elements = data[:totalElements]
18
+ @elements = payment_requests.count
19
+ end
20
+
21
+ def each(&block)
22
+ payment_requests.each(&block)
23
+ end
24
+
25
+ private
26
+
27
+ def payment_requests
28
+ @payment_requests ||= begin
29
+ payment_requests = []
30
+
31
+ if data[:paymentRequests]
32
+ data[:paymentRequests].each do |payment_request|
33
+ payment_requests << Tikkie::Api::V1::Responses::PaymentRequest.new(payment_request)
34
+ end
35
+ end
36
+
37
+ payment_requests
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Response when requesting a platform.
8
+ class Platform < Base
9
+ def platform_token
10
+ data[:platformToken]
11
+ end
12
+
13
+ def name
14
+ data[:name]
15
+ end
16
+
17
+ def phone_number
18
+ data[:phoneNumber]
19
+ end
20
+
21
+ def email
22
+ data[:email]
23
+ end
24
+
25
+ def notification_url
26
+ data[:notificationUrl]
27
+ end
28
+
29
+ # see PlatformStatus
30
+ def status
31
+ data[:status]
32
+ end
33
+
34
+ def active?
35
+ status == Tikkie::Api::V1::Types::PlatformStatus::ACTIVE
36
+ end
37
+
38
+ # see PlatformUsage
39
+ def platform_usage
40
+ data[:platformUsage]
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tikkie
4
+ module Api
5
+ module V1
6
+ module Responses
7
+ # Response when requesting platforms (list).
8
+ class Platforms < Base
9
+ include Enumerable
10
+
11
+ def each(&block)
12
+ platforms.each(&block)
13
+ end
14
+
15
+ private
16
+
17
+ def platforms
18
+ @platforms ||= begin
19
+ platforms = []
20
+
21
+ unless error?
22
+ data.each do |platform|
23
+ platforms << Tikkie::Api::V1::Responses::Platform.new(platform)
24
+ end
25
+ end
26
+
27
+ platforms
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end