Pay is a subscription engine for Ruby on Rails.
Supports Ruby on Rails 4.2 and higher.
Current Payment Providers
- Stripe (API version 2018-08-23 or higher required)
Payment Providers In Development
- Braintree
Want to add a new payment provider? Contributions are welcome and the instructions are here.
Add this line to your application's Gemfile:
gem 'pay'
And then execute:
$ bundle
Or install it yourself as:
$ gem install pay
This engine will create a subscription model and the neccessary migrations for the model you want to make "billable." The most common use case for the billable model is a User.
To add the migrations to your application, run the following migration:
$ bin/rails pay:install:migrations
This will install two migrations:
- db/migrate/create_subscriptions.rb
- db/migrate/add_fields_to_users.rb
If you need to use a model other than User
, check out the wiki page.
Finally, run the migrations with $ rake db:migrate
You'll need to add your private Stripe API key to your Rails secrets. config/secrets.yml
development:
stripe_api_key: sk_test_....
Include the Pay::Billable
module in the model you want to know about subscriptions.
# app/models/user.rb
class User < ActiveRecord::Base
include Pay::Billable
end
To see how to use Stripe Elements JS & Devise, click here.
user = User.find_by(email: '[email protected]')
user.card_token = 'stripe-token'
user.subscribe
A card_token
must be provided as an attribute.
The subscribe method has three optional arguments with default values.
def subscribe(name = 'default', plan = 'default', processor = 'stripe')
...
end
Name is an internally used name for the subscription.
Plan is the plan ID from the payment processor.
user = User.find_by(email: '[email protected]')
user.subscription
user = User.find_by(email: '[email protected]')
user.subscribed?
The subscribed?
method has two optional arguments with default values.
def subscribed?(name = 'default', plan = nil)
...
end
Name is an internally used name for the subscription.
Plan is the plan ID from the payment processor.
Processor is the string value of the payment processor subscription. Pay currently only supports Stripe, but other implementations are welcome.
user = User.find_by(email: '[email protected]')
user.customer
user = User.find_by(email: '[email protected]')
user.update_card('stripe-token')
user = User.find_by(email: '[email protected]')
user.processor_subscription(subscription_id)
user = User.find_by(email: '[email protected]')
user.subscription.on_trial?
user = User.find_by(email: '[email protected]')
user.subscription.cancelled?
user = User.find_by(email: '[email protected]')
user.subscription.on_grace_period?
user = User.find_by(email: '[email protected]')
user.subscription.active?
user = User.find_by(email: '[email protected]')
user.subscription.cancel
user = User.find_by(email: '[email protected]')
user.subscription.cancel_now!
user = User.find_by(email: '[email protected]')
user.subscription.swap("yearly")
user = User.find_by(email: '[email protected]')
user.subscription.resume
user = User.find_by(email: '[email protected]')
user.subscription.processor_subscription
👋 Thanks for your interest in contributing. Feel free to fork this repo.
If you have an issue you'd like to submit, please do so using the issue tracker in GitHub. In order for us to help you in the best way possible, please be as detailed as you can.
If you'd like to open a PR please make sure the following things pass:
rake test
rubocop
These will need to be passing in order for a Pull Request to be accepted.
The gem is available as open source under the terms of the MIT License.