Module: Freemium::Coupon

Included in:
Coupon
Defined in:
lib/freemium/coupon.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/freemium/coupon.rb', line 4

def self.included(base)
  base.class_eval do
    has_many :coupon_redemptions, :dependent => :destroy, :class_name => "CouponRedemption", :foreign_key => :coupon_id
    has_many :subscriptions, :through => :coupon_redemptions
    has_and_belongs_to_many :subscription_plans, :class_name => "SubscriptionPlan",
      :join_table => :coupons_subscription_plans, :foreign_key => :coupon_id, :association_foreign_key => :subscription_plan_id

    validates_presence_of :description, :discount_percentage
    validates_inclusion_of :discount_percentage, :in => 1..100

    before_save :normalize_redemption_key
  end
end

Instance Method Details

#applies_to_plan?(subscription_plan) ⇒ Boolean



26
27
28
29
# File 'lib/freemium/coupon.rb', line 26

def applies_to_plan?(subscription_plan)
  return true if self.subscription_plans.blank? # applies to all plans
  self.subscription_plans.include?(subscription_plan)
end

#discount(rate) ⇒ Object



18
19
20
# File 'lib/freemium/coupon.rb', line 18

def discount(rate)
  rate * (1 - self.discount_percentage.to_f / 100)
end

#expired?Boolean



22
23
24
# File 'lib/freemium/coupon.rb', line 22

def expired?
  (self.redemption_expiration && Date.today > self.redemption_expiration) || (self.redemption_limit && self.coupon_redemptions.count >= self.redemption_limit)
end