payload-api 0.4.1 → 0.6.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -0
  3. data/LICENSE +1 -1
  4. data/README.md +23 -2
  5. data/lib/payload/arm/attr.rb +169 -0
  6. data/lib/payload/arm/object.rb +44 -1
  7. data/lib/payload/arm/request.rb +66 -6
  8. data/lib/payload/arm/session.rb +13 -9
  9. data/lib/payload/exceptions.rb +15 -0
  10. data/lib/payload/objects.rb +81 -18
  11. data/lib/payload/version.rb +2 -2
  12. data/lib/payload.rb +15 -5
  13. data/spec/objects/v1/access_token_spec.rb +19 -0
  14. data/spec/objects/v1/account_spec.rb +97 -0
  15. data/spec/objects/v1/billing_spec.rb +54 -0
  16. data/spec/objects/v1/invoice_spec.rb +53 -0
  17. data/spec/objects/v1/payment_link_spec.rb +50 -0
  18. data/spec/objects/v1/payment_method_spec.rb +106 -0
  19. data/spec/objects/{payment_spec.rb → v1/payment_spec.rb} +5 -6
  20. data/spec/objects/v1/session_spec.rb +89 -0
  21. data/spec/objects/v1/transaction_spec.rb +55 -0
  22. data/spec/objects/v2/account_spec.rb +211 -0
  23. data/spec/objects/v2/invoice_spec.rb +53 -0
  24. data/spec/objects/v2/payment_method_spec.rb +106 -0
  25. data/spec/objects/v2/transaction_spec.rb +48 -0
  26. data/spec/payload/arm/arm_request_query_spec.rb +226 -0
  27. data/spec/payload/arm/attr_spec.rb +216 -0
  28. data/spec/payload/arm/object_spec.rb +114 -0
  29. data/spec/payload/arm/request_format_integration_spec.rb +166 -0
  30. data/spec/payload/arm/request_spec.rb +259 -1
  31. data/spec/payload/arm/session_spec.rb +40 -0
  32. data/spec/payload/exceptions_spec.rb +82 -0
  33. data/spec/support/helpers/v1_helpers.rb +159 -0
  34. data/spec/support/helpers/v2_helpers.rb +205 -0
  35. data/spec/support/helpers.rb +15 -0
  36. data/spec/support/helpers_spec.rb +21 -0
  37. metadata +28 -6
@@ -0,0 +1,205 @@
1
+ class V2Helpers
2
+ attr_reader :session
3
+
4
+ def initialize(session)
5
+ @session = session
6
+ end
7
+
8
+ def create_customer_account(name: 'Test', email: 'test@example.com')
9
+ session.Account.create(
10
+ type: 'customer',
11
+ name: name,
12
+ contact_details: {
13
+ email: email
14
+ }
15
+ )
16
+ end
17
+
18
+ def create_processing_account
19
+ org = session.Profile.all()[0]
20
+ session.Account.create(
21
+ type: 'processing',
22
+ name: 'Processing Account',
23
+ processing: {
24
+ status: { funding: 'pending' },
25
+ settings_id: org.processing_settings_id,
26
+ },
27
+ payment_methods: [session.PaymentMethod.new(
28
+ type: 'bank_account',
29
+ bank_account: {
30
+ account_number: '123456789',
31
+ routing_number: '036001808',
32
+ account_type: 'checking'
33
+ },
34
+ billing_address: {
35
+ postal_code: '11111',
36
+ },
37
+ account_defaults: {
38
+ funding: 'all',
39
+ }
40
+ )],
41
+ entity: {
42
+ type: 'business',
43
+ legal_name: 'Example',
44
+ country: 'US',
45
+ phone_number: '123 123-1234',
46
+ tax_id: { value: '123 12 1234' },
47
+ address: {
48
+ address_line_1: '123 Example St',
49
+ city: 'New York',
50
+ state_province: 'NY',
51
+ postal_code: '11111',
52
+ },
53
+ business: {
54
+ category: 'real_estate',
55
+ structure: 'llc',
56
+ website: 'https://example.com',
57
+ formation: {
58
+ state_province: 'NY',
59
+ date: '2019-10-01',
60
+ },
61
+ primary_contact: {
62
+ name: 'John Smith',
63
+ email: 'johnsmith@gmail.com',
64
+ },
65
+ stakeholders: [
66
+ {
67
+ country: 'US',
68
+ personal_information: {
69
+ full_name: 'John Smith',
70
+ email: 'johnsmith@gmail.com',
71
+ birth_date: '1990-05-10',
72
+ phone_number: '123 123-1234',
73
+ },
74
+ address: {
75
+ address_line_1: '123 Example St',
76
+ city: 'New York',
77
+ state_province: 'NY',
78
+ postal_code: '11111',
79
+ },
80
+ govt_id: {
81
+ tax_id: { value: '123 12 1234' },
82
+ },
83
+ association: {
84
+ ownership: {
85
+ percentage: 100,
86
+ years_owned: 5,
87
+ },
88
+ roles: ['principal_officer'],
89
+ title: 'CEO',
90
+ },
91
+ },
92
+ ],
93
+ },
94
+ },
95
+ )
96
+ end
97
+
98
+ def create_card_payment(processing_id, amount: nil, description: nil, customer_id: nil, invoice_id: nil)
99
+ sender = {
100
+ method: session.PaymentMethod.new(
101
+ type: 'card',
102
+ card: {
103
+ card_number: '4242 4242 4242 4242',
104
+ expiry: '12/35',
105
+ card_code: '123',
106
+ },
107
+ billing_address: {
108
+ postal_code: '11111'
109
+ }
110
+ )
111
+ }
112
+ if customer_id
113
+ sender = sender.merge({
114
+ account_id: customer_id,
115
+ })
116
+ end
117
+ payment = {
118
+ type: 'payment',
119
+ amount: amount || rand * 100,
120
+ description: description || 'Test Payment',
121
+ sender: sender,
122
+ }
123
+ if invoice_id
124
+ payment = payment.merge({
125
+ invoice_allocations: [{invoice_id: invoice_id}]
126
+ })
127
+ end
128
+ if processing_id
129
+ payment = payment.merge({
130
+ receiver: {
131
+ account_id: processing_id,
132
+ }
133
+ })
134
+ end
135
+ session.Transaction.create(payment)
136
+ end
137
+
138
+ def create_bank_payment
139
+ session.Transaction.create(
140
+ type: 'payment',
141
+ amount: rand * 1000,
142
+ sender: {
143
+ method: session.PaymentMethod.new(
144
+ type: 'bank_account',
145
+ account_holder: 'First Last',
146
+ bank_account: {
147
+ account_number: '123456789',
148
+ currency: 'USD',
149
+ routing_number: '036001808',
150
+ account_type: 'checking',
151
+ account_class: 'personal',
152
+ },
153
+ )
154
+ }
155
+ )
156
+ end
157
+
158
+ def create_invoice(processing_account, customer_account)
159
+ session.Invoice.create(
160
+ due_date: Date.today.strftime('%Y-%m-%d'),
161
+ biller: {
162
+ account_id: processing_account.id,
163
+ },
164
+ payer: {
165
+ account_id: customer_account.id,
166
+ },
167
+ items: [
168
+ {
169
+ type: 'line_item',
170
+ line_item: {
171
+ value: 29.99,
172
+ }
173
+ }
174
+ ],
175
+ )
176
+ end
177
+
178
+ def create_blind_refund(amount, processing_id)
179
+ session.Transaction.create(
180
+ type: 'refund',
181
+ amount: amount,
182
+ sender: {
183
+ account_id: processing_id,
184
+ },
185
+ receiver: {
186
+ method: session.PaymentMethod.new(
187
+ type: 'card',
188
+ card: {
189
+ card_number: '4242 4242 4242 4242',
190
+ expiry: '12/30',
191
+ card_code: '123'
192
+ },
193
+ billing_address: { postal_code: '11111' }
194
+ )
195
+ }
196
+ )
197
+ end
198
+
199
+ def create_refund(payment, amount: nil)
200
+ session.Transaction.create(
201
+ type: 'refund',
202
+ transfers: [{assoc_transaction_id: payment.id, amount: amount || payment.amount}]
203
+ )
204
+ end
205
+ end
@@ -0,0 +1,15 @@
1
+ require 'payload'
2
+ require 'date'
3
+
4
+ RSpec.shared_context 'test helpers' do
5
+ before(:all) do
6
+ Payload.api_key = ENV['TEST_SECRET_KEY']
7
+ if ENV['TEST_API_URL']
8
+ Payload.api_url = ENV['TEST_API_URL']
9
+ end
10
+ end
11
+ end
12
+
13
+ # Load version-specific helpers
14
+ require_relative 'helpers/v1_helpers'
15
+ require_relative 'helpers/v2_helpers'
@@ -0,0 +1,21 @@
1
+ require 'payload'
2
+ require_relative 'helpers'
3
+
4
+ RSpec.describe 'Test helpers API versions' do
5
+ include_context 'test helpers'
6
+
7
+ describe '#create_processing_account' do
8
+ [1, 2].each do |api_version|
9
+ context "api_version=#{api_version}" do
10
+ let(:session) { Payload::Session.new(Payload.api_key, Payload.api_url, api_version) }
11
+ let(:h) { Object.const_get("V#{api_version}Helpers").new(session) }
12
+
13
+ it 'returns a processing account' do
14
+ account = h.create_processing_account
15
+ expect(account).to respond_to(:id)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payload-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Payload
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-08 00:00:00.000000000 Z
11
+ date: 2026-02-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple library to interface with the Payload API. See https://docs.payload.com
14
14
  for details.
@@ -22,6 +22,7 @@ files:
22
22
  - LICENSE
23
23
  - README.md
24
24
  - lib/payload.rb
25
+ - lib/payload/arm/attr.rb
25
26
  - lib/payload/arm/object.rb
26
27
  - lib/payload/arm/request.rb
27
28
  - lib/payload/arm/session.rb
@@ -30,14 +31,35 @@ files:
30
31
  - lib/payload/utils.rb
31
32
  - lib/payload/version.rb
32
33
  - payload.gemspec
33
- - spec/objects/payment_spec.rb
34
+ - spec/objects/v1/access_token_spec.rb
35
+ - spec/objects/v1/account_spec.rb
36
+ - spec/objects/v1/billing_spec.rb
37
+ - spec/objects/v1/invoice_spec.rb
38
+ - spec/objects/v1/payment_link_spec.rb
39
+ - spec/objects/v1/payment_method_spec.rb
40
+ - spec/objects/v1/payment_spec.rb
41
+ - spec/objects/v1/session_spec.rb
42
+ - spec/objects/v1/transaction_spec.rb
43
+ - spec/objects/v2/account_spec.rb
44
+ - spec/objects/v2/invoice_spec.rb
45
+ - spec/objects/v2/payment_method_spec.rb
46
+ - spec/objects/v2/transaction_spec.rb
47
+ - spec/payload/arm/arm_request_query_spec.rb
48
+ - spec/payload/arm/attr_spec.rb
49
+ - spec/payload/arm/object_spec.rb
50
+ - spec/payload/arm/request_format_integration_spec.rb
34
51
  - spec/payload/arm/request_spec.rb
35
52
  - spec/payload/arm/session_spec.rb
53
+ - spec/payload/exceptions_spec.rb
54
+ - spec/support/helpers.rb
55
+ - spec/support/helpers/v1_helpers.rb
56
+ - spec/support/helpers/v2_helpers.rb
57
+ - spec/support/helpers_spec.rb
36
58
  homepage: https://docs.payload.com
37
59
  licenses:
38
60
  - MIT
39
61
  metadata: {}
40
- post_install_message:
62
+ post_install_message:
41
63
  rdoc_options: []
42
64
  require_paths:
43
65
  - lib
@@ -53,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
75
  version: '0'
54
76
  requirements: []
55
77
  rubygems_version: 3.2.15
56
- signing_key:
78
+ signing_key:
57
79
  specification_version: 4
58
80
  summary: Payload ruby library
59
81
  test_files: []