tikkie-api 0.2.2 → 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 +4 -4
  2. data/.rubocop.yml +20 -16
  3. data/.travis.yml +5 -5
  4. data/Gemfile +3 -2
  5. data/Gemfile.lock +23 -24
  6. data/LICENSE.txt +1 -1
  7. data/README.md +198 -69
  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 +3 -2
  63. metadata +69 -43
  64. data/lib/tikkie/api/access_token.rb +0 -19
  65. data/lib/tikkie/api/authentication.rb +0 -65
  66. data/lib/tikkie/api/requests/payment_requests.rb +0 -57
  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 -67
  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 -66
  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 -32
  78. data/lib/tikkie/api/responses/user.rb +0 -41
  79. data/lib/tikkie/api/responses/users.rb +0 -36
  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