Module: Pay

Defined in:
lib/pay/braintree/webhooks/subscription_expired.rb,
lib/pay.rb,
lib/pay/env.rb,
lib/pay/engine.rb,
lib/pay/errors.rb,
lib/pay/stripe.rb,
lib/pay/adapter.rb,
lib/pay/nano_id.rb,
lib/pay/payment.rb,
lib/pay/version.rb,
lib/pay/currency.rb,
lib/pay/receipts.rb,
lib/pay/webhooks.rb,
lib/pay/braintree.rb,
lib/pay/attributes.rb,
app/models/pay/charge.rb,
lib/pay/lemon_squeezy.rb,
app/models/pay/webhook.rb,
lib/pay/fake_processor.rb,
lib/pay/paddle_billing.rb,
lib/pay/paddle_classic.rb,
app/models/pay/customer.rb,
app/models/pay/merchant.rb,
lib/pay/webhooks/delegator.rb,
app/mailers/pay/user_mailer.rb,
app/models/pay/subscription.rb,
app/jobs/pay/application_job.rb,
app/models/pay/stripe/charge.rb,
lib/pay/webhooks/process_job.rb,
app/models/pay/payment_method.rb,
app/jobs/pay/customer_sync_job.rb,
app/models/pay/stripe/customer.rb,
app/models/pay/stripe/merchant.rb,
lib/pay/billable/sync_customer.rb,
app/helpers/pay/currency_helper.rb,
app/models/concerns/pay/routing.rb,
app/models/pay/braintree/charge.rb,
app/models/pay/application_record.rb,
app/models/pay/braintree/customer.rb,
app/mailers/pay/application_mailer.rb,
app/models/pay/stripe/subscription.rb,
lib/generators/pay/views_generator.rb,
app/models/pay/lemon_squeezy/charge.rb,
app/models/pay/fake_processor/charge.rb,
app/models/pay/paddle_billing/charge.rb,
app/models/pay/paddle_classic/charge.rb,
app/models/pay/stripe/payment_method.rb,
lib/pay/lemon_squeezy/webhooks/order.rb,
app/models/pay/braintree/subscription.rb,
app/models/pay/lemon_squeezy/customer.rb,
app/models/pay/fake_processor/customer.rb,
app/models/pay/fake_processor/merchant.rb,
app/models/pay/paddle_billing/customer.rb,
app/models/pay/paddle_classic/customer.rb,
lib/pay/stripe/webhooks/payment_failed.rb,
app/controllers/pay/payments_controller.rb,
app/models/pay/braintree/payment_method.rb,
lib/pay/stripe/webhooks/account_updated.rb,
lib/pay/stripe/webhooks/charge_refunded.rb,
lib/generators/pay/email_views_generator.rb,
lib/pay/stripe/webhooks/charge_succeeded.rb,
lib/pay/stripe/webhooks/customer_deleted.rb,
lib/pay/stripe/webhooks/customer_updated.rb,
app/models/pay/lemon_squeezy/subscription.rb,
app/controllers/pay/application_controller.rb,
app/models/pay/fake_processor/subscription.rb,
app/models/pay/paddle_billing/subscription.rb,
app/models/pay/paddle_classic/subscription.rb,
app/models/pay/lemon_squeezy/payment_method.rb,
lib/pay/lemon_squeezy/webhooks/subscription.rb,
app/models/pay/fake_processor/payment_method.rb,
app/models/pay/paddle_billing/payment_method.rb,
app/models/pay/paddle_classic/payment_method.rb,
lib/pay/paddle_billing/webhooks/subscription.rb,
lib/pay/stripe/webhooks/subscription_created.rb,
lib/pay/stripe/webhooks/subscription_deleted.rb,
lib/pay/stripe/webhooks/subscription_updated.rb,
lib/pay/stripe/webhooks/subscription_renewing.rb,
app/controllers/pay/webhooks/stripe_controller.rb,
lib/pay/stripe/webhooks/payment_method_updated.rb,
lib/pay/stripe/webhooks/payment_action_required.rb,
lib/pay/stripe/webhooks/payment_method_attached.rb,
lib/pay/stripe/webhooks/payment_method_detached.rb,
lib/pay/braintree/webhooks/subscription_canceled.rb,
lib/pay/stripe/webhooks/payment_intent_succeeded.rb,
app/controllers/pay/webhooks/braintree_controller.rb,
lib/pay/paddle_classic/webhooks/signature_verifier.rb,
lib/pay/stripe/webhooks/checkout_session_completed.rb,
lib/pay/braintree/webhooks/subscription_trial_ended.rb,
lib/pay/braintree/webhooks/subscription_went_active.rb,
lib/pay/lemon_squeezy/webhooks/subscription_payment.rb,
lib/pay/stripe/webhooks/subscription_trial_will_end.rb,
lib/pay/paddle_classic/webhooks/subscription_created.rb,
lib/pay/paddle_classic/webhooks/subscription_updated.rb,
app/controllers/pay/webhooks/lemon_squeezy_controller.rb,
lib/pay/braintree/webhooks/subscription_went_past_due.rb,
lib/pay/paddle_billing/webhooks/transaction_completed.rb,
app/controllers/pay/webhooks/paddle_billing_controller.rb,
app/controllers/pay/webhooks/paddle_classic_controller.rb,
lib/pay/paddle_classic/webhooks/subscription_cancelled.rb,
lib/pay/braintree/webhooks/subscription_charged_successfully.rb,
lib/pay/paddle_classic/webhooks/subscription_payment_refunded.rb,
lib/pay/braintree/webhooks/subscription_charged_unsuccessfully.rb,
lib/pay/paddle_classic/webhooks/subscription_payment_succeeded.rb,
lib/pay/stripe/webhooks/checkout_session_async_payment_succeeded.rb

Overview

A subscription successfully moves to the next billing cycle. This will also occur when either a new transaction is created mid-cycle due to proration on an upgrade or a billing cycle is skipped due to the presence of a negative balance that covers the cost of the subscription.

Defined Under Namespace

Modules: Adapter, Attributes, Billable, Braintree, CurrencyHelper, Env, FakeProcessor, Generators, LemonSqueezy, NanoId, PaddleBilling, PaddleClassic, Receipts, Routing, Stripe, Webhooks Classes: ActionRequired, ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, Charge, Currency, Customer, CustomerSyncJob, Engine, Error, InvalidPaymentMethod, Merchant, Payment, PaymentError, PaymentMethod, PaymentsController, Subscription, UserMailer, Webhook

Constant Summary collapse

VERSION =
"8.3.0"
@@model_parent_class =
"ApplicationRecord"
@@automount_routes =
true
@@default_product_name =
"default"
@@default_plan_name =
"default"
@@routes_path =
"/pay"
@@enabled_processors =
[:stripe, :braintree, :paddle_billing, :paddle_classic, :lemon_squeezy]
@@send_emails =
true
@@emails =
ActiveSupport::OrderedOptions.new
@@mailer =
"Pay::UserMailer"
@@parent_mailer =
"Pay::ApplicationMailer"
@@mail_arguments =
-> {
  {
    to: instance_exec(&Pay.mail_to),
    subject: default_i18n_subject(application: Pay.application_name)
  }
}
@@mail_to =
-> {
  if ::ActionMailer::Base.respond_to?(:email_address_with_name)
    ::ActionMailer::Base.email_address_with_name(params[:pay_customer].email, params[:pay_customer].customer_name)
  else
    ::Mail::Address.new.tap do |builder|
      builder.address = params[:pay_customer].email
      builder.display_name = params[:pay_customer].customer_name.presence
    end.to_s
  end
}

Class Method Summary collapse

Class Method Details

.mailerObject



85
86
87
# File 'lib/pay.rb', line 85

def self.mailer
  @@mailer_ref ||= @@mailer&.constantize
end

.mailer=(value) ⇒ Object



80
81
82
83
# File 'lib/pay.rb', line 80

def self.mailer=(value)
  @@mailer = value
  @@mailer_ref = nil
end

.resolve_option(option, *remaining_args) ⇒ Object



127
128
129
130
131
132
133
# File 'lib/pay.rb', line 127

def self.resolve_option(option, *remaining_args)
  if option.respond_to?(:call)
    option.call(*remaining_args)
  else
    option
  end
end

.send_email?(email_option, *remaining_args) ⇒ Boolean

Returns:

  • (Boolean)


118
119
120
121
122
123
124
125
# File 'lib/pay.rb', line 118

def self.send_email?(email_option, *remaining_args)
  if resolve_option(send_emails, *remaining_args)
    email_config_option_enabled = emails.send(email_option)
    resolve_option(email_config_option_enabled, *remaining_args)
  else
    false
  end
end

.setup {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Pay)

    the object that the method was called on



114
115
116
# File 'lib/pay.rb', line 114

def self.setup
  yield self
end

.support_email=(value) ⇒ Object



43
44
45
# File 'lib/pay.rb', line 43

def self.support_email=(value)
  @@support_email = value.is_a?(::Mail::Address) ? value : ::Mail::Address.new(value)
end

.sync(params) ⇒ Object



135
136
137
138
139
140
141
142
143
# File 'lib/pay.rb', line 135

def self.sync(params)
  if (session_id = params[:stripe_checkout_session_id] || params[:session_id])
    Pay::Stripe.sync_checkout_session(session_id)
  elsif (transaction_id = params[:paddle_billing_transaction_id] || params[:transaction_id])
    Pay::PaddleBilling.sync_transaction(transaction_id)
  elsif (order_id = params[:lemon_squeezy_order_id])
    Pay::LemonSqueezy.sync_order(order_id)
  end
end