Last active
October 21, 2015 11:46
-
-
Save jsomara/cdf09fc33577a54d2919 to your computer and use it in GitHub Desktop.
stripe webhook processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Striper::SubscriptionCanceledEvent < Striper | |
def process | |
return unless user && log | |
clear_customer_roles(user) | |
UserMailer.unsubscribe_email(user).deliver | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Striper | |
attr_reader :event, :user, :log, :plan | |
def initialize(event, user=nil, plan=nil) | |
@event = event | |
if (user && plan) | |
@user = user | |
@plan = plan | |
@log = StripeEventLog.new | |
else | |
@log = create_log(event) | |
@user = get_user | |
end | |
end | |
def get_user | |
cust_id = @event.data.object.customer | |
subscription = Subscription.where(stripe_id:cust_id).first | |
if subscription | |
subscription.user | |
else | |
nil | |
end | |
end | |
def get_role(plan_name) | |
Ability.find_role_by_plan_name(plan_name) | |
end | |
def get_plan(event) | |
return @plan.name if @plan | |
return event.data.object.lines.data[0].plan.name | |
end | |
def create_log(event) | |
r = StripeEventLog.new | |
r.stripe_id = event.id | |
r.stripe_type = event.type | |
return r.save | |
end | |
def existing_customer_roles?(user) | |
[:bronze, :silver, :gold].each do |r| | |
return true if user.has_role? r | |
end | |
return false | |
end | |
def clear_customer_roles(user) | |
[:bronze, :silver, :gold].each do |r| | |
user.remove_role r | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment