Sha256: 16d45c8ebaaceda3ee3bf98946ec53eef332ad2723df214cadfd4c14d182de99

Contents?: true

Size: 1.53 KB

Versions: 5

Compression:

Stored size: 1.53 KB

Contents

class StripeSubscriptionItem < StripeModelCallbacks::ApplicationRecord
  belongs_to :stripe_plan, optional: true, primary_key: "stripe_id"
  belongs_to :stripe_price, optional: true, primary_key: "stripe_id"
  belongs_to :stripe_subscription, optional: true, primary_key: "stripe_id"

  has_many :stripe_invoice_items, primary_key: "stripe_id"

  def self.stripe_class
    Stripe::SubscriptionItem
  end

  def assign_from_stripe(object)
    check_object_is_stripe_class(object)
    self.stripe_subscription_id = object.subscription if object.respond_to?(:subscription)
    self.stripe_plan_id = object.plan.id if object.try(:plan).respond_to?(:id)

    assign_price_from_stripe(object)

    StripeModelCallbacks::AttributesAssignerService.execute!(
      model: self, stripe_model: object,
      attributes: %w[id created metadata quantity]
    )
  end

  def update_quantity_on_stripe!(new_quantity)
    sub_object = stripe_subscription.to_stripe

    new_items = [{
      id: id,
      plan: stripe_plan_id,
      quantity: new_quantity
    }]

    sub_object.items = new_items
    sub_object.save

    stripe_subscription.reload_from_stripe!
    nil
  end

private

  def assign_price_from_stripe(object)
    # Older versions doesn't support price
    return unless object.try(:price).respond_to?(:id)

    # Make sure price is created
    price = StripePrice.find_by(stripe_id: object.price.id)
    StripePrice.create_from_stripe!(object.price) unless price

    # Set stripe ID on the subscription item
    self.stripe_price_id = object.price.id
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
stripe_model_callbacks-0.1.7 lib/stripe_model_callbacks/models/stripe_subscription_item.rb
stripe_model_callbacks-0.1.6 lib/stripe_model_callbacks/models/stripe_subscription_item.rb
stripe_model_callbacks-0.1.5 lib/stripe_model_callbacks/models/stripe_subscription_item.rb
stripe_model_callbacks-0.1.4 lib/stripe_model_callbacks/models/stripe_subscription_item.rb
stripe_model_callbacks-0.1.3 lib/stripe_model_callbacks/models/stripe_subscription_item.rb