airwallex 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +63 -6
- data/docs/internal/20251125_v0.1.0_publication_checklist.md +162 -0
- data/lib/airwallex/version.rb +1 -1
- data/lib/airwallex.rb +3 -0
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 24329b3008cb6844904a266d7cfed62b05bb0743935edd22a7ea1e3c1a98606e
|
|
4
|
+
data.tar.gz: 73d9c743bfa6da7e652da8663b98965985aefcbe575d373f322a7023232278f3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: caae41e87cb5071ed6d8fdba00d873c6d90a6eabf20406a33e6261f960d8b65cf4355a71df4cac01c60ea5cb74705e9491843f74c1458559c8e24c1d5bebb044
|
|
7
|
+
data.tar.gz: 0b0924430871eb4065f78b75e2e1a6cad937089ebfec9801dbebcb8d5b7aa6e3ae49bbd882f8adb8406d0c3a17fd7a81956495dd9e194ea9349c41109b1faf2e
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.2.0] - 2025-11-25
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Refund resource (create, retrieve, list)
|
|
7
|
+
- PaymentMethod resource (create, retrieve, list, update, delete, detach)
|
|
8
|
+
- Customer resource (create, retrieve, list, update, delete)
|
|
9
|
+
- Customer#payment_methods convenience method
|
|
10
|
+
- 28 new tests (215 total)
|
|
11
|
+
|
|
3
12
|
## [0.1.0] - 2025-11-25
|
|
4
13
|
|
|
5
14
|
### Added
|
data/README.md
CHANGED
|
@@ -102,6 +102,58 @@ transfer = Airwallex::Transfer.create(
|
|
|
102
102
|
)
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
### Processing Refunds
|
|
106
|
+
|
|
107
|
+
```ruby
|
|
108
|
+
# Create a full refund
|
|
109
|
+
refund = Airwallex::Refund.create(
|
|
110
|
+
payment_intent_id: payment_intent.id,
|
|
111
|
+
amount: 100.00,
|
|
112
|
+
reason: 'requested_by_customer'
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Create a partial refund
|
|
116
|
+
partial_refund = Airwallex::Refund.create(
|
|
117
|
+
payment_intent_id: payment_intent.id,
|
|
118
|
+
amount: 50.00
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# List all refunds for a payment
|
|
122
|
+
refunds = Airwallex::Refund.list(payment_intent_id: payment_intent.id)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Managing Payment Methods
|
|
126
|
+
|
|
127
|
+
```ruby
|
|
128
|
+
# Create a customer
|
|
129
|
+
customer = Airwallex::Customer.create(
|
|
130
|
+
email: 'customer@example.com',
|
|
131
|
+
first_name: 'John',
|
|
132
|
+
last_name: 'Doe'
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
# Save a payment method
|
|
136
|
+
payment_method = Airwallex::PaymentMethod.create(
|
|
137
|
+
type: 'card',
|
|
138
|
+
card: {
|
|
139
|
+
number: '4242424242424242',
|
|
140
|
+
expiry_month: '12',
|
|
141
|
+
expiry_year: '2025',
|
|
142
|
+
cvc: '123'
|
|
143
|
+
},
|
|
144
|
+
billing: {
|
|
145
|
+
first_name: 'John',
|
|
146
|
+
email: 'customer@example.com'
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# Use saved payment method
|
|
151
|
+
payment_intent.confirm(payment_method_id: payment_method.id)
|
|
152
|
+
|
|
153
|
+
# List customer's payment methods
|
|
154
|
+
methods = customer.payment_methods
|
|
155
|
+
```
|
|
156
|
+
|
|
105
157
|
## Usage
|
|
106
158
|
|
|
107
159
|
### Authentication
|
|
@@ -263,22 +315,27 @@ Airwallex.configure do |config|
|
|
|
263
315
|
end
|
|
264
316
|
```
|
|
265
317
|
|
|
266
|
-
## API Coverage
|
|
318
|
+
## API Coverage
|
|
267
319
|
|
|
268
320
|
### Currently Implemented Resources
|
|
269
321
|
|
|
270
|
-
- **Payment Acceptance**:
|
|
271
|
-
-
|
|
322
|
+
- **Payment Acceptance**:
|
|
323
|
+
- PaymentIntent (create, retrieve, list, update, confirm, cancel, capture)
|
|
324
|
+
- Refund (create, retrieve, list)
|
|
325
|
+
- PaymentMethod (create, retrieve, list, update, delete, detach)
|
|
326
|
+
- Customer (create, retrieve, list, update, delete)
|
|
327
|
+
- **Payouts**:
|
|
328
|
+
- Transfer (create, retrieve, list, cancel)
|
|
329
|
+
- Beneficiary (create, retrieve, list, delete)
|
|
272
330
|
- **Webhooks**: Event handling, HMAC-SHA256 signature verification
|
|
273
331
|
|
|
274
332
|
### Coming in Future Versions
|
|
275
333
|
|
|
276
|
-
-
|
|
334
|
+
- Disputes and chargebacks
|
|
277
335
|
- Foreign exchange (rates, quotes, conversions)
|
|
278
|
-
- Payment methods management
|
|
279
336
|
- Global accounts
|
|
280
337
|
- Card issuing
|
|
281
|
-
-
|
|
338
|
+
- Batch transfers
|
|
282
339
|
|
|
283
340
|
## Environment Support
|
|
284
341
|
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# v0.1.0 Publication Checklist
|
|
2
|
+
|
|
3
|
+
**Status:** ✅ READY FOR PUBLICATION
|
|
4
|
+
**Date:** November 25, 2025
|
|
5
|
+
|
|
6
|
+
## Pre-Publication Verification
|
|
7
|
+
|
|
8
|
+
### Code Quality ✅
|
|
9
|
+
- [x] All 187 tests passing
|
|
10
|
+
- [x] 0 RSpec failures
|
|
11
|
+
- [x] 0 Rubocop offenses
|
|
12
|
+
- [x] Test coverage: 100% of implemented features
|
|
13
|
+
- [x] No security vulnerabilities
|
|
14
|
+
|
|
15
|
+
### Gem Build ✅
|
|
16
|
+
- [x] Gem builds successfully: `airwallex-0.1.0.gem`
|
|
17
|
+
- [x] All required files included
|
|
18
|
+
- [x] No build errors (only metadata warnings)
|
|
19
|
+
- [x] Gemspec metadata complete
|
|
20
|
+
|
|
21
|
+
### Documentation ✅
|
|
22
|
+
- [x] README updated to reflect actual v0.1.0 implementation
|
|
23
|
+
- [x] CHANGELOG.md updated with detailed release notes
|
|
24
|
+
- [x] No over-promising of unimplemented features
|
|
25
|
+
- [x] Clear MVP messaging
|
|
26
|
+
- [x] Usage examples accurate
|
|
27
|
+
|
|
28
|
+
### Implementation ✅
|
|
29
|
+
- [x] Core infrastructure complete
|
|
30
|
+
- [x] 3 resources implemented (PaymentIntent, Transfer, Beneficiary)
|
|
31
|
+
- [x] Authentication with auto-refresh
|
|
32
|
+
- [x] Pagination support
|
|
33
|
+
- [x] Webhook verification
|
|
34
|
+
- [x] Error handling
|
|
35
|
+
- [x] Idempotency support
|
|
36
|
+
|
|
37
|
+
## What's Included in v0.1.0
|
|
38
|
+
|
|
39
|
+
### Core Infrastructure
|
|
40
|
+
- Configuration management (sandbox/production)
|
|
41
|
+
- HTTP client with Faraday
|
|
42
|
+
- Bearer token authentication with automatic refresh
|
|
43
|
+
- Thread-safe token management
|
|
44
|
+
- 10 exception classes with proper hierarchy
|
|
45
|
+
- Utility helpers (dates, money, UUIDs)
|
|
46
|
+
|
|
47
|
+
### Resources
|
|
48
|
+
1. **PaymentIntent**
|
|
49
|
+
- create, retrieve, list, update
|
|
50
|
+
- confirm, cancel, capture
|
|
51
|
+
|
|
52
|
+
2. **Transfer**
|
|
53
|
+
- create, retrieve, list
|
|
54
|
+
- cancel
|
|
55
|
+
|
|
56
|
+
3. **Beneficiary**
|
|
57
|
+
- create, retrieve, list, delete
|
|
58
|
+
|
|
59
|
+
### API Operations
|
|
60
|
+
- Create mixin
|
|
61
|
+
- Retrieve mixin
|
|
62
|
+
- List mixin (with pagination)
|
|
63
|
+
- Update mixin (with dirty tracking)
|
|
64
|
+
- Delete mixin
|
|
65
|
+
|
|
66
|
+
### Additional Features
|
|
67
|
+
- ListObject with Enumerable interface
|
|
68
|
+
- Cursor-based and offset-based pagination
|
|
69
|
+
- Auto-paging iteration
|
|
70
|
+
- HMAC-SHA256 webhook verification
|
|
71
|
+
- Automatic idempotency key injection
|
|
72
|
+
- Multi-environment support
|
|
73
|
+
|
|
74
|
+
## What's NOT Included (Future Versions)
|
|
75
|
+
|
|
76
|
+
- Refunds and disputes
|
|
77
|
+
- Foreign exchange (rates, quotes, conversions)
|
|
78
|
+
- Payment methods management
|
|
79
|
+
- Global accounts
|
|
80
|
+
- Card issuing
|
|
81
|
+
- Batch operations
|
|
82
|
+
- Advanced retry logic
|
|
83
|
+
- OAuth support
|
|
84
|
+
- Connected accounts
|
|
85
|
+
|
|
86
|
+
## Publication Steps
|
|
87
|
+
|
|
88
|
+
### 1. Final Git Commit
|
|
89
|
+
```bash
|
|
90
|
+
git add -A
|
|
91
|
+
git commit -m "Release v0.1.0 - MVP with payment acceptance and payouts"
|
|
92
|
+
git tag -a v0.1.0 -m "Version 0.1.0"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 2. Push to GitHub
|
|
96
|
+
```bash
|
|
97
|
+
git push origin sprint1
|
|
98
|
+
git push origin v0.1.0
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 3. Publish to RubyGems
|
|
102
|
+
```bash
|
|
103
|
+
gem build airwallex.gemspec
|
|
104
|
+
gem push airwallex-0.1.0.gem
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 4. Post-Publication
|
|
108
|
+
- Create GitHub release with changelog
|
|
109
|
+
- Monitor for initial feedback
|
|
110
|
+
- Prepare Sprint 3 roadmap
|
|
111
|
+
|
|
112
|
+
## Risk Assessment
|
|
113
|
+
|
|
114
|
+
### Low Risk ✅
|
|
115
|
+
- Clean test suite (no flaky tests)
|
|
116
|
+
- No external dependencies on proprietary code
|
|
117
|
+
- MIT license (clear and permissive)
|
|
118
|
+
- Conservative API surface (easy to extend)
|
|
119
|
+
|
|
120
|
+
### Mitigated Risks ✅
|
|
121
|
+
- Over-promising: README now accurately reflects v0.1.0
|
|
122
|
+
- Breaking changes: Clear MVP messaging sets expectations
|
|
123
|
+
- Support burden: Limited scope reduces support surface
|
|
124
|
+
|
|
125
|
+
## Post-Release Monitoring
|
|
126
|
+
|
|
127
|
+
### Week 1
|
|
128
|
+
- Monitor RubyGems download stats
|
|
129
|
+
- Watch for GitHub issues
|
|
130
|
+
- Respond to early adopter feedback
|
|
131
|
+
|
|
132
|
+
### Week 2-4
|
|
133
|
+
- Gather feature requests
|
|
134
|
+
- Plan Sprint 3 priorities
|
|
135
|
+
- Document common usage patterns
|
|
136
|
+
|
|
137
|
+
## Success Metrics
|
|
138
|
+
|
|
139
|
+
### Technical
|
|
140
|
+
- Gem installs without errors
|
|
141
|
+
- No critical bugs reported
|
|
142
|
+
- Test suite remains green
|
|
143
|
+
|
|
144
|
+
### Adoption
|
|
145
|
+
- RubyGems downloads > 10 in first week
|
|
146
|
+
- At least 1 star on GitHub
|
|
147
|
+
- No blocking issues reported
|
|
148
|
+
|
|
149
|
+
## Next Version Roadmap (v0.2.0)
|
|
150
|
+
|
|
151
|
+
Potential features based on priority:
|
|
152
|
+
1. Refunds resource
|
|
153
|
+
2. PaymentMethod resource
|
|
154
|
+
3. Enhanced error handling with retry logic
|
|
155
|
+
4. More comprehensive documentation
|
|
156
|
+
5. Foreign exchange resources
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
**Approval:** ✅ Ready for publication
|
|
161
|
+
**Reviewer:** Development team
|
|
162
|
+
**Final Check:** All systems green
|
data/lib/airwallex/version.rb
CHANGED
data/lib/airwallex.rb
CHANGED
|
@@ -24,6 +24,9 @@ require_relative "airwallex/api_resource"
|
|
|
24
24
|
require_relative "airwallex/resources/payment_intent"
|
|
25
25
|
require_relative "airwallex/resources/transfer"
|
|
26
26
|
require_relative "airwallex/resources/beneficiary"
|
|
27
|
+
require_relative "airwallex/resources/refund"
|
|
28
|
+
require_relative "airwallex/resources/payment_method"
|
|
29
|
+
require_relative "airwallex/resources/customer"
|
|
27
30
|
|
|
28
31
|
module Airwallex
|
|
29
32
|
class << self
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: airwallex
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chayut Orapinpatipat
|
|
@@ -73,6 +73,7 @@ files:
|
|
|
73
73
|
- docs/internal/20251125_sprint_2_completed.md
|
|
74
74
|
- docs/internal/20251125_sprint_2_plan.md
|
|
75
75
|
- docs/internal/20251125_sprint_2_unit_tests_completed.md
|
|
76
|
+
- docs/internal/20251125_v0.1.0_publication_checklist.md
|
|
76
77
|
- docs/research/Airwallex API Endpoint Research.md
|
|
77
78
|
- docs/research/Airwallex API Research for Ruby Gem.md
|
|
78
79
|
- lib/airwallex.rb
|
|
@@ -95,12 +96,12 @@ files:
|
|
|
95
96
|
- lib/airwallex/version.rb
|
|
96
97
|
- lib/airwallex/webhook.rb
|
|
97
98
|
- sig/airwallex.rbs
|
|
98
|
-
homepage: https://
|
|
99
|
+
homepage: https://www.sentia.com.au
|
|
99
100
|
licenses:
|
|
100
101
|
- MIT
|
|
101
102
|
metadata:
|
|
102
103
|
allowed_push_host: https://rubygems.org
|
|
103
|
-
homepage_uri: https://
|
|
104
|
+
homepage_uri: https://www.sentia.com.au
|
|
104
105
|
source_code_uri: https://github.com/Sentia/airwallex
|
|
105
106
|
changelog_uri: https://github.com/Sentia/airwallex/blob/main/CHANGELOG.md
|
|
106
107
|
documentation_uri: https://rubydoc.info/gems/airwallex
|