Skip to content

Instantly share code, notes, and snippets.

@jsomara
Last active October 21, 2015 11:46
Show Gist options
  • Save jsomara/cdf09fc33577a54d2919 to your computer and use it in GitHub Desktop.
Save jsomara/cdf09fc33577a54d2919 to your computer and use it in GitHub Desktop.
stripe webhook processing
class Striper::SubscriptionCanceledEvent < Striper
def process
return unless user && log
clear_customer_roles(user)
UserMailer.unsubscribe_email(user).deliver
end
end
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