Sha256: ecfb85508a0dc5175a4fde16faaa739974d6c5d24912cd5ba43d49f8119fefc8

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

module Wbase
  class UpdateSubscription
    attr_reader :subscription, :user, :errors, :params

    def initialize(user, params)
      @params = params
      @user = user
      @errors = []
    end

    def subscription
      user.subscription
    end

    def stripe_customer
      @stripe_customer ||= subscription.stripe_customer
    end

    def call
      Rails.logger.info("Updating Stripe Customer for #{ user.email }")
      card = stripe_customer.sources.create(card:  params[:credit_card_token])
      card.save
      stripe_customer.default_source = card.id
      stripe_customer.save
      subscription.update!(params)
      Rails.logger.info stripe_customer
    rescue Stripe::CardError => e
      # Since it's a decline, Stripe::CardError will be caught
      body = e.json_body
      err  = body[:error]
      @errors << body[:error]
      puts "Status is: #{e.http_status}"
      puts "Type is: #{err[:type]}"
      puts "Code is: #{err[:code]}"
      # param is '' in this case
      puts "Param is: #{err[:param]}"
      puts "Message is: #{err[:message]}"
    rescue Stripe::InvalidRequestError => e
      Rails.logger.error "Stripe error while updating card: #{ e.message }"
      @errors << e.message
    end

    def valid?
      errors.empty?
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
wbase-0.3.20 app/services/wbase/update_subscription.rb
wbase-0.3.19 app/services/wbase/update_subscription.rb
wbase-0.3.18 app/services/wbase/update_subscription.rb
wbase-0.3.17 app/services/wbase/update_subscription.rb