module ActsAsSubscribable

def subscribable_buyer

def subscribable_buyer
  raise 'acts_as_subscribable object requires the subscribable_buyer method be defined to return the User buying this item.'
end

def subscribable_quantity_used

def subscribable_quantity_used
  raise 'acts_as_subscribable object requires the subscribable_quantity_used method be defined to determine how many are in use.'
end

def subscribed?(stripe_plan_id = nil)

def subscribed?(stripe_plan_id = nil)
  return false if subscription_status.blank?
  stripe_plan_id ? (subscription&.stripe_plan_id == stripe_plan_id) : true
end

def subscripter

def subscripter
  @_effective_subscripter ||= begin
    Effective::Subscripter.new(subscribable: self, user: subscribable_buyer, quantity: subscription&.quantity, stripe_plan_id: subscription&.stripe_plan_id)
  end
end

def subscription_active?

def subscription_active?
  subscribed? && subscription_status == EffectiveOrders::ACTIVE
end

def subscription_past_due?

def subscription_past_due?
  subscribed? && subscription_status == EffectiveOrders::PAST_DUE
end

def subscription_trialing?

If we do use stripe
def subscription_trialing?
  subscribed? && subscription_status == EffectiveOrders::TRIALING
end

def trial_active?

def trial_active?
  trialing? && trialing_until > Time.zone.now
end

def trial_past_due?

def trial_past_due?
  trialing? && trialing_until < Time.zone.now
end

def trialing?

If we don't use stripe
def trialing?
  subscription_status.blank?
end