Module: ActsAsSubscription::Subscription::ClassMethods
- Defined in:
- lib/acts_as_subscription/subscription.rb
Overview
Class methods for an ActsAsSubscription::Subscription instance.
Handles validation of all subscription-related information, such as :
-
customer_code
-
email
-
first_name
-
last_name
-
zip_code
-
cc_expiration_month
-
cc_expiration_year
-
cc_verification_value
-
cc_number
These class methods should be included in ActiveRecord::Base to provide subscription validation support.
Instance Method Summary collapse
-
#acts_as_subscription(*args) ⇒ Object
Main entry point - any subclass of ActiveRecord::Base can include the acts_as_subscription method to activate subscription functionality.
Instance Method Details
#acts_as_subscription(*args) ⇒ Object
Main entry point - any subclass of ActiveRecord::Base can include the acts_as_subscription method to activate subscription functionality.
args should be a hash containing the subscription backend account and product information :
-
backend
: Name of the recurring billing service being used. Current choices are:chargify
,:cheddar_getter
and:recurly
. -
user
: Username used to log into the billling service API. -
password
: Password used to log into the billling service API. -
product_code
: Code of your product on the backend service.
There are three ways to initialize the backend :
-
Pass the parameters to the acts_as_subscription method from within a model :
class Subscription < ActiveRecord::Base acts_as_subscription :backend => :cheddar_getter, :user => 'my_user', :password => 'my_pass', :product_code => 'my_product' end
-
Set the params directly via the Backend module :
ActsAsSubscription::Subscription::Backend.config = { :backend => :cheddar_getter, :user => 'my_user', :password => 'my_pass', :product_code => 'my_product' }
-
Add a
config/subscription.yml
file to your rails project :development: backend: 'cheddar_getter' user: 'my_user' password: 'my_pass' product_code: 'my_product'
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/acts_as_subscription/subscription.rb', line 60 def acts_as_subscription(*args) ActsAsSubscription::Subscription::Backend.config = *args ActsAsSubscription::Subscription::Backend.initialize validates :customer_code, :presence => true validates :email, :presence => true validates :first_name, :presence => true validates :last_name, :presence => true validates :plan_code, :presence => true validates :zip_code, :presence => true, :if => :require_zip_code? validates :cc_expiration_month, :presence => true, :unless => :is_free_plan? validates :cc_expiration_year, :presence => true, :unless => :is_free_plan? validates :cc_verification_value, :presence => true, :if => :require_verification_value? validates :cc_number, :presence => true, :if => :require_cc_number? validates_associated :credit_card, :if => :require_cc_number? before_validation :update_credit_card before_validation :assign_customer_code, :on => :create validate :validate_credit_card, :if => :require_cc_number? attr_accessible :cc_expiration_month, :cc_expiration_year, :cc_number, :cc_verification_value, :customer_code, :email, :first_name, :last_name, :plan_code, :zip_code # Removed this for the time being, since we often want to perform this before_save # on a different model (such as User), if the forms are nested. Having before_save # on both models causes quite a few problems. This before_save must be specified # by hand in the implementing model. #before_save :backend_save self.send(:include, ActsAsSubscription::Subscription::SubscriptionInstanceMethods) end |