Sha256: da75fe064ce06039b55d448c1e2bfc8b27f998de2817a5ac21f555fd9d2352bd

Contents?: true

Size: 1.96 KB

Versions: 19

Compression:

Stored size: 1.96 KB

Contents

module Pay
  module FakeProcessor
    class Subscription
      attr_reader :pay_subscription

      delegate :active?,
        :canceled?,
        :on_grace_period?,
        :on_trial?,
        :ends_at,
        :owner,
        :processor_subscription,
        :processor_id,
        :prorate,
        :processor_plan,
        :quantity?,
        :quantity,
        to: :pay_subscription

      def initialize(pay_subscription)
        @pay_subscription = pay_subscription
      end

      def subscription(**options)
        pay_subscription
      end

      # With trial, sets end to trial end (mimicing Stripe)
      # Without trial, sets can ends_at to end of month
      def cancel(**options)
        if pay_subscription.on_trial?
          pay_subscription.update(ends_at: pay_subscription.trial_ends_at)
        else
          pay_subscription.update(ends_at: Time.current.end_of_month)
        end
      end

      def cancel_now!(**options)
        ends_at = Time.current
        pay_subscription.update(
          status: :canceled,
          trial_ends_at: (ends_at if pay_subscription.trial_ends_at?),
          ends_at: ends_at
        )
      end

      def change_quantity(quantity, **options)
        pay_subscription.update(quantity: quantity)
      end

      def on_grace_period?
        canceled? && Time.current < ends_at
      end

      def paused?
        pay_subscription.status == "paused"
      end

      def pause
        pay_subscription.update(status: :paused, trial_ends_at: Time.current)
      end

      def resume
        unless on_grace_period? || paused?
          raise StandardError, "You can only resume subscriptions within their grace period."
        end
      end

      def swap(plan, **options)
        pay_subscription.update(processor_plan: plan, ends_at: nil, status: :active)
      end

      # Retries the latest invoice for a Past Due subscription
      def retry_failed_payment
        pay_subscription.update(status: :active)
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
pay-6.5.0 lib/pay/fake_processor/subscription.rb
pay-6.4.0 lib/pay/fake_processor/subscription.rb
pay-6.3.4 lib/pay/fake_processor/subscription.rb
pay-6.3.3 lib/pay/fake_processor/subscription.rb
pay-6.3.2 lib/pay/fake_processor/subscription.rb
pay-6.3.1 lib/pay/fake_processor/subscription.rb
pay-6.3.0 lib/pay/fake_processor/subscription.rb
pay-6.2.4 lib/pay/fake_processor/subscription.rb
pay-6.2.3 lib/pay/fake_processor/subscription.rb
pay-6.2.2 lib/pay/fake_processor/subscription.rb
pay-6.2.1 lib/pay/fake_processor/subscription.rb
pay-6.2.0 lib/pay/fake_processor/subscription.rb
pay-6.1.2 lib/pay/fake_processor/subscription.rb
pay-6.1.1 lib/pay/fake_processor/subscription.rb
pay-6.1.0 lib/pay/fake_processor/subscription.rb
pay-6.0.3 lib/pay/fake_processor/subscription.rb
pay-6.0.2 lib/pay/fake_processor/subscription.rb
pay-6.0.1 lib/pay/fake_processor/subscription.rb
pay-6.0.0 lib/pay/fake_processor/subscription.rb