Module: CoreMerchant::Concerns::SubscriptionStateMachine

Extended by:
ActiveSupport::Concern
Included in:
Subscription
Defined in:
lib/core_merchant/concerns/subscription_state_machine.rb

Overview

Adds state machine logic to a subscription. This module defines the possible states and transitions for a subscription. Possible transitions:

  • pending -> active, trial, processing_renewal

  • trial -> processing_renewal, active, canceled, pending_cancellation, expired

  • active -> pending_cancellation, canceled, expired, processing_renewal

  • past_due -> processing_renewal

  • pending_cancellation -> canceled, expired

  • processing_renewal -> processing_payment, active, expired, past_due

  • processing_payment -> active, expired, canceled, past_due

  • canceled -> pending, processing_renewal

  • expired -> pending, processing_renewal

Constant Summary collapse

POSSIBLE_TRANSITIONS =

List of possible transitions in the form of { to_state: [from_states] }

{
  pending: %i[canceled expired],
  trial: [:pending],
  active: %i[pending trial processing_renewal processing_payment],
  past_due: %i[active processing_renewal processing_payment],
  pending_cancellation: %i[active trial],
  processing_renewal: %i[pending trial active past_due canceled expired],
  processing_payment: [:processing_renewal],
  canceled: %i[trial active pending_cancellation processing_payment],
  expired: %i[trial active pending_cancellation processing_renewal processing_payment]
}.freeze