lemonsqueezy 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +2 -1
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +13 -9
  5. data/README.md +203 -65
  6. data/bin/console +3 -1
  7. data/lib/lemon_squeezy/client.rb +57 -59
  8. data/lib/lemon_squeezy/configuration.rb +12 -0
  9. data/lib/lemon_squeezy/models/checkout.rb +46 -0
  10. data/lib/lemon_squeezy/models/customer.rb +52 -0
  11. data/lib/lemon_squeezy/models/discount.rb +47 -0
  12. data/lib/lemon_squeezy/models/discount_redemption.rb +19 -0
  13. data/lib/lemon_squeezy/models/file.rb +19 -0
  14. data/lib/lemon_squeezy/models/license.rb +24 -0
  15. data/lib/lemon_squeezy/models/license_key.rb +32 -0
  16. data/lib/lemon_squeezy/models/license_key_instance.rb +19 -0
  17. data/lib/lemon_squeezy/models/order.rb +24 -0
  18. data/lib/lemon_squeezy/models/price.rb +19 -0
  19. data/lib/lemon_squeezy/models/product.rb +19 -0
  20. data/lib/lemon_squeezy/models/store.rb +19 -0
  21. data/lib/lemon_squeezy/models/subscription.rb +99 -0
  22. data/lib/lemon_squeezy/models/subscription_invoice.rb +19 -0
  23. data/lib/lemon_squeezy/models/subscription_item.rb +38 -0
  24. data/lib/lemon_squeezy/models/subscription_usage.rb +4 -0
  25. data/lib/lemon_squeezy/models/user.rb +14 -0
  26. data/lib/lemon_squeezy/models/variant.rb +19 -0
  27. data/lib/lemon_squeezy/models/webhook.rb +58 -0
  28. data/lib/lemon_squeezy/object.rb +15 -1
  29. data/lib/lemon_squeezy/version.rb +1 -1
  30. data/lib/lemon_squeezy.rb +34 -27
  31. metadata +23 -27
  32. data/lib/lemon_squeezy/objects/checkout.rb +0 -12
  33. data/lib/lemon_squeezy/objects/customer.rb +0 -12
  34. data/lib/lemon_squeezy/objects/discount.rb +0 -12
  35. data/lib/lemon_squeezy/objects/file.rb +0 -12
  36. data/lib/lemon_squeezy/objects/license_key.rb +0 -12
  37. data/lib/lemon_squeezy/objects/license_key_instance.rb +0 -12
  38. data/lib/lemon_squeezy/objects/order.rb +0 -12
  39. data/lib/lemon_squeezy/objects/order_item.rb +0 -12
  40. data/lib/lemon_squeezy/objects/product.rb +0 -12
  41. data/lib/lemon_squeezy/objects/store.rb +0 -12
  42. data/lib/lemon_squeezy/objects/subscription.rb +0 -12
  43. data/lib/lemon_squeezy/objects/variant.rb +0 -12
  44. data/lib/lemon_squeezy/resource.rb +0 -60
  45. data/lib/lemon_squeezy/resources/checkouts.rb +0 -42
  46. data/lib/lemon_squeezy/resources/customers.rb +0 -15
  47. data/lib/lemon_squeezy/resources/discounts.rb +0 -15
  48. data/lib/lemon_squeezy/resources/files.rb +0 -15
  49. data/lib/lemon_squeezy/resources/license_key_instances.rb +0 -15
  50. data/lib/lemon_squeezy/resources/license_keys.rb +0 -15
  51. data/lib/lemon_squeezy/resources/orders.rb +0 -20
  52. data/lib/lemon_squeezy/resources/products.rb +0 -15
  53. data/lib/lemon_squeezy/resources/stores.rb +0 -15
  54. data/lib/lemon_squeezy/resources/subscriptions.rb +0 -92
  55. data/lib/lemon_squeezy/resources/variants.rb +0 -15
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lemonsqueezy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dean Perry
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-22 00:00:00.000000000 Z
11
+ date: 2024-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -42,32 +42,28 @@ files:
42
42
  - lib/lemon_squeezy.rb
43
43
  - lib/lemon_squeezy/client.rb
44
44
  - lib/lemon_squeezy/collection.rb
45
+ - lib/lemon_squeezy/configuration.rb
45
46
  - lib/lemon_squeezy/error.rb
47
+ - lib/lemon_squeezy/models/checkout.rb
48
+ - lib/lemon_squeezy/models/customer.rb
49
+ - lib/lemon_squeezy/models/discount.rb
50
+ - lib/lemon_squeezy/models/discount_redemption.rb
51
+ - lib/lemon_squeezy/models/file.rb
52
+ - lib/lemon_squeezy/models/license.rb
53
+ - lib/lemon_squeezy/models/license_key.rb
54
+ - lib/lemon_squeezy/models/license_key_instance.rb
55
+ - lib/lemon_squeezy/models/order.rb
56
+ - lib/lemon_squeezy/models/price.rb
57
+ - lib/lemon_squeezy/models/product.rb
58
+ - lib/lemon_squeezy/models/store.rb
59
+ - lib/lemon_squeezy/models/subscription.rb
60
+ - lib/lemon_squeezy/models/subscription_invoice.rb
61
+ - lib/lemon_squeezy/models/subscription_item.rb
62
+ - lib/lemon_squeezy/models/subscription_usage.rb
63
+ - lib/lemon_squeezy/models/user.rb
64
+ - lib/lemon_squeezy/models/variant.rb
65
+ - lib/lemon_squeezy/models/webhook.rb
46
66
  - lib/lemon_squeezy/object.rb
47
- - lib/lemon_squeezy/objects/checkout.rb
48
- - lib/lemon_squeezy/objects/customer.rb
49
- - lib/lemon_squeezy/objects/discount.rb
50
- - lib/lemon_squeezy/objects/file.rb
51
- - lib/lemon_squeezy/objects/license_key.rb
52
- - lib/lemon_squeezy/objects/license_key_instance.rb
53
- - lib/lemon_squeezy/objects/order.rb
54
- - lib/lemon_squeezy/objects/order_item.rb
55
- - lib/lemon_squeezy/objects/product.rb
56
- - lib/lemon_squeezy/objects/store.rb
57
- - lib/lemon_squeezy/objects/subscription.rb
58
- - lib/lemon_squeezy/objects/variant.rb
59
- - lib/lemon_squeezy/resource.rb
60
- - lib/lemon_squeezy/resources/checkouts.rb
61
- - lib/lemon_squeezy/resources/customers.rb
62
- - lib/lemon_squeezy/resources/discounts.rb
63
- - lib/lemon_squeezy/resources/files.rb
64
- - lib/lemon_squeezy/resources/license_key_instances.rb
65
- - lib/lemon_squeezy/resources/license_keys.rb
66
- - lib/lemon_squeezy/resources/orders.rb
67
- - lib/lemon_squeezy/resources/products.rb
68
- - lib/lemon_squeezy/resources/stores.rb
69
- - lib/lemon_squeezy/resources/subscriptions.rb
70
- - lib/lemon_squeezy/resources/variants.rb
71
67
  - lib/lemon_squeezy/version.rb
72
68
  - lib/lemonsqueezy.rb
73
69
  homepage: https://github.com/deanpcmad/lemonsqueezy
@@ -90,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
86
  - !ruby/object:Gem::Version
91
87
  version: '0'
92
88
  requirements: []
93
- rubygems_version: 3.4.5
89
+ rubygems_version: 3.4.22
94
90
  signing_key:
95
91
  specification_version: 4
96
92
  summary: Ruby library for interacting with the Lemon Squeezy API
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Checkout < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Customer < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Discount < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class File < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class LicenseKey < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class LicenseKeyInstance < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Order < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class OrderItem < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Product < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Store < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Subscription < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module LemonSqueezy
2
- class Variant < Object
3
-
4
- def initialize(options = {})
5
- options.delete "relationships"
6
- options.delete "links"
7
-
8
- super options
9
- end
10
-
11
- end
12
- end
@@ -1,60 +0,0 @@
1
- module LemonSqueezy
2
- class Resource
3
- attr_reader :client
4
-
5
- def initialize(client)
6
- @client = client
7
- end
8
-
9
- private
10
-
11
- def get_request(url, params: {}, headers: {})
12
- handle_response client.connection.get(url, params, headers)
13
- end
14
-
15
- def post_request(url, body: {}, headers: {})
16
- handle_response client.connection.post(url, body, headers)
17
- end
18
-
19
- def patch_request(url, body:, headers: {})
20
- handle_response client.connection.patch(url, body, headers)
21
- end
22
-
23
- def put_request(url, body:, headers: {})
24
- handle_response client.connection.put(url, body, headers)
25
- end
26
-
27
- def delete_request(url, params: {}, headers: {})
28
- handle_response client.connection.delete(url, params, headers)
29
- end
30
-
31
- def handle_response(response)
32
- case response.status
33
- when 400
34
- raise Error, "Error 400: Your request was malformed. '#{response.body["errors"][0]["detail"]}'"
35
- when 401
36
- raise Error, "Error 401: You did not supply valid authentication credentials. '#{response.body["error"]}'"
37
- when 403
38
- raise Error, "Error 403: You are not allowed to perform that action. '#{response.body["error"]}'"
39
- when 404
40
- raise Error, "Error 404: No results were found for your request. '#{response.body["error"]}'"
41
- when 409
42
- raise Error, "Error 409: Your request was a conflict. '#{response.body["message"]}'"
43
- when 429
44
- raise Error, "Error 429: Your request exceeded the API rate limit. '#{response.body["error"]}'"
45
- when 500
46
- raise Error, "Error 500: We were unable to perform the request due to server-side problems. '#{response.body["error"]}'"
47
- when 503
48
- raise Error, "Error 503: You have been rate limited for sending more than 20 requests per second. '#{response.body["error"]}'"
49
- when 501
50
- raise Error, "Error 501: This resource has not been implemented. '#{response.body["error"]}'"
51
- end
52
-
53
- if response.body && response.body["error"]
54
- raise Error, "Error #{response.body["error"]["code"]} - #{response.body["error"]["message"]}"
55
- end
56
-
57
- response
58
- end
59
- end
60
- end
@@ -1,42 +0,0 @@
1
- module LemonSqueezy
2
- class CheckoutsResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("checkouts", params: params)
6
- Collection.from_response(response, type: Customer)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("checkouts/#{id}")
11
- Customer.new(response.body["data"]) if response.success?
12
- end
13
-
14
- def create(store_id:, variant_id:, **attrs)
15
- data = {}
16
-
17
- data["type"] = "checkouts"
18
-
19
- data["relationships"] = {
20
- store: {
21
- data: {
22
- type: "stores",
23
- id: store_id.to_s
24
- }
25
- },
26
- variant: {
27
- data: {
28
- type: "variants",
29
- id: variant_id.to_s
30
- }
31
- }
32
- }
33
-
34
- data["attributes"] = attrs
35
-
36
- response = post_request("checkouts", body: {data: data}.to_json)
37
-
38
- Checkout.new(response.body["data"]) if response.success?
39
- end
40
-
41
- end
42
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class CustomersResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("customers", params: params)
6
- Collection.from_response(response, type: Customer)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("customers/#{id}")
11
- Customer.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class DiscountsResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("discounts", params: params)
6
- Collection.from_response(response, type: Discount)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("discounts/#{id}")
11
- Discount.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class FilesResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("files", params: params)
6
- Collection.from_response(response, type: File)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("files/#{id}")
11
- File.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class LicenseKeyInstancesResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("license-key-instances", params: params)
6
- Collection.from_response(response, type: LicenseKeyInstance)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("license-key-instances/#{id}")
11
- LicenseKeyInstance.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class LicenseKeysResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("license-keys", params: params)
6
- Collection.from_response(response, type: LicenseKey)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("license-keys/#{id}")
11
- LicenseKey.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,20 +0,0 @@
1
- module LemonSqueezy
2
- class OrdersResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("orders", params: params)
6
- Collection.from_response(response, type: Order)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("orders/#{id}")
11
- Order.new(response.body["data"]) if response.success?
12
- end
13
-
14
- def order_items(id:)
15
- response = get_request("order-items", params: {order_id: id})
16
- Collection.from_response(response, type: OrderItem)
17
- end
18
-
19
- end
20
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class ProductsResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("products", params: params)
6
- Collection.from_response(response, type: Product)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("products/#{id}")
11
- Product.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class StoresResource < Resource
3
-
4
- def list
5
- response = get_request("stores")
6
- Collection.from_response(response, type: Store)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("stores/#{id}")
11
- Store.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end
@@ -1,92 +0,0 @@
1
- module LemonSqueezy
2
- class SubscriptionsResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("subscriptions", params: params)
6
- Collection.from_response(response, type: Subscription)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("subscriptions/#{id}")
11
- Subscription.new(response.body["data"]) if response.success?
12
- end
13
-
14
- # Kind: void or free
15
- def pause(id:, kind:, resumes_at: nil)
16
- body = {
17
- data: {
18
- type: "subscriptions",
19
- id: id.to_s,
20
- attributes: {
21
- pause: {mode: kind, resumes_at: resumes_at}
22
- }
23
- }
24
- }
25
-
26
- response = patch_request("subscriptions/#{id}", body: body.to_json)
27
- Subscription.new(response.body["data"]) if response.success?
28
- end
29
-
30
- def unpause(id:)
31
- body = {
32
- data: {
33
- type: "subscriptions",
34
- id: id.to_s,
35
- attributes: {
36
- pause: nil
37
- }
38
- }
39
- }
40
-
41
- response = patch_request("subscriptions/#{id}", body: body.to_json)
42
- Subscription.new(response.body["data"]) if response.success?
43
- end
44
-
45
- def cancel(id:)
46
- body = {
47
- data: {
48
- type: "subscriptions",
49
- id: id.to_s,
50
- attributes: {
51
- cancelled: true
52
- }
53
- }
54
- }
55
-
56
- response = patch_request("subscriptions/#{id}", body: body.to_json)
57
- Subscription.new(response.body["data"]) if response.success?
58
- end
59
-
60
- def uncancel(id:)
61
- body = {
62
- data: {
63
- type: "subscriptions",
64
- id: id.to_s,
65
- attributes: {
66
- cancelled: false
67
- }
68
- }
69
- }
70
-
71
- response = patch_request("subscriptions/#{id}", body: body.to_json)
72
- Subscription.new(response.body["data"]) if response.success?
73
- end
74
-
75
- def change_plan(id:, plan_id:, variant_id:)
76
- body = {
77
- data: {
78
- type: "subscriptions",
79
- id: id.to_s,
80
- attributes: {
81
- product_id: plan_id,
82
- variant_id: variant_id
83
- }
84
- }
85
- }
86
-
87
- response = patch_request("subscriptions/#{id}", body: body.to_json)
88
- Subscription.new(response.body["data"]) if response.success?
89
- end
90
-
91
- end
92
- end
@@ -1,15 +0,0 @@
1
- module LemonSqueezy
2
- class VariantsResource < Resource
3
-
4
- def list(**params)
5
- response = get_request("variants", params: params)
6
- Collection.from_response(response, type: Variant)
7
- end
8
-
9
- def get(id:)
10
- response = get_request("variants/#{id}")
11
- Variant.new(response.body["data"]) if response.success?
12
- end
13
-
14
- end
15
- end