Sha256: b04152f1f916f08176fcfa480d218812c59e717680bffd31b1a8746d8cd1eee0

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

require 'devise/hooks/referable'

module Devise
  module Referable
    module Referral

      def self.included(base)
        base.extend(ClassMethods)
      end
      
      module InstanceMethods
        def generate_token
          self.referral_token ||= Devise.friendly_token
        end
      end
      
      module ClassMethods
        def acts_as_referral(options = {})
          class_eval <<-EOV
            include Devise::Referable::Referral::InstanceMethods

            def self.referrer_types
              User.referrer_types
            end

            def self.lookup_referrer(token)
              unless token.blank?
                referrer_types.map{ |type| type.to_s.classify.constantize }.each do |klass|
                  ref = klass.find_by_referrer_token(token)
                  return ref unless ref.nil?
                end
              end
              return nil
            end

            def self.from_token(token)
              sender = lookup_referrer(token)
              if sender
                self.create do |ref|
                  ref.referrer = sender
                end
              end
            end

            belongs_to :referrer, :polymorphic => true
            belongs_to :recipient, :class_name => 'User'
            before_create :generate_token
            
          EOV
        end
      end
    end
  end
end



Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
devise_referable-0.3.0 lib/devise_referable/referral.rb
devise_referable-0.2.0 lib/devise_referable/referral.rb