3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'app/services/payola/change_subscription_plan.rb', line 3
def self.call(subscription, plan)
secret_key = Payola.secret_key_for_sale(subscription)
old_plan = subscription.plan
begin
customer = Stripe::Customer.retrieve(subscription.stripe_customer_id, secret_key)
sub = customer.subscriptions.retrieve(subscription.stripe_id)
prorate = plan.respond_to?(:should_prorate?) ? plan.should_prorate?(subscription) : true
sub.plan = plan.stripe_id
sub.prorate = prorate
sub.save
subscription.plan = plan
subscription.save!
subscription.instrument_plan_changed(old_plan)
rescue RuntimeError, Stripe::StripeError => e
subscription.errors[:base] << e.message
end
subscription
end
|