From 1edebade783116800a3ed5c6323d490ac997a4ca Mon Sep 17 00:00:00 2001 From: Arun Kumar Mohan Date: Fri, 11 Dec 2020 19:42:52 -0500 Subject: [PATCH] Extract Stripe credit card deletion logic to a service object --- .../spree/credit_cards_controller.rb | 12 ++--------- app/services/stripe/credit_card_remover.rb | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 app/services/stripe/credit_card_remover.rb diff --git a/app/controllers/spree/credit_cards_controller.rb b/app/controllers/spree/credit_cards_controller.rb index 652e9878b0..6a94dbdd7e 100644 --- a/app/controllers/spree/credit_cards_controller.rb +++ b/app/controllers/spree/credit_cards_controller.rb @@ -1,4 +1,4 @@ -require 'stripe/credit_card_clone_destroyer' +# frozen_string_literal: true module Spree class CreditCardsController < BaseController @@ -42,7 +42,7 @@ module Spree @credit_card = Spree::CreditCard.find_by(id: params[:id]) if @credit_card authorize! :destroy, @credit_card - destroy_at_stripe + Stripe::CreditCardRemover.new(@credit_card).call end # Using try because we may not have a card here @@ -64,14 +64,6 @@ module Spree @credit_card.user.customers.update_all(allow_charges: false) end - # It destroys the whole customer object - def destroy_at_stripe - Stripe::CreditCardCloneDestroyer.new.destroy_clones(@credit_card) - - stripe_customer = Stripe::Customer.retrieve(@credit_card.gateway_customer_profile_id, {}) - stripe_customer&.delete unless stripe_customer.deleted? - end - def create_customer(token) Stripe::Customer.create(email: spree_current_user.email, source: token) end diff --git a/app/services/stripe/credit_card_remover.rb b/app/services/stripe/credit_card_remover.rb new file mode 100644 index 0000000000..9d691f2dab --- /dev/null +++ b/app/services/stripe/credit_card_remover.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'stripe/credit_card_clone_destroyer' + +module Stripe + class CreditCardRemover + def initialize(credit_card) + @credit_card = credit_card + end + + def call + Stripe::CreditCardCloneDestroyer.new.destroy_clones(@credit_card) + + stripe_customer = Stripe::Customer.retrieve(@credit_card.gateway_customer_profile_id, {}) + return unless stripe_customer + + stripe_customer.delete unless stripe_customer.deleted? + end + end +end