lemonsqueezy 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env.example +2 -1
- data/Gemfile +2 -1
- data/Gemfile.lock +13 -9
- data/README.md +203 -65
- data/bin/console +3 -1
- data/lib/lemon_squeezy/client.rb +57 -59
- data/lib/lemon_squeezy/configuration.rb +12 -0
- data/lib/lemon_squeezy/models/checkout.rb +46 -0
- data/lib/lemon_squeezy/models/customer.rb +52 -0
- data/lib/lemon_squeezy/models/discount.rb +47 -0
- data/lib/lemon_squeezy/models/discount_redemption.rb +19 -0
- data/lib/lemon_squeezy/models/file.rb +19 -0
- data/lib/lemon_squeezy/models/license.rb +24 -0
- data/lib/lemon_squeezy/models/license_key.rb +32 -0
- data/lib/lemon_squeezy/models/license_key_instance.rb +19 -0
- data/lib/lemon_squeezy/models/order.rb +24 -0
- data/lib/lemon_squeezy/models/price.rb +19 -0
- data/lib/lemon_squeezy/models/product.rb +19 -0
- data/lib/lemon_squeezy/models/store.rb +19 -0
- data/lib/lemon_squeezy/models/subscription.rb +99 -0
- data/lib/lemon_squeezy/models/subscription_invoice.rb +19 -0
- data/lib/lemon_squeezy/models/subscription_item.rb +38 -0
- data/lib/lemon_squeezy/models/subscription_usage.rb +4 -0
- data/lib/lemon_squeezy/models/user.rb +14 -0
- data/lib/lemon_squeezy/models/variant.rb +19 -0
- data/lib/lemon_squeezy/models/webhook.rb +58 -0
- data/lib/lemon_squeezy/object.rb +15 -1
- data/lib/lemon_squeezy/version.rb +1 -1
- data/lib/lemon_squeezy.rb +34 -27
- metadata +23 -27
- data/lib/lemon_squeezy/objects/checkout.rb +0 -12
- data/lib/lemon_squeezy/objects/customer.rb +0 -12
- data/lib/lemon_squeezy/objects/discount.rb +0 -12
- data/lib/lemon_squeezy/objects/file.rb +0 -12
- data/lib/lemon_squeezy/objects/license_key.rb +0 -12
- data/lib/lemon_squeezy/objects/license_key_instance.rb +0 -12
- data/lib/lemon_squeezy/objects/order.rb +0 -12
- data/lib/lemon_squeezy/objects/order_item.rb +0 -12
- data/lib/lemon_squeezy/objects/product.rb +0 -12
- data/lib/lemon_squeezy/objects/store.rb +0 -12
- data/lib/lemon_squeezy/objects/subscription.rb +0 -12
- data/lib/lemon_squeezy/objects/variant.rb +0 -12
- data/lib/lemon_squeezy/resource.rb +0 -60
- data/lib/lemon_squeezy/resources/checkouts.rb +0 -42
- data/lib/lemon_squeezy/resources/customers.rb +0 -15
- data/lib/lemon_squeezy/resources/discounts.rb +0 -15
- data/lib/lemon_squeezy/resources/files.rb +0 -15
- data/lib/lemon_squeezy/resources/license_key_instances.rb +0 -15
- data/lib/lemon_squeezy/resources/license_keys.rb +0 -15
- data/lib/lemon_squeezy/resources/orders.rb +0 -20
- data/lib/lemon_squeezy/resources/products.rb +0 -15
- data/lib/lemon_squeezy/resources/stores.rb +0 -15
- data/lib/lemon_squeezy/resources/subscriptions.rb +0 -92
- data/lib/lemon_squeezy/resources/variants.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0900634c79d4767c4035474bf0c842e8a08f4ae6a967d8111e2c20b0da65321d'
|
4
|
+
data.tar.gz: 65fe9091c594652c165f771c72dd763b0496163eac3d2bc6d5fb6b26a2ed2d85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 876df20f2d4528f04e0c1dbbde80043879c17dd45a209b4ad7f1ac8a099f50e77df5e4b16b198b3ab14247208df2b8e3eb64794d18f364c96ff6c399610b9223
|
7
|
+
data.tar.gz: 78175a9305d0453b2bf755a516a2fbd8a308ca6f2976c946863f6d84d2bd8ebb9d2a36d5c3fb9130ac2551a290d32618def69365e53437635da51fe50d4a1c55
|
data/.env.example
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
LEMON_SQUEEZY_API_KEY=""
|
2
|
+
LEMON_SQUEEZY_API_KEY_TEST=""
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
lemonsqueezy (0.
|
4
|
+
lemonsqueezy (1.0.0)
|
5
5
|
faraday (~> 2.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
dotenv (2.
|
11
|
-
faraday (2.
|
12
|
-
faraday-net_http (>= 2.0, < 3.
|
13
|
-
|
14
|
-
|
15
|
-
minitest (5.
|
16
|
-
|
17
|
-
|
10
|
+
dotenv (2.8.1)
|
11
|
+
faraday (2.9.0)
|
12
|
+
faraday-net_http (>= 2.0, < 3.2)
|
13
|
+
faraday-net_http (3.1.0)
|
14
|
+
net-http
|
15
|
+
minitest (5.20.0)
|
16
|
+
net-http (0.4.1)
|
17
|
+
uri
|
18
|
+
rake (13.1.0)
|
19
|
+
uri (0.13.0)
|
20
|
+
vcr (6.2.0)
|
18
21
|
|
19
22
|
PLATFORMS
|
20
23
|
x86_64-linux
|
@@ -24,6 +27,7 @@ DEPENDENCIES
|
|
24
27
|
lemonsqueezy!
|
25
28
|
minitest (~> 5.0)
|
26
29
|
rake (~> 13.0)
|
30
|
+
vcr
|
27
31
|
|
28
32
|
BUNDLED WITH
|
29
33
|
2.3.22
|
data/README.md
CHANGED
@@ -1,207 +1,345 @@
|
|
1
|
-
# LemonSqueezy
|
1
|
+
# LemonSqueezy Ruby Library
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
This is a Ruby library for interacting with the Lemon Squeezy API.
|
3
|
+
A Ruby library for the Lemon Squeezy API.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
9
7
|
Add this line to your application's Gemfile:
|
10
8
|
|
11
9
|
```ruby
|
12
|
-
gem "lemonsqueezy"
|
10
|
+
gem "lemonsqueezy", "~> 1.0"
|
13
11
|
```
|
14
12
|
|
15
13
|
## Usage
|
16
14
|
|
17
|
-
### Set
|
15
|
+
### Set API Key
|
16
|
+
|
17
|
+
Firstly you'll need to create an API Key on your [settings page](https://app.lemonsqueezy.com/settings/api).
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
LemonSqueezy.configure do |config|
|
21
|
+
config.api_key = ENV["LEMON_SQUEEZY_API_KEY"]
|
22
|
+
end
|
23
|
+
```
|
18
24
|
|
19
|
-
|
25
|
+
### User
|
20
26
|
|
21
27
|
```ruby
|
22
|
-
|
28
|
+
# Retrieve the authenticated user
|
29
|
+
LemonSqueezy::User.me
|
23
30
|
```
|
24
31
|
|
25
32
|
### Stores
|
26
33
|
|
27
34
|
```ruby
|
28
35
|
# Retrieves a list of Stores
|
29
|
-
|
36
|
+
LemonSqueezy::Store.list
|
30
37
|
|
31
38
|
# Retrieves a Store
|
32
|
-
|
39
|
+
LemonSqueezy::Store.retrieve id: 123
|
40
|
+
```
|
41
|
+
|
42
|
+
### Customers
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
# Retrieves a list of Customers
|
46
|
+
LemonSqueezy::Customer.list
|
47
|
+
|
48
|
+
# Retrieves a list of Customers for a store
|
49
|
+
LemonSqueezy::Customer.list store_id: 123
|
50
|
+
|
51
|
+
# Retrieves a list of Customers that contain the supplied email
|
52
|
+
LemonSqueezy::Customer.list email: "test@hello.com"
|
53
|
+
|
54
|
+
# Retrieves a Customer
|
55
|
+
LemonSqueezy::Customer.retrieve id: 123
|
56
|
+
|
57
|
+
# Create a customer
|
58
|
+
# https://docs.lemonsqueezy.com/api/customers#create-a-customer
|
59
|
+
LemonSqueezy::Customer.create store_id: 123, name: "Customer name", email: "test@hello.com"
|
60
|
+
|
61
|
+
# Update a customer
|
62
|
+
# https://docs.lemonsqueezy.com/api/customers#update-a-customer
|
63
|
+
LemonSqueezy::Customer.update id: 123, name: "Customer name", status: "archived"
|
33
64
|
```
|
34
65
|
|
35
66
|
### Products
|
36
67
|
|
37
68
|
```ruby
|
38
69
|
# Retrieves a list of Products
|
39
|
-
|
70
|
+
LemonSqueezy::Product.list
|
40
71
|
|
41
72
|
# Retrieves a list of Products for a specified Store
|
42
|
-
|
73
|
+
LemonSqueezy::Product.list store_id: 123
|
43
74
|
|
44
75
|
# Retrieves a Product
|
45
|
-
|
76
|
+
LemonSqueezy::Product.retrieve id: 123
|
46
77
|
```
|
47
78
|
|
48
79
|
### Product Variants
|
49
80
|
|
50
81
|
```ruby
|
51
82
|
# Retrieves a list of Variants
|
52
|
-
|
83
|
+
LemonSqueezy::Variant.list
|
53
84
|
|
54
85
|
# Retrieves a list of Variants for a Product
|
55
|
-
|
86
|
+
LemonSqueezy::Variant.list product_id: 123
|
56
87
|
|
57
88
|
# Retrieves a Variant
|
58
|
-
|
89
|
+
LemonSqueezy::Variant.retrieve id: 123
|
90
|
+
```
|
91
|
+
|
92
|
+
### Prices
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
# Retrieves a list of Prices
|
96
|
+
LemonSqueezy::Price.list
|
97
|
+
|
98
|
+
# Retrieves a list of Prices for a Variant
|
99
|
+
LemonSqueezy::Price.list variant_id: 123
|
100
|
+
|
101
|
+
# Retrieves a Price
|
102
|
+
LemonSqueezy::Price.retrieve id: 123
|
59
103
|
```
|
60
104
|
|
61
105
|
### Orders
|
62
106
|
|
63
107
|
```ruby
|
64
108
|
# Retrieves a list of Orders
|
65
|
-
|
109
|
+
LemonSqueezy::Order.list
|
66
110
|
|
67
111
|
# Retrieves a list of Orders for a specified store
|
68
|
-
|
112
|
+
LemonSqueezy::Order.list product_id: 123
|
69
113
|
|
70
114
|
# Retrieves a list of Orders for an email address
|
71
|
-
|
115
|
+
LemonSqueezy::Order.list email: "hello@test.com"
|
72
116
|
|
73
117
|
# Retrieves an Order
|
74
|
-
|
118
|
+
LemonSqueezy::Order.retrieve id: 123
|
75
119
|
|
76
120
|
# Retrieves the items on an Order
|
77
|
-
|
121
|
+
LemonSqueezy::Order.retrieve order_items: 123
|
78
122
|
```
|
79
123
|
|
80
124
|
### Subscriptions
|
81
125
|
|
82
126
|
```ruby
|
83
127
|
# Retrieves a list of Subscriptions
|
84
|
-
|
128
|
+
LemonSqueezy::Subscription.list
|
85
129
|
|
86
130
|
# Retrieves a list of Subscriptions for a store
|
87
|
-
|
131
|
+
LemonSqueezy::Subscription.list store_id: 123
|
88
132
|
|
89
133
|
# Retrieves a list of Subscriptions for an Order
|
90
|
-
|
134
|
+
LemonSqueezy::Subscription.list order_id: 123
|
91
135
|
|
92
136
|
# Retrieves a list of Subscriptions for a product
|
93
|
-
|
137
|
+
LemonSqueezy::Subscription.list product_id: 123
|
94
138
|
|
95
139
|
# Retrieves a Subscription
|
96
|
-
|
140
|
+
LemonSqueezy::Subscription.retrieve id: 123
|
141
|
+
|
142
|
+
# Updates a Subscription
|
143
|
+
# https://docs.lemonsqueezy.com/api/subscriptions#update-a-subscription
|
144
|
+
LemonSqueezy::Subscription.update id: 123, variant_id: 123
|
97
145
|
|
98
146
|
# Pauses a Subscription
|
99
147
|
# Kind should be void or free
|
100
148
|
# resumes_at can be nil or an ISO-8601 formatted date-time string indicating
|
101
149
|
# when the subscription will continue collecting payments.
|
102
|
-
|
150
|
+
LemonSqueezy::Subscription.pause id: 123, kind: "void", resumes_at: nil
|
103
151
|
|
104
152
|
# Un-Pause a Subscription
|
105
|
-
|
153
|
+
LemonSqueezy::Subscription.unpause id: 123
|
106
154
|
|
107
155
|
# Cancel a Subscription
|
108
|
-
|
156
|
+
LemonSqueezy::Subscription.cancel id: 123
|
109
157
|
|
110
158
|
# Un-Cancel a Subscription
|
111
|
-
|
159
|
+
LemonSqueezy::Subscription.uncancel id: 123
|
112
160
|
|
113
161
|
# Change the Plan for a Subscription
|
114
|
-
|
162
|
+
LemonSqueezy::Subscription.change_plan id: 123, plan_id: 111, variant_id: 111
|
163
|
+
```
|
164
|
+
|
165
|
+
### Subscription Invoices
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
# Retrieves a list of Subscription Invoices
|
169
|
+
LemonSqueezy::SubscriptionInvoice.list
|
170
|
+
|
171
|
+
# Retrieves a list of Subscription Invoices for a specified Store
|
172
|
+
LemonSqueezy::SubscriptionInvoice.list store_id: 123
|
173
|
+
|
174
|
+
# Retrieves a list of Subscription Invoices for a specified Subscription
|
175
|
+
LemonSqueezy::SubscriptionInvoice.list subscription_id: 123
|
176
|
+
|
177
|
+
# Retrieves a Subscription Invoice
|
178
|
+
LemonSqueezy::SubscriptionInvoice.retrieve id: 123
|
179
|
+
```
|
180
|
+
|
181
|
+
### Subscription Items
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
# Retrieves a list of Subscription Items
|
185
|
+
LemonSqueezy::SubscriptionItem.list
|
186
|
+
|
187
|
+
# Retrieves a list of Subscription Items for a specified Subscription
|
188
|
+
LemonSqueezy::SubscriptionItem.list subscription_id: 123
|
189
|
+
|
190
|
+
# Retrieves a Subscription Item
|
191
|
+
LemonSqueezy::SubscriptionItem.retrieve id: 123
|
192
|
+
|
193
|
+
# Updates a Subscription Item
|
194
|
+
# https://docs.lemonsqueezy.com/api/subscription-items#update-a-subscription-item
|
195
|
+
LemonSqueezy::SubscriptionItem.update id: 123, quantity: 2
|
196
|
+
|
197
|
+
# Retrieve subscription item's current usage
|
198
|
+
# Returns 404 if the product/variant does not have usage based billing enabled
|
199
|
+
# https://docs.lemonsqueezy.com/api/subscription-items#retrieve-a-subscription-item-s-current-usage
|
200
|
+
LemonSqueezy::SubscriptionItem.current_usage id: 123
|
115
201
|
```
|
116
202
|
|
117
203
|
### Discounts
|
118
204
|
|
119
205
|
```ruby
|
120
206
|
# Retrieves a list of Discounts
|
121
|
-
|
207
|
+
LemonSqueezy::Discount.list
|
122
208
|
|
123
209
|
# Retrieves a list of Discounts for a store
|
124
|
-
|
210
|
+
LemonSqueezy::Discount.list store_id: 123
|
125
211
|
|
126
212
|
# Retrieves a Discount
|
127
|
-
|
213
|
+
LemonSqueezy::Discount.retrieve id: 123
|
214
|
+
|
215
|
+
# Create a Discount
|
216
|
+
# https://docs.lemonsqueezy.com/api/discounts#create-a-discount
|
217
|
+
LemonSqueezy::Discount.create store_id: 123, name: "20 Off", code: "20OFF", amount: 20, amount_type: "percent"
|
218
|
+
|
219
|
+
# Delete a Discount
|
220
|
+
LemonSqueezy::Discount.delete id: 123
|
128
221
|
```
|
129
222
|
|
130
|
-
###
|
223
|
+
### Discount Redemptions
|
131
224
|
|
132
225
|
```ruby
|
133
|
-
# Retrieves a list of
|
134
|
-
|
226
|
+
# Retrieves a list of Discount Redemptions
|
227
|
+
LemonSqueezy::DiscountRedemption.list
|
135
228
|
|
136
|
-
# Retrieves a list of
|
137
|
-
|
229
|
+
# Retrieves a list of Discount Redemptions for a Discount
|
230
|
+
LemonSqueezy::DiscountRedemption.list discount_id: 123
|
138
231
|
|
139
|
-
# Retrieves a list of
|
140
|
-
|
232
|
+
# Retrieves a list of Discount Redemptions for a Order
|
233
|
+
LemonSqueezy::DiscountRedemption.list order_id: 123
|
141
234
|
|
142
|
-
# Retrieves a Discount
|
143
|
-
|
235
|
+
# Retrieves a Discount Redemption
|
236
|
+
LemonSqueezy::DiscountRedemption.retrieve id: 123
|
144
237
|
```
|
145
238
|
|
146
|
-
###
|
239
|
+
### Licenses
|
240
|
+
|
241
|
+
This API is used to manage licenses generated by Lemon Squeezy. [Docs](https://docs.lemonsqueezy.com/help/licensing/license-api)
|
147
242
|
|
148
243
|
```ruby
|
149
|
-
#
|
150
|
-
|
244
|
+
# Validate a license key
|
245
|
+
LemonSqueezy::License.validate key: "abc123-abc123-abc123"
|
151
246
|
|
152
|
-
#
|
153
|
-
|
247
|
+
# Activate a license key
|
248
|
+
# Instance is a label to identify this activation
|
249
|
+
LemonSqueezy::License.activate key: "abc123-abc123-abc123", instance: "Activation 1"
|
250
|
+
|
251
|
+
# Deactivate a license key
|
252
|
+
# Instance is the License Key Instance ID
|
253
|
+
LemonSqueezy::License.deactivate key: "abc123-abc123-abc123", instance: "abc123"
|
154
254
|
```
|
155
255
|
|
156
|
-
###
|
256
|
+
### License Keys
|
157
257
|
|
158
258
|
```ruby
|
159
|
-
# Retrieves a list of
|
160
|
-
|
259
|
+
# Retrieves a list of License Keys
|
260
|
+
LemonSqueezy::LicenseKey.list
|
161
261
|
|
162
|
-
# Retrieves a list of
|
163
|
-
|
262
|
+
# Retrieves a list of License Keys for a store
|
263
|
+
LemonSqueezy::LicenseKey.list store_id: 123
|
164
264
|
|
165
|
-
# Retrieves a list of
|
166
|
-
|
265
|
+
# Retrieves a list of License Keys for an order
|
266
|
+
LemonSqueezy::LicenseKey.list order_id: 123
|
167
267
|
|
168
|
-
# Retrieves a
|
169
|
-
|
268
|
+
# Retrieves a License Key
|
269
|
+
LemonSqueezy::LicenseKey.retrieve id: 123
|
270
|
+
|
271
|
+
# Updates a License Key
|
272
|
+
# https://docs.lemonsqueezy.com/api/license-keys#update-a-license-key
|
273
|
+
LemonSqueezy::LicenseKey.update id: 123, activation_limit: 10, disabled: false
|
170
274
|
```
|
171
275
|
|
172
276
|
### License Key Instances
|
173
277
|
|
174
278
|
```ruby
|
175
279
|
# Retrieves a list of License Key Instances
|
176
|
-
|
280
|
+
LemonSqueezy::LicenseKeyInstances.list
|
177
281
|
|
178
282
|
# Retrieves a list of License Key Instances for a license key
|
179
|
-
|
283
|
+
LemonSqueezy::LicenseKeyInstances.list license_key_id: 123
|
180
284
|
|
181
285
|
# Retrieves a License Key Instance
|
182
|
-
|
286
|
+
LemonSqueezy::LicenseKeyInstances.retrieve id: 123
|
287
|
+
```
|
288
|
+
|
289
|
+
### Files
|
290
|
+
|
291
|
+
```ruby
|
292
|
+
# Retrieves a list of Files
|
293
|
+
LemonSqueezy::File.list
|
294
|
+
|
295
|
+
# Retrieves a File
|
296
|
+
LemonSqueezy::File.retrieve id: 123
|
183
297
|
```
|
184
298
|
|
185
299
|
### Checkouts
|
186
300
|
|
187
301
|
```ruby
|
188
302
|
# Retrieves a list of Checkouts
|
189
|
-
|
303
|
+
LemonSqeezy::Checkout.list
|
190
304
|
|
191
305
|
# Retrieves a list of Checkouts for a store
|
192
|
-
|
306
|
+
LemonSqeezy::Checkout.list store_id: 123
|
193
307
|
|
194
308
|
# Retrieves a list of Checkouts for a variant
|
195
|
-
|
309
|
+
LemonSqeezy::Checkout.list variant_id: 123
|
196
310
|
|
197
311
|
# Retrieves a Checkout
|
198
|
-
|
312
|
+
LemonSqeezy::Checkout.retrieve id: 123
|
199
313
|
|
200
314
|
# Creates a Checkout
|
201
315
|
# View docs for more info: https://docs.lemonsqueezy.com/api/checkouts#create-a-checkout
|
202
316
|
# store_id and variant_id are required
|
203
317
|
# Any other parameters are send as "attributes" to the API
|
204
|
-
|
318
|
+
LemonSqueezy::Checkout.create store_id: 123, variant_id: 321, custom_price: 500, product_options: {name: "a test name"}
|
319
|
+
```
|
320
|
+
|
321
|
+
### Webhooks
|
322
|
+
|
323
|
+
```ruby
|
324
|
+
# List all Webhooks
|
325
|
+
LemonSqueezy::Webhook.list
|
326
|
+
|
327
|
+
# List all Webhooks for a Store
|
328
|
+
LemonSqueezy::Webhook.list store_id: 123
|
329
|
+
|
330
|
+
# Retrieve a Webhook
|
331
|
+
LemonSqueezy::Webhook.retrieve id: 123
|
332
|
+
|
333
|
+
# Create a Webhook
|
334
|
+
# https://docs.lemonsqueezy.com/api/webhooks#create-a-webhook
|
335
|
+
LemonSqueezy::Webhook.create store_id: 123, url: "", secret: "abc", events: ["order_created"]
|
336
|
+
|
337
|
+
# Update a Webhook
|
338
|
+
# https://docs.lemonsqueezy.com/api/webhooks#update-a-webhook
|
339
|
+
LemonSqueezy::Webhook.update id: 123, events: ["order_created", "subscription_created"]
|
340
|
+
|
341
|
+
# Delete a Webhook
|
342
|
+
LemonSqueezy::Webhook.delete id: 123
|
205
343
|
```
|
206
344
|
|
207
345
|
|
data/bin/console
CHANGED
@@ -14,7 +14,9 @@ require 'dotenv/load'
|
|
14
14
|
# require "pry"
|
15
15
|
# Pry.start
|
16
16
|
|
17
|
-
|
17
|
+
LemonSqueezy.configure do |config|
|
18
|
+
config.api_key = ENV["LEMON_SQUEEZY_API_KEY"]
|
19
|
+
end
|
18
20
|
|
19
21
|
require "irb"
|
20
22
|
IRB.start(__FILE__)
|
data/lib/lemon_squeezy/client.rb
CHANGED
@@ -1,76 +1,74 @@
|
|
1
1
|
module LemonSqueezy
|
2
2
|
class Client
|
3
|
-
BASE_URL = "https://api.lemonsqueezy.com/v1"
|
4
3
|
|
5
|
-
|
4
|
+
class << self
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
def connection
|
7
|
+
@connection ||= Faraday.new("https://api.lemonsqueezy.com/v1") do |conn|
|
8
|
+
conn.request :authorization, :Bearer, LemonSqueezy.config.api_key
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
StoresResource.new(self)
|
17
|
-
end
|
10
|
+
conn.headers = {
|
11
|
+
"User-Agent" => "lemonsqueezy/v#{VERSION} (github.com/deanpcmad/lemonsqueezy)",
|
12
|
+
"Accept" => "application/vnd.api+json",
|
13
|
+
"Content-Type" => "application/vnd.api+json"
|
14
|
+
}
|
18
15
|
|
19
|
-
|
20
|
-
ProductsResource.new(self)
|
21
|
-
end
|
16
|
+
conn.request :json
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
def orders
|
28
|
-
OrdersResource.new(self)
|
29
|
-
end
|
30
|
-
|
31
|
-
def subscriptions
|
32
|
-
SubscriptionsResource.new(self)
|
33
|
-
end
|
18
|
+
conn.response :json
|
19
|
+
end
|
20
|
+
end
|
34
21
|
|
35
|
-
|
36
|
-
|
37
|
-
|
22
|
+
def get_request(url, params: {}, headers: {})
|
23
|
+
handle_response connection.get(url, params, headers)
|
24
|
+
end
|
38
25
|
|
39
|
-
|
40
|
-
|
41
|
-
|
26
|
+
def post_request(url, body: {}, headers: {})
|
27
|
+
handle_response connection.post(url, body, headers)
|
28
|
+
end
|
42
29
|
|
43
|
-
|
44
|
-
|
45
|
-
|
30
|
+
def patch_request(url, body:, headers: {})
|
31
|
+
handle_response connection.patch(url, body, headers)
|
32
|
+
end
|
46
33
|
|
47
|
-
|
48
|
-
|
49
|
-
|
34
|
+
def delete_request(url, headers: {})
|
35
|
+
handle_response connection.delete(url, headers)
|
36
|
+
end
|
50
37
|
|
51
|
-
|
52
|
-
|
53
|
-
|
38
|
+
def handle_response(response)
|
39
|
+
case response.status
|
40
|
+
when 400
|
41
|
+
raise Error, "Error 400: Your request was malformed. '#{response.body["errors"]}'"
|
42
|
+
when 401
|
43
|
+
raise Error, "Error 401: You did not supply valid authentication credentials. '#{response.body["errors"]}'"
|
44
|
+
when 403
|
45
|
+
raise Error, "Error 403: You are not allowed to perform that action. '#{response.body["errors"]}'"
|
46
|
+
when 404
|
47
|
+
raise Error, "Error 404: No results were found for your request. '#{response.body["errors"]}'"
|
48
|
+
when 409
|
49
|
+
raise Error, "Error 409: Your request was a conflict. '#{response.body["errors"]}'"
|
50
|
+
when 429
|
51
|
+
raise Error, "Error 429: Your request exceeded the API rate limit. '#{response.body["errors"]}'"
|
52
|
+
when 422
|
53
|
+
raise Error, "Error 422: Unprocessable Entity. '#{response.body["errors"]}'"
|
54
|
+
when 500
|
55
|
+
raise Error, "Error 500: We were unable to perform the request due to server-side problems. '#{response.body["errors"]}'"
|
56
|
+
when 503
|
57
|
+
raise Error, "Error 503: You have been rate limited for sending more than 20 requests per second. '#{response.body["errors"]}'"
|
58
|
+
when 501
|
59
|
+
raise Error, "Error 501: This resource has not been implemented. '#{response.body["errors"]}'"
|
60
|
+
when 204
|
61
|
+
return true
|
62
|
+
end
|
63
|
+
|
64
|
+
if response.body && response.body["error"]
|
65
|
+
raise Error, "Error #{response.body["error"]["code"]} - #{response.body["errors"]["message"]}"
|
66
|
+
end
|
67
|
+
|
68
|
+
response
|
69
|
+
end
|
54
70
|
|
55
|
-
def checkouts
|
56
|
-
CheckoutsResource.new(self)
|
57
71
|
end
|
58
72
|
|
59
|
-
def connection
|
60
|
-
@connection ||= Faraday.new(BASE_URL) do |conn|
|
61
|
-
conn.request :authorization, :Bearer, access_token
|
62
|
-
|
63
|
-
conn.headers = {
|
64
|
-
"User-Agent" => "lemonsqueezy/v#{VERSION} (github.com/deanpcmad/lemonsqueezy)",
|
65
|
-
"Accept" => "application/vnd.api+json",
|
66
|
-
"Content-Type" => "application/vnd.api+json",
|
67
|
-
}
|
68
|
-
|
69
|
-
conn.request :json
|
70
|
-
conn.response :json
|
71
|
-
|
72
|
-
conn.adapter adapter, @stubs
|
73
|
-
end
|
74
|
-
end
|
75
73
|
end
|
76
74
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Checkout < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("checkouts", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Checkout)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("checkouts/#{id}")
|
13
|
+
Checkout.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(store_id:, variant_id:, **attrs)
|
17
|
+
data = {}
|
18
|
+
|
19
|
+
data["type"] = "checkouts"
|
20
|
+
|
21
|
+
data["relationships"] = {
|
22
|
+
store: {
|
23
|
+
data: {
|
24
|
+
type: "stores",
|
25
|
+
id: store_id.to_s
|
26
|
+
}
|
27
|
+
},
|
28
|
+
variant: {
|
29
|
+
data: {
|
30
|
+
type: "variants",
|
31
|
+
id: variant_id.to_s
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
data["attributes"] = attrs
|
37
|
+
|
38
|
+
response = Client.post_request("checkouts", body: {data: data}.to_json)
|
39
|
+
|
40
|
+
Checkout.new(response.body["data"]) if response.success?
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|