lemonsqueezy 0.2.1 → 1.0.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/.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
|