Skip to content

Commit 12e87fa

Browse files
authored
Add new API usage for Customer Subscriptions connect and disconnect (#181)
* Add new API usage for Customer Subscriptions connect and disconnect * Add update Subscription connect and disconnect with deprecation warnings
1 parent eda9448 commit 12e87fa

4 files changed

Lines changed: 222 additions & 2 deletions

File tree

lib/chartmogul/metrics/customers/subscription.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,23 @@ class Subscription < ChartMogul::Object
2222
def self.all(customer_uuid, options = {})
2323
ChartMogul::Metrics::Customers::Subscriptions.all(customer_uuid, options)
2424
end
25+
26+
def connect(data_source_uuid, customer_uuid, subscriptions)
27+
subscriptions.unshift(self)
28+
ChartMogul::Metrics::Customers::Subscriptions.connect(data_source_uuid, customer_uuid, subscriptions)
29+
end
30+
31+
def disconnect(data_source_uuid, customer_uuid, subscriptions)
32+
subscriptions.unshift(self)
33+
ChartMogul::Metrics::Customers::Subscriptions.disconnect(data_source_uuid, customer_uuid, subscriptions)
34+
end
2535
end
2636

2737
class Subscriptions < APIResource
2838
set_resource_name 'Subscriptions'
2939
set_resource_path '/v1/customers/:customer_uuid/subscriptions'
3040

41+
include API::Actions::Custom
3142
include Concerns::Entries
3243
include Concerns::Pageable
3344
include Concerns::PageableWithCursor
@@ -38,6 +49,29 @@ def self.all(customer_uuid, options = {})
3849
super(options.merge(customer_uuid: customer_uuid))
3950
end
4051

52+
def self.connect(data_source_uuid, customer_uuid, subscriptions)
53+
custom!(:post,
54+
"/v1/customers/#{customer_uuid}/connect_subscriptions",
55+
connect_disconnect_body(data_source_uuid, subscriptions))
56+
end
57+
58+
def self.disconnect(data_source_uuid, customer_uuid, subscriptions)
59+
custom!(:post,
60+
"/v1/customers/#{customer_uuid}/disconnect_subscriptions",
61+
connect_disconnect_body(data_source_uuid, subscriptions))
62+
end
63+
64+
def self.connect_disconnect_body(data_source_uuid, subscriptions)
65+
{
66+
subscriptions: subscriptions.uniq.map do |subscription|
67+
{
68+
data_source_uuid: data_source_uuid,
69+
uuid: subscription.uuid
70+
}
71+
end
72+
}
73+
end
74+
4175
def next(customer_uuid, options = {})
4276
Subscriptions.all(customer_uuid, options.merge(cursor: cursor))
4377
end

lib/chartmogul/subscription.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,19 @@ def cancel(cancelled_at)
2626
end
2727

2828
def connect(customer_uuid, subscriptions)
29+
warn 'DEPRECATION WARNING: the method ChartMogul::Subscription#connect is deprecated. Use ChartMogul::Metrics::Customers::Subscription#connect instead.'
2930
subscriptions.unshift(self)
30-
custom!(:post, "/v1/customers/#{customer_uuid}/connect_subscriptions", subscriptions: subscriptions.map(&:serialize_for_write))
31+
custom!(:post,
32+
"/v1/customers/#{customer_uuid}/connect_subscriptions",
33+
subscriptions: subscriptions.map(&:serialize_for_write))
3134
end
3235

3336
def disconnect(customer_uuid, subscriptions)
37+
warn 'DEPRECATION WARNING: the method ChartMogul::Subscription#disconnect is deprecated. Use ChartMogul::Metrics::Customers::Subscription#disconnect instead.'
3438
subscriptions.unshift(self)
35-
custom!(:post, "/v1/customers/#{customer_uuid}/disconnect_subscriptions", subscriptions: subscriptions.map(&:serialize_for_write))
39+
custom!(:post,
40+
"/v1/customers/#{customer_uuid}/disconnect_subscriptions",
41+
subscriptions: subscriptions.map(&:serialize_for_write))
3642
end
3743

3844
def self.all(customer_uuid, options = {})

spec/chartmogul/metrics/customers/subscriptions_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,18 @@
4141
next_subscriptions = subscriptions.next(customer_uuid, per_page: 1)
4242
expect(next_subscriptions.size).to eq(0)
4343
end
44+
45+
it 'should connect and disconnect subscriptions ' do
46+
data_source_uuid = 'ds_20bbb506-d69a-11f0-a876-535e2d78a156'
47+
customer_uuid = 'cus_c9352490-8d66-403c-90c5-01663aae2959'
48+
subscriptions = ChartMogul::Metrics::Customers::Subscription.all(customer_uuid).entries
49+
expect(subscriptions.size).to eq(3)
50+
subscription = subscriptions[0]
51+
subscription.connect(data_source_uuid, customer_uuid, subscriptions)
52+
subscriptions = ChartMogul::Metrics::Customers::Subscription.all(customer_uuid).entries
53+
expect(subscriptions.size).to eq(1)
54+
subscription.disconnect(data_source_uuid, customer_uuid, subscriptions)
55+
subscriptions = ChartMogul::Metrics::Customers::Subscription.all(customer_uuid).entries
56+
expect(subscriptions.size).to eq(3)
57+
end
4458
end

spec/fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Subscription/should_connect_and_disconnect_subscriptions_.yml

Lines changed: 166 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)