Sha256: 02195fae05a6407af73647877a9f99bb7973fc28cbe61f448be53826d5737fec

Contents?: true

Size: 972 Bytes

Versions: 1

Compression:

Stored size: 972 Bytes

Contents

module Shopper
  module CartPage
    class UpdateCoupon
      def initialize(params, order)
        @params = params
        @order  = order
      end

      attr_reader :coupon

      def call
        set_coupon
        return true unless need_to_update?
        return false unless @coupon.valid?
        deattach_coupon? ? deattach_coupon : update_coupon
      end

      private

      def set_coupon
        @coupon = CouponForm.from_params(@params[:coupon])
      end

      def need_to_update?
        new_code != current_code
      end

      def deattach_coupon?
        !current_code.blank? && new_code.blank?
      end

      def deattach_coupon
        @order.coupon = nil
        @order.save
      end

      def update_coupon
        @order.coupon = Coupon.find_by(code: @coupon.code)
        @order.save
      end

      def current_code
        @order.coupon&.code&.to_s
      end

      def new_code
        @coupon.code&.to_s
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoppper-0.1.0 app/commands/shopper/cart_page/update_coupon.rb