unit_ruby_sdk 1.0.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +190 -19
  3. data/lib/unit/api_resources/application_form_resource.rb +40 -0
  4. data/lib/unit/api_resources/authorization_request_resource.rb +49 -0
  5. data/lib/unit/api_resources/authorization_resource.rb +31 -0
  6. data/lib/unit/api_resources/card_resource.rb +8 -0
  7. data/lib/unit/api_resources/event_resource.rb +40 -0
  8. data/lib/unit/api_resources/fee_resource.rb +32 -0
  9. data/lib/unit/api_resources/payment_resource.rb +17 -0
  10. data/lib/unit/api_resources/received_payment_resource.rb +47 -0
  11. data/lib/unit/api_resources/recurring_payment_resource.rb +55 -0
  12. data/lib/unit/api_resources/repayment_resource.rb +41 -0
  13. data/lib/unit/api_resources/reward_resource.rb +41 -0
  14. data/lib/unit/api_resources/webhook_resource.rb +65 -0
  15. data/lib/unit/models/application/application.rb +98 -10
  16. data/lib/unit/models/application/create_business_application_request.rb +34 -13
  17. data/lib/unit/models/application/create_individual_application_request.rb +12 -8
  18. data/lib/unit/models/application/create_sole_proprietor_application_request.rb +113 -0
  19. data/lib/unit/models/application/create_trust_application_request.rb +67 -0
  20. data/lib/unit/models/application/patch_trust_application_request.rb +31 -0
  21. data/lib/unit/models/application_form/application_form.rb +43 -0
  22. data/lib/unit/models/application_form/create_application_form_request.rb +48 -0
  23. data/lib/unit/models/application_form/list_application_form_params.rb +30 -0
  24. data/lib/unit/models/authorization/authorization.rb +42 -0
  25. data/lib/unit/models/authorization/get_request.rb +22 -0
  26. data/lib/unit/models/authorization/list_request.rb +67 -0
  27. data/lib/unit/models/authorization_request/approve_request.rb +37 -0
  28. data/lib/unit/models/authorization_request/authorization_request.rb +55 -0
  29. data/lib/unit/models/authorization_request/decline_request.rb +31 -0
  30. data/lib/unit/models/authorization_request/list_authorization_params.rb +44 -0
  31. data/lib/unit/models/card/card.rb +102 -4
  32. data/lib/unit/models/card/create_business_credit_card_request.rb +29 -0
  33. data/lib/unit/models/card/create_business_debit_card_request.rb +10 -6
  34. data/lib/unit/models/card/create_business_virtual_credit_card_request.rb +25 -0
  35. data/lib/unit/models/card/create_business_virtual_debit_card_request.rb +10 -6
  36. data/lib/unit/models/card/create_individual_debit_card_request.rb +7 -3
  37. data/lib/unit/models/card/create_individual_virtual_card_request.rb +6 -3
  38. data/lib/unit/models/card/patch_business_card_request.rb +50 -0
  39. data/lib/unit/models/card/patch_business_credit_card_request.rb +22 -0
  40. data/lib/unit/models/card/patch_business_virtual_card_request.rb +43 -0
  41. data/lib/unit/models/card/patch_business_virtual_credit_card_request.rb +20 -0
  42. data/lib/unit/models/customer/list_customer_params.rb +4 -2
  43. data/lib/unit/models/event/event.rb +37 -0
  44. data/lib/unit/models/event/list_event_params.rb +37 -0
  45. data/lib/unit/models/fee/create_fee_request.rb +43 -0
  46. data/lib/unit/models/fee/fee.rb +34 -0
  47. data/lib/unit/models/fee/reverse_fee_request.rb +43 -0
  48. data/lib/unit/models/payment/batch_release_request_builder.rb +21 -0
  49. data/lib/unit/models/payment/bulk_payment_request.rb +15 -0
  50. data/lib/unit/models/payment/create_ach_payment_inline_request.rb +29 -19
  51. data/lib/unit/models/payment/create_batch_release_request.rb +54 -0
  52. data/lib/unit/models/payment/create_book_payment_request.rb +24 -14
  53. data/lib/unit/models/payment/create_payment_linked_request.rb +31 -21
  54. data/lib/unit/models/payment/create_wire_payment_request.rb +22 -12
  55. data/lib/unit/models/payment/create_with_plaid_token_request.rb +32 -22
  56. data/lib/unit/models/payment/payment.rb +40 -12
  57. data/lib/unit/models/received_payment/list_payment_params.rb +51 -0
  58. data/lib/unit/models/received_payment/patch_payment_request.rb +31 -0
  59. data/lib/unit/models/received_payment/received_payment.rb +54 -0
  60. data/lib/unit/models/recurring_payment/create_recurring_credit_ach_payment_request.rb +52 -0
  61. data/lib/unit/models/recurring_payment/create_recurring_credit_book_payment_request.rb +54 -0
  62. data/lib/unit/models/recurring_payment/create_recurring_debit_ach_payment_request.rb +60 -0
  63. data/lib/unit/models/recurring_payment/list_recurring_payment_params.rb +60 -0
  64. data/lib/unit/models/recurring_payment/recurring_payment.rb +106 -0
  65. data/lib/unit/models/repayment/create_ach_repayment_request.rb +57 -0
  66. data/lib/unit/models/repayment/create_book_repayment_request.rb +53 -0
  67. data/lib/unit/models/repayment/list_repayment_params.rb +48 -0
  68. data/lib/unit/models/repayment/repayment.rb +67 -0
  69. data/lib/unit/models/reward/create_reward_request.rb +49 -0
  70. data/lib/unit/models/reward/get_request.rb +22 -0
  71. data/lib/unit/models/reward/list_reward_params.rb +65 -0
  72. data/lib/unit/models/reward/reward.rb +55 -0
  73. data/lib/unit/models/unit_response.rb +1 -1
  74. data/lib/unit/models/webhook/create_webhook_request.rb +49 -0
  75. data/lib/unit/models/webhook/list_webhook_params.rb +39 -0
  76. data/lib/unit/models/webhook/patch_webhook_request.rb +47 -0
  77. data/lib/unit/models/webhook/webhook.rb +80 -0
  78. data/lib/unit/types/application_form_prefill.rb +84 -0
  79. data/lib/unit/types/application_form_settings_override.rb +51 -0
  80. data/lib/unit/types/beneficial_owner.rb +15 -10
  81. data/lib/unit/types/beneficiary.rb +25 -0
  82. data/lib/unit/types/create_schedule.rb +38 -0
  83. data/lib/unit/types/evaluation_params.rb +4 -4
  84. data/lib/unit/types/grantor.rb +37 -0
  85. data/lib/unit/types/officer.rb +26 -13
  86. data/lib/unit/types/power_of_attorney_agent.rb +5 -12
  87. data/lib/unit/types/require_id_verification.rb +29 -0
  88. data/lib/unit/types/trust_contact.rb +34 -0
  89. data/lib/unit/types/trustee.rb +37 -0
  90. data/lib/unit/version.rb +1 -1
  91. data/lib/unit_ruby_sdk.rb +28 -0
  92. metadata +67 -2
@@ -5,7 +5,8 @@
5
5
  module Unit
6
6
  module Card
7
7
  class CreateBusinessDebitCardRequest
8
- attr_reader :account_id, :full_name, :date_of_birth, :address, :shipping_address, :phone, :email, :design, :additional_embossed_text, :idempotency_key, :tags, :limits, :print_only_business_name
8
+ attr_reader :account_id, :full_name, :date_of_birth, :address, :shipping_address, :phone, :email, :design, :additional_embossed_text,
9
+ :idempotency_key, :tags, :limits, :print_only_business_name, :expiry_date, :type
9
10
 
10
11
  # @param account_id [String]
11
12
  # @param full_name [FullName]
@@ -20,8 +21,9 @@ module Unit
20
21
  # @param tags [Hash] - optional
21
22
  # @param limits [Hash] - optional
22
23
  # @param print_only_business_name [Boolean] - optional
24
+ # @param expiry_date [String] - optional
23
25
  def initialize(account_id, full_name, date_of_birth, address, shipping_address = nil, phone = nil, email = nil, design = nil,
24
- additional_embossed_text = nil, idempotency_key = nil, tags = nil, limits = nil, print_only_business_name = nil)
26
+ additional_embossed_text = nil, idempotency_key = nil, tags = nil, limits = nil, print_only_business_name = nil, expiry_date = nil)
25
27
  @account_id = account_id
26
28
  @full_name = full_name
27
29
  @date_of_birth = date_of_birth
@@ -35,12 +37,14 @@ module Unit
35
37
  @tags = tags
36
38
  @limits = limits
37
39
  @print_only_business_name = print_only_business_name
40
+ @expiry_date = expiry_date
41
+ @type = "businessDebitCard"
38
42
  end
39
43
 
40
44
  def to_json_api
41
45
  payload = {
42
46
  "data": {
43
- "type": "businessDebitCard",
47
+ "type": type,
44
48
  "attributes": {
45
49
  "fullName": full_name&.represent,
46
50
  "dateOfBirth": date_of_birth,
@@ -53,14 +57,14 @@ module Unit
53
57
  "idempotencyKey": idempotency_key,
54
58
  "tags": tags,
55
59
  "limits": limits,
56
- "printOnlyBusinessName": print_only_business_name
57
- },
60
+ "printOnlyBusinessName": print_only_business_name,
61
+ "expiryDate": expiry_date
62
+ }.compact!,
58
63
  "relationships": {
59
64
  "account": Unit::Types::Relationship.new("account", account_id).to_hash
60
65
  }
61
66
  }
62
67
  }
63
- payload[:data][:attributes].compact!
64
68
  payload.to_json
65
69
  end
66
70
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to create business virtual credit card request
4
+ # @see https://guides.unit.co/business-charge-cards/
5
+ module Unit
6
+ module Card
7
+ # @param account_id [String]
8
+ # @param full_name [FullName]
9
+ # @param date_of_birth [Date]
10
+ # @param address [Address]
11
+ # @param phone [Phone] - optional
12
+ # @param email [String] - optional
13
+ # @param idempotency_key [String] - optional
14
+ # @param tags [Hash] - optional
15
+ # @param limits [Hash] - optional
16
+ # @param expiry_date [String] - optional
17
+ class CreateBusinessVirtualCreditCardRequest < CreateBusinessVirtualDebitCardRequest
18
+ def initialize(account_id, full_name, date_of_birth, address, phone = nil, email = nil,
19
+ idempotency_key = nil, tags = nil, limits = nil, expiry_date = nil)
20
+ super
21
+ @type = "businessVirtualCreditCard"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -5,7 +5,8 @@
5
5
  module Unit
6
6
  module Card
7
7
  class CreateBusinessVirtualDebitCardRequest
8
- attr_reader :account_id, :full_name, :date_of_birth, :address, :phone, :email, :idempotency_key, :tags, :limits
8
+ attr_reader :account_id, :full_name, :date_of_birth, :address, :phone, :email,
9
+ :idempotency_key, :tags, :limits, :expiry_date, :type
9
10
 
10
11
  # @param account_id [String]
11
12
  # @param full_name [FullName]
@@ -16,8 +17,9 @@ module Unit
16
17
  # @param idempotency_key [String] - optional
17
18
  # @param tags [Hash] - optional
18
19
  # @param limits [Hash] - optional
20
+ # @param expiry_date [String] - optional
19
21
  def initialize(account_id, full_name, date_of_birth, address, phone, email,
20
- idempotency_key, tags, limits)
22
+ idempotency_key = nil, tags = nil, limits = nil, expiry_date = nil)
21
23
  @account_id = account_id
22
24
  @full_name = full_name
23
25
  @date_of_birth = date_of_birth
@@ -27,12 +29,14 @@ module Unit
27
29
  @idempotency_key = idempotency_key
28
30
  @tags = tags
29
31
  @limits = limits
32
+ @expiry_date = expiry_date
33
+ @type = "businessVirtualDebitCard"
30
34
  end
31
35
 
32
36
  def to_json_api
33
37
  payload = {
34
38
  "data": {
35
- "type": "businessVirtualDebitCard",
39
+ "type": type,
36
40
  "attributes": {
37
41
  "fullName": full_name&.represent,
38
42
  "dateOfBirth": date_of_birth,
@@ -41,14 +45,14 @@ module Unit
41
45
  "email": email,
42
46
  "idempotencyKey": idempotency_key,
43
47
  "tags": tags,
44
- "limits": limits
45
- },
48
+ "limits": limits,
49
+ "expiryDate": expiry_date
50
+ }.compact!,
46
51
  "relationships": {
47
52
  "account": Unit::Types::Relationship.new("depositAccount", account_id).to_hash
48
53
  }
49
54
  }
50
55
  }
51
- payload[:data][:attributes].compact!
52
56
  payload.to_json
53
57
  end
54
58
  end
@@ -5,7 +5,8 @@
5
5
  module Unit
6
6
  module Card
7
7
  class CreateIndividualDebitCardRequest
8
- attr_reader :account_id, :customer_id, :shipping_address, :design, :additional_embossed_text, :idempotency_key, :tags, :limits, :print_only_business_name
8
+ attr_reader :account_id, :customer_id, :shipping_address, :design, :additional_embossed_text, :idempotency_key,
9
+ :tags, :limits, :print_only_business_name, :expiry_date
9
10
 
10
11
  # @param account_id [String]
11
12
  # @param customer_id [String] - optional
@@ -16,8 +17,9 @@ module Unit
16
17
  # @param tags [Hash] - optional
17
18
  # @param limits [Hash] - optional
18
19
  # @param print_only_business_name [Boolean] - optional
20
+ # @param expiry_date [String] - optional
19
21
  def initialize(account_id, customer_id = nil, shipping_address = nil, design = nil, additional_embossed_text = nil,
20
- idempotency_key = nil, tags = nil, limits = nil, print_only_business_name = nil)
22
+ idempotency_key = nil, tags = nil, limits = nil, print_only_business_name = nil, expiry_date = nil)
21
23
  @account_id = account_id
22
24
  @customer_id = customer_id
23
25
  @shipping_address = shipping_address
@@ -27,6 +29,7 @@ module Unit
27
29
  @tags = tags
28
30
  @limits = limits
29
31
  @print_only_business_name = print_only_business_name
32
+ @expiry_date = expiry_date
30
33
  end
31
34
 
32
35
  def to_json_api
@@ -40,7 +43,8 @@ module Unit
40
43
  "idempotencyKey": idempotency_key,
41
44
  "tags": tags,
42
45
  "limits": limits,
43
- "printOnlyBusinessName": print_only_business_name
46
+ "printOnlyBusinessName": print_only_business_name,
47
+ "expiryDate": expiry_date
44
48
  },
45
49
  "relationships": {
46
50
  "account": Unit::Types::Relationship.new("depositAccount", account_id).to_hash
@@ -5,19 +5,21 @@
5
5
  module Unit
6
6
  module Card
7
7
  class CreateIndividualVirtualCardRequest
8
- attr_reader :account_id, :customer_id, :idempotency_key, :tags, :limits
8
+ attr_reader :account_id, :customer_id, :idempotency_key, :tags, :limits, :expiry_date
9
9
 
10
10
  # @param account_id [String]
11
11
  # @param customer_id [String] - optional
12
12
  # @param idempotency_key [String] - optional
13
13
  # @param tags [Hash] - optional
14
14
  # @param limits [Hash] - optional
15
- def initialize(account_id, customer_id = nil, idempotency_key = nil, tags = nil, limits = nil)
15
+ # @param expiry_date [String] - optional
16
+ def initialize(account_id, customer_id = nil, idempotency_key = nil, tags = nil, limits = nil, expiry_date = nil)
16
17
  @account_id = account_id
17
18
  @customer_id = customer_id
18
19
  @idempotency_key = idempotency_key
19
20
  @tags = tags
20
21
  @limits = limits
22
+ @expiry_date = expiry_date
21
23
  end
22
24
 
23
25
  def to_json_api
@@ -27,7 +29,8 @@ module Unit
27
29
  "attributes": {
28
30
  "idempotencyKey": idempotency_key,
29
31
  "tags": tags,
30
- "limits": limits
32
+ "limits": limits,
33
+ "expiryDate": expiry_date
31
34
  },
32
35
  "relationships": {
33
36
  "account": Unit::Types::Relationship.new("depositAccount", account_id).to_hash
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to create business card request
4
+ # @see https://docs.unit.co/cards/#update-business-debit-card
5
+ module Unit
6
+ module Card
7
+ class PatchBusinessCardRequest
8
+ attr_reader :card_id, :shipping_address, :address, :phone, :email, :design, :tags, :limits, :type
9
+
10
+ # @param card_id [String]
11
+ # @param shipping_address [Address] - optional
12
+ # @param address [Address] - optional
13
+ # @param phone [Phone] - optional
14
+ # @param email [String] - optional
15
+ # @param design [String] - optional
16
+ # @param tags [Hash] - optional
17
+ # @param limits [Hash] - optional
18
+ def initialize(card_id, shipping_address = nil, address = nil, phone = nil, email = nil, design = nil, tags = nil, limits = nil)
19
+ @card_id = card_id
20
+ @shipping_address = shipping_address
21
+ @address = address
22
+ @phone = phone
23
+ @email = email
24
+ @design = design
25
+ @tags = tags
26
+ @limits = limits
27
+ @type = "businessDebitCard"
28
+ end
29
+
30
+ def to_json_api
31
+ payload = {
32
+ "data": {
33
+ "type": type,
34
+ "attributes": {
35
+ "shippingAddress": shipping_address,
36
+ "address": address,
37
+ "phone": phone,
38
+ "email": email,
39
+ "design": design,
40
+ "tags": tags,
41
+ "limits": limits
42
+ }
43
+ }
44
+ }
45
+ payload[:data][:attributes].compact!
46
+ payload.to_json
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to create business credit card request
4
+ # @see https://guides.unit.co/business-charge-cards/
5
+ module Unit
6
+ module Card
7
+ class PatchBusinessCreditCardRequest < PatchBusinessCardRequest
8
+ # @param card_id [String]
9
+ # @param shipping_address [Address] - optional
10
+ # @param address [Address] - optional
11
+ # @param phone [Phone] - optional
12
+ # @param email [String] - optional
13
+ # @param design [String] - optional
14
+ # @param tags [Hash] - optional
15
+ # @param limits [Hash] - optional
16
+ def initialize(card_id, shipping_address = nil, address = nil, phone = nil, email = nil, design = nil, tags = nil, limits = nil)
17
+ super
18
+ @type = "businessCreditCard"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to update a business virtual debit card
4
+ # @see https://docs.unit.co/cards/#update-business-virtual-debit-card
5
+ module Unit
6
+ module Card
7
+ class PatchBusinessVirtualCardRequest
8
+ attr_reader :card_id, :address, :phone, :email, :tags, :limits, :type
9
+
10
+ # @param card_id [String]
11
+ # @param address [Address] - optional
12
+ # @param phone [Phone] - optional
13
+ # @param email [String] - optional
14
+ # @param tags [Hash] - optional
15
+ # @param limits [Hash] - optional
16
+ def initialize(card_id, address = nil, phone = nil, email = nil, tags = nil, limits = nil)
17
+ @card_id = card_id
18
+ @address = address
19
+ @phone = phone
20
+ @email = email
21
+ @tags = tags
22
+ @limits = limits
23
+ @type = "businessVirtualDebitCard"
24
+ end
25
+
26
+ def to_json_api
27
+ payload = {
28
+ "data": {
29
+ "type": type,
30
+ "attributes": {
31
+ "address": address,
32
+ "phone": phone,
33
+ "email": email,
34
+ "tags": tags,
35
+ "limits": limits
36
+ }.compact
37
+ }
38
+ }
39
+ payload.to_json
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to update a business virtual credit card
4
+ # @see https://guides.unit.co/business-charge-cards/
5
+ module Unit
6
+ module Card
7
+ class PatchBusinessVirtualCreditCardRequest < PatchBusinessVirtualCardRequest
8
+ # @param card_id [String]
9
+ # @param address [Address] - optional
10
+ # @param phone [Phone] - optional
11
+ # @param email [String] - optional
12
+ # @param tags [Hash] - optional
13
+ # @param limits [Hash] - optional
14
+ def initialize(card_id, address = nil, phone = nil, email = nil, tags = nil, limits = nil)
15
+ super
16
+ @type = "businessVirtualCreditCard"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -12,7 +12,7 @@ module Unit
12
12
  # @param query [String] - optional
13
13
  # @param email [String] - optional
14
14
  # @param tags [Hash] - optional
15
- # @param status [String] - optional
15
+ # @param status [Array<String>] - optional
16
16
  # @param sort [String] - optional
17
17
  def initialize(limit = CUSTOMER_LIST_LIMIT, offset = CUSTOMER_LIST_OFFSET, query = nil, email = nil, tags = nil, status = nil,
18
18
  sort = nil)
@@ -31,8 +31,10 @@ module Unit
31
31
  "filter[query]": query,
32
32
  "filter[email]": email,
33
33
  "filter[tags]": tags,
34
- "filter[status]": status,
35
34
  "sort": sort }
35
+ status&.each_with_index&.map do |val, index|
36
+ params.merge!({ "filter[status][#{index}]": val })
37
+ end
36
38
  params.compact
37
39
  end
38
40
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unit
4
+ module Event
5
+ EVENT_LIST_LIMIT = 100
6
+ EVENT_LIST_OFFSET = 0
7
+
8
+ autoload :ListEventParams, "unit/models/event/list_event_params"
9
+ class << self
10
+ # Get event by id
11
+ # @see https://docs.unit.co/events#get-event
12
+ # @param event_id [String]
13
+ def get_event(event_id:)
14
+ Unit::Resource::EventResource.get(event_id)
15
+ end
16
+
17
+ # List events
18
+ # @see https://docs.unit.co/events#list-events
19
+ # @param limit [Integer]
20
+ # @param offset [Integer]
21
+ # @param type [Array<String>] - optional
22
+ # @param since [String] - optional
23
+ # @param _until [String] - optional
24
+ def list_events(limit: EVENT_LIST_LIMIT, offset: EVENT_LIST_OFFSET, type: nil, since: nil, _until: nil)
25
+ params = ListEventParams.new(limit, offset, type, since, _until)
26
+ Unit::Resource::EventResource.list(params)
27
+ end
28
+
29
+ # Fire event
30
+ # @see https://docs.unit.co/events#fire-event
31
+ # @param event_id [String]
32
+ def fire_event(event_id:)
33
+ Unit::Resource::EventResource.fire(event_id)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # params for listing events
4
+ # https://docs.unit.co/events#list-events
5
+ module Unit
6
+ module Event
7
+ class ListEventParams
8
+ attr_reader :limit, :offset, :type, :since, :_until
9
+
10
+ # @param limit [Integer]
11
+ # @param offset [Integer]
12
+ # @param type [Array<String>] - optional
13
+ # @param since [String] - optional
14
+ # @param _until [String] - optional
15
+ def initialize(limit = EVENT_LIST_LIMIT, offset = EVENT_LIST_OFFSET, type = nil, since = nil, _until = nil)
16
+ @limit = limit
17
+ @offset = offset
18
+ @type = type
19
+ @since = since
20
+ @_until = _until
21
+ end
22
+
23
+ def to_hash
24
+ params = {
25
+ "page[limit]": limit,
26
+ "page[offset]": offset,
27
+ "filter[since]": since,
28
+ "filter[until]": _until
29
+ }
30
+ type&.each_with_index&.map do |val, index|
31
+ params.merge!({ "filter[type][#{index}]": val })
32
+ end
33
+ params.compact
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to create fee
4
+ # @see https://docs.unit.co/fees/#create-fee
5
+ module Unit
6
+ module Fee
7
+ class CreateFeeRequest
8
+ attr_reader :account_id, :amount, :description, :tags, :idempotency_key
9
+
10
+ # @param account_id [String]
11
+ # @param amount [Integer]
12
+ # @param description [String]
13
+ # @param tags [Hash] - optional
14
+ # @param idempotency_key [String] - optional
15
+ def initialize(account_id, amount, description, tags = nil, idempotency_key = nil)
16
+ @account_id = account_id
17
+ @amount = amount
18
+ @description = description
19
+ @tags = tags
20
+ @idempotency_key = idempotency_key
21
+ end
22
+
23
+ def to_json_api
24
+ payload = {
25
+ "data": {
26
+ "type": "fee",
27
+ "attributes": {
28
+ "amount": amount,
29
+ "description": description,
30
+ "tags": tags,
31
+ "idempotencyKey": idempotency_key
32
+ },
33
+ "relationships": {
34
+ "account": Unit::Types::Relationship.new("depositAccount", account_id).to_hash
35
+ }
36
+ }
37
+ }
38
+ payload[:data][:attributes].compact!
39
+ payload.to_json
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unit
4
+ module Fee
5
+ autoload :CreateFeeRequest, "unit/models/fee/create_fee_request"
6
+ autoload :ReverseFeeRequest, "unit/models/fee/reverse_fee_request"
7
+
8
+ class << self
9
+ # Request to create fee
10
+ # @see https://docs.unit.co/fees/#create-fee
11
+ # @param account_id [String]
12
+ # @param amount [Integer]
13
+ # @param description [String]
14
+ # @param tags [Hash] - optional
15
+ # @param idempotency_key [String] - optional
16
+ def create_fee(account_id:, amount:, description:, tags: nil, idempotency_key: nil)
17
+ request = CreateFeeRequest.new(account_id, amount, description, tags, idempotency_key)
18
+ Unit::Resource::FeeResource.create_fee(request)
19
+ end
20
+
21
+ # Request to reverse a fee
22
+ # @see https://docs.unit.co/fees/#reverse-fee
23
+ # @param account_id [String]
24
+ # @param transaction_id [Integer]
25
+ # @param description [String]
26
+ # @param tags [Hash] - optional
27
+ # @param idempotency_key [String] - optional
28
+ def reverse_fee(account_id:, transaction_id:, description:, tags: nil, idempotency_key: nil)
29
+ request = ReverseFeeRequest.new(account_id, transaction_id, description, tags, idempotency_key)
30
+ Unit::Resource::FeeResource.reverse_fee(request)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Request to reverse a fee
4
+ # @see https://docs.unit.co/fees/#reverse-fee
5
+ module Unit
6
+ module Fee
7
+ class ReverseFeeRequest
8
+ attr_reader :account_id, :transaction_id, :description, :tags, :idempotency_key
9
+
10
+ # @param account_id [String]
11
+ # @param transaction_id [Integer]
12
+ # @param description [String]
13
+ # @param tags [Hash] - optional
14
+ # @param idempotency_key [String] - optional
15
+ def initialize(account_id, transaction_id, description, tags = nil, idempotency_key = nil)
16
+ @account_id = account_id
17
+ @transaction_id = transaction_id
18
+ @description = description
19
+ @tags = tags
20
+ @idempotency_key = idempotency_key
21
+ end
22
+
23
+ def to_json_api
24
+ payload = {
25
+ "data": {
26
+ "type": "feeReversal",
27
+ "attributes": {
28
+ "description": description,
29
+ "tags": tags,
30
+ "idempotencyKey": idempotency_key
31
+ },
32
+ "relationships": {
33
+ "account": Unit::Types::Relationship.new("depositAccount", account_id).to_hash,
34
+ "transaction": Unit::Types::Relationship.new("transaction", transaction_id).to_hash
35
+ }
36
+ }
37
+ }
38
+ payload[:data][:attributes].compact!
39
+ payload.to_json
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # class to create a batch release using
4
+ module Unit
5
+ module Payment
6
+ class BatchReleaseRequestBuilder
7
+ def initialize
8
+ @requests = []
9
+ end
10
+
11
+ def add_request(account_id, batch_account_id, amount, description, sender_name, sender_address, sender_account_number, tags = nil, idempotency_key = nil)
12
+ request = Unit::Payment::CreateBatchReleaseRequest.new(account_id, batch_account_id, amount, description, sender_name, sender_address, sender_account_number, tags, idempotency_key)
13
+ @requests << request.to_hash
14
+ end
15
+
16
+ def to_hash
17
+ { "data": @requests }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ # class for serializing payment requests
6
+ module Unit
7
+ module Payment
8
+ class BulkPaymentRequest
9
+ def self.serialize(requests)
10
+ payload = requests.map(&:change_attributes)
11
+ { "data": payload }.to_json
12
+ end
13
+ end
14
+ end
15
+ end
@@ -18,8 +18,8 @@ module Unit
18
18
  # @param tags [Hash] - optional
19
19
  # @param same_day [Boolean] - optional
20
20
  # @param sec_code [String] - optional
21
- def initialize(account_id, amount, direction, counterparty, description,
22
- addenda = nil, idempotency_key = nil, tags = nil, same_day = nil, sec_code = nil)
21
+ def initialize(account_id:, amount:, direction:, counterparty:, description:,
22
+ addenda: nil, idempotency_key: nil, tags: nil, same_day: nil, sec_code: nil)
23
23
  @account_id = account_id
24
24
  @amount = amount
25
25
  @direction = direction
@@ -34,27 +34,37 @@ module Unit
34
34
 
35
35
  def to_json_api
36
36
  payload = {
37
- "data": {
38
- "type": "achPayment",
39
- "attributes": {
40
- amount: amount,
41
- direction: direction,
42
- counterparty: counterparty.represent,
43
- description: description,
44
- addenda: addenda,
45
- idempotencyKey: idempotency_key,
46
- tags: tags,
47
- sameDay: same_day,
48
- secCode: sec_code
49
- },
50
- "relationships": {
51
- "account": Unit::Types::Relationship.new("account", account_id).to_hash
52
- }
53
- }
37
+ "data": to_hash
54
38
  }
55
39
  payload[:data][:attributes].compact!
56
40
  payload.to_json
57
41
  end
42
+
43
+ def to_hash
44
+ {
45
+ "type": "achPayment",
46
+ "attributes": {
47
+ amount: amount,
48
+ direction: direction,
49
+ counterparty: counterparty.represent,
50
+ description: description,
51
+ addenda: addenda,
52
+ idempotencyKey: idempotency_key,
53
+ tags: tags,
54
+ sameDay: same_day,
55
+ secCode: sec_code
56
+ },
57
+ "relationships": {
58
+ "account": Unit::Types::Relationship.new("account", account_id).to_hash
59
+ }
60
+ }
61
+ end
62
+
63
+ def change_attributes
64
+ payload = to_hash
65
+ payload[:attributes].compact!
66
+ payload
67
+ end
58
68
  end
59
69
  end
60
70
  end