lemonsqueezy 0.2.2 → 1.0.1
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 +194 -68
- data/bin/console +3 -1
- data/lib/lemon_squeezy/client.rb +57 -63
- 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 +101 -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 -29
- metadata +23 -29
- 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/subscription_invoice.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/subscription_invoices.rb +0 -15
- data/lib/lemon_squeezy/resources/subscriptions.rb +0 -92
- data/lib/lemon_squeezy/resources/variants.rb +0 -15
@@ -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
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Customer < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("customers", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Customer)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("customers/#{id}")
|
13
|
+
Customer.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(store_id:, name:, email:, **params)
|
17
|
+
body = {
|
18
|
+
data: {
|
19
|
+
type: "customers",
|
20
|
+
attributes: {
|
21
|
+
name: name,
|
22
|
+
email: email
|
23
|
+
}.merge(params),
|
24
|
+
relationships: {
|
25
|
+
store: {
|
26
|
+
data: {
|
27
|
+
type: "stores",
|
28
|
+
id: store_id.to_s
|
29
|
+
}
|
30
|
+
},
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
response = Client.post_request("customers", body: body.to_json)
|
35
|
+
Customer.new(response.body["data"]) if response.success?
|
36
|
+
end
|
37
|
+
|
38
|
+
def update(id:, **params)
|
39
|
+
body = {
|
40
|
+
data: {
|
41
|
+
type: "customers",
|
42
|
+
id: id.to_s,
|
43
|
+
attributes: params
|
44
|
+
}
|
45
|
+
}
|
46
|
+
response = Client.patch_request("customers/#{id}", body: body.to_json)
|
47
|
+
Customer.new(response.body["data"]) if response.success?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Discount < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("discounts", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Discount)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("discounts/#{id}")
|
13
|
+
Discount.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(store_id:, name:, code:, amount:, amount_type:, **params)
|
17
|
+
body = {
|
18
|
+
data: {
|
19
|
+
type: "discounts",
|
20
|
+
attributes: {
|
21
|
+
name: name,
|
22
|
+
code: code,
|
23
|
+
amount: amount,
|
24
|
+
amount_type: amount_type
|
25
|
+
}.merge(params),
|
26
|
+
relationships: {
|
27
|
+
store: {
|
28
|
+
data: {
|
29
|
+
type: "stores",
|
30
|
+
id: store_id.to_s
|
31
|
+
}
|
32
|
+
},
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
response = Client.post_request("discounts", body: body.to_json)
|
37
|
+
Discount.new(response.body["data"]) if response.success?
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete(id:)
|
41
|
+
Client.delete_request("discounts/#{id}")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class DiscountRedemption < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("discount-redemptions", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: DiscountRedemption)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("discount-redemptions/#{id}")
|
13
|
+
DiscountRedemption.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class File < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("files", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: File)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("files/#{id}")
|
13
|
+
File.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class License < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def validate(key:, instance: nil)
|
7
|
+
response = Client.post_request("licenses/validate", body: { license_key: key, instance_id: instance })
|
8
|
+
License.new(response.body) if response.success?
|
9
|
+
end
|
10
|
+
|
11
|
+
def activate(key:, instance:)
|
12
|
+
response = Client.post_request("licenses/activate", body: { license_key: key, instance_name: instance })
|
13
|
+
License.new(response.body) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def deactivate(key:, instance:)
|
17
|
+
response = Client.post_request("licenses/deactivate", body: { license_key: key, instance_id: instance })
|
18
|
+
License.new(response.body) if response.success?
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class LicenseKey < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("license-keys", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: LicenseKey)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("license-keys/#{id}")
|
13
|
+
LicenseKey.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(id:, **attributes)
|
17
|
+
body = {
|
18
|
+
data: {
|
19
|
+
type: "license-keys",
|
20
|
+
id: id.to_s,
|
21
|
+
attributes: attributes
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
response = Client.patch_request("license-keys/#{id}", body: body.to_json)
|
26
|
+
LicenseKey.new(response.body["data"]) if response.success?
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class LicenseKeyInstance < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("license-key-instances", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: LicenseKeyInstance)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("license-key-instances/#{id}")
|
13
|
+
LicenseKeyInstance.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Order < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("orders", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Order)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("orders/#{id}")
|
13
|
+
Order.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def order_items(id:)
|
17
|
+
response = Client.get_request("order-items", params: {order_id: id})
|
18
|
+
Collection.from_response(response, type: OrderItem)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Price < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("prices", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Price)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("prices/#{id}")
|
13
|
+
Price.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Product < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("products", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Product)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("products/#{id}")
|
13
|
+
Product.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Store < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list
|
7
|
+
response = Client.get_request("stores")
|
8
|
+
Collection.from_response(response, type: Store)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("stores/#{id}")
|
13
|
+
Store.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Subscription < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("subscriptions", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Subscription)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("subscriptions/#{id}")
|
13
|
+
Subscription.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(id:, **attributes)
|
17
|
+
body = {
|
18
|
+
data: {
|
19
|
+
type: "subscriptions",
|
20
|
+
id: id.to_s,
|
21
|
+
attributes: attributes
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
response = Client.patch_request("subscriptions/#{id}", body: body.to_json)
|
26
|
+
Subscription.new(response.body["data"]) if response.success?
|
27
|
+
end
|
28
|
+
|
29
|
+
# Kind: void or free
|
30
|
+
def pause(id:, kind:, resumes_at: nil)
|
31
|
+
body = {
|
32
|
+
data: {
|
33
|
+
type: "subscriptions",
|
34
|
+
id: id.to_s,
|
35
|
+
attributes: {
|
36
|
+
pause: {mode: kind, resumes_at: resumes_at}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
response = Client.patch_request("subscriptions/#{id}", body: body.to_json)
|
42
|
+
Subscription.new(response.body["data"]) if response.success?
|
43
|
+
end
|
44
|
+
|
45
|
+
def unpause(id:)
|
46
|
+
body = {
|
47
|
+
data: {
|
48
|
+
type: "subscriptions",
|
49
|
+
id: id.to_s,
|
50
|
+
attributes: {
|
51
|
+
pause: nil
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
response = Client.patch_request("subscriptions/#{id}", body: body.to_json)
|
57
|
+
Subscription.new(response.body["data"]) if response.success?
|
58
|
+
end
|
59
|
+
|
60
|
+
def cancel(id:)
|
61
|
+
response = Client.delete_request("subscriptions/#{id}")
|
62
|
+
Subscription.new(response.body["data"]) if response.success?
|
63
|
+
end
|
64
|
+
|
65
|
+
def uncancel(id:)
|
66
|
+
body = {
|
67
|
+
data: {
|
68
|
+
type: "subscriptions",
|
69
|
+
id: id.to_s,
|
70
|
+
attributes: {
|
71
|
+
cancelled: false
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
response = Client.patch_request("subscriptions/#{id}", body: body.to_json)
|
77
|
+
Subscription.new(response.body["data"]) if response.success?
|
78
|
+
end
|
79
|
+
|
80
|
+
def change_plan(id:, plan_id:, variant_id:, invoice_immediately: false, disable_prorations: false)
|
81
|
+
body = {
|
82
|
+
data: {
|
83
|
+
type: "subscriptions",
|
84
|
+
id: id.to_s,
|
85
|
+
attributes: {
|
86
|
+
product_id: plan_id,
|
87
|
+
variant_id: variant_id,
|
88
|
+
invoice_immediately: invoice_immediately,
|
89
|
+
disable_prorations: disable_prorations
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
response = Client.patch_request("subscriptions/#{id}", body: body.to_json)
|
95
|
+
Subscription.new(response.body["data"]) if response.success?
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class SubscriptionInvoice < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("subscription-invoices", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: SubscriptionInvoice)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("subscription-invoices/#{id}")
|
13
|
+
SubscriptionInvoice.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class SubscriptionItem < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("subscription-items", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: SubscriptionItem)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("subscription-items/#{id}")
|
13
|
+
SubscriptionItem.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def current_usage(id:)
|
17
|
+
response = Client.get_request("subscription-items/#{id}/current-usage")
|
18
|
+
SubscriptionUsage.new(response.body["meta"]) if response.success?
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(id:, quantity:)
|
22
|
+
body = {
|
23
|
+
data: {
|
24
|
+
type: "subscription-items",
|
25
|
+
id: id.to_s,
|
26
|
+
attributes: {
|
27
|
+
quantity: quantity
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
response = Client.patch_request("subscription-items/#{id}", body: body.to_json)
|
32
|
+
SubscriptionItem.new(response.body["data"]) if response.success?
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Variant < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("variants", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Variant)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("variants/#{id}")
|
13
|
+
Variant.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module LemonSqueezy
|
2
|
+
class Webhook < Object
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def list(**params)
|
7
|
+
response = Client.get_request("webhooks", params: {filter: params})
|
8
|
+
Collection.from_response(response, type: Webhook)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve(id:)
|
12
|
+
response = Client.get_request("webhooks/#{id}")
|
13
|
+
Webhook.new(response.body["data"]) if response.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(store_id:, url:, events:, secret:, **params)
|
17
|
+
body = {
|
18
|
+
data: {
|
19
|
+
type: "webhooks",
|
20
|
+
attributes: {
|
21
|
+
url: url,
|
22
|
+
events: events,
|
23
|
+
secret: secret
|
24
|
+
}.merge(params),
|
25
|
+
relationships: {
|
26
|
+
store: {
|
27
|
+
data: {
|
28
|
+
type: "stores",
|
29
|
+
id: store_id.to_s
|
30
|
+
}
|
31
|
+
},
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
response = Client.post_request("webhooks", body: body.to_json)
|
36
|
+
Webhook.new(response.body["data"]) if response.success?
|
37
|
+
end
|
38
|
+
|
39
|
+
def update(id:, **params)
|
40
|
+
body = {
|
41
|
+
data: {
|
42
|
+
type: "webhooks",
|
43
|
+
id: id.to_s,
|
44
|
+
attributes: params
|
45
|
+
}
|
46
|
+
}
|
47
|
+
response = Client.patch_request("webhooks/#{id}", body: body.to_json)
|
48
|
+
Webhook.new(response.body["data"]) if response.success?
|
49
|
+
end
|
50
|
+
|
51
|
+
def delete(id:)
|
52
|
+
Client.delete_request("webhooks/#{id}")
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
data/lib/lemon_squeezy/object.rb
CHANGED
@@ -3,7 +3,21 @@ require "ostruct"
|
|
3
3
|
module LemonSqueezy
|
4
4
|
class Object < OpenStruct
|
5
5
|
def initialize(attributes)
|
6
|
-
|
6
|
+
# Remove relationships and links from responses as they are not required
|
7
|
+
attributes.delete "relationships"
|
8
|
+
attributes.delete "links"
|
9
|
+
|
10
|
+
attrs = {}
|
11
|
+
|
12
|
+
if attributes["attributes"]
|
13
|
+
# Add ID from response to attributes
|
14
|
+
attrs[:id] = attributes["id"] if attributes["id"]
|
15
|
+
attrs.merge!(attributes["attributes"])
|
16
|
+
else
|
17
|
+
attrs.merge!(attributes)
|
18
|
+
end
|
19
|
+
|
20
|
+
super to_ostruct(attrs)
|
7
21
|
end
|
8
22
|
|
9
23
|
def to_ostruct(obj)
|