devise_referable 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES ADDED
@@ -0,0 +1,3 @@
1
+ 0.2.0
2
+ Removed the Referral model, since users may want to add their own behavior.
3
+ Now that it is created separately, the acts_as_referral method adds the necessary behavior for the Devise gem.
data/README.rdoc CHANGED
@@ -23,7 +23,7 @@ Configure devise_referable inside your app (and warden and devise if you weren't
23
23
 
24
24
  Follow the walkthrough for devise with the following modifications.
25
25
 
26
- Create a migration for the referrals table:
26
+ Create a migration for the referrals table, minimally:
27
27
 
28
28
  create_table :referrals, :force => true do |t|
29
29
  t.integer :referrer_id
@@ -34,6 +34,12 @@ Create a migration for the referrals table:
34
34
  t.timestamps
35
35
  end
36
36
 
37
+ And create a Referral class, minimally:
38
+
39
+ class Referral < ActiveRecord::Base
40
+ acts_as_referral
41
+ end
42
+
37
43
  Add a referrer_token column to your referrer classes.
38
44
 
39
45
  add_column :table_name1, :referrer_token, :string
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{devise_referable}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Van Horn, based on work by Sergio Cambra"]
12
- s.date = %q{2010-03-16}
12
+ s.date = %q{2010-03-22}
13
13
  s.description = %q{It tracks the referring entity via cookie, and creates a record when user registers.}
14
14
  s.email = %q{mattvanhorn@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -19,17 +19,18 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ "CHANGES",
22
23
  "LICENSE",
23
24
  "README.rdoc",
24
25
  "Rakefile",
25
26
  "VERSION",
26
27
  "app/controllers/referrals_controller.rb",
27
- "app/models/referral.rb",
28
28
  "devise_referable.gemspec",
29
29
  "init.rb",
30
30
  "lib/devise/hooks/referable.rb",
31
31
  "lib/devise_referable.rb",
32
32
  "lib/devise_referable/model.rb",
33
+ "lib/devise_referable/referral.rb",
33
34
  "lib/devise_referable/routes.rb",
34
35
  "rails/init.rb",
35
36
  "test/integration/referable_test.rb",
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
43
44
  "test/rails_app/app/controllers/users_controller.rb",
44
45
  "test/rails_app/app/helpers/application_helper.rb",
45
46
  "test/rails_app/app/models/blog.rb",
47
+ "test/rails_app/app/models/referral.rb",
46
48
  "test/rails_app/app/models/user.rb",
47
49
  "test/rails_app/app/views/home/index.html.erb",
48
50
  "test/rails_app/config/boot.rb",
@@ -78,6 +80,7 @@ Gem::Specification.new do |s|
78
80
  "test/rails_app/app/controllers/users_controller.rb",
79
81
  "test/rails_app/app/helpers/application_helper.rb",
80
82
  "test/rails_app/app/models/blog.rb",
83
+ "test/rails_app/app/models/referral.rb",
81
84
  "test/rails_app/app/models/user.rb",
82
85
  "test/rails_app/config/boot.rb",
83
86
  "test/rails_app/config/environment.rb",
@@ -0,0 +1,57 @@
1
+ require 'devise/hooks/referable'
2
+
3
+ module Devise
4
+ module Referable
5
+ module Referral
6
+
7
+ def self.included(base)
8
+ base.extend(ClassMethods)
9
+ end
10
+
11
+ module InstanceMethods
12
+ def generate_token
13
+ self.referral_token ||= Devise.friendly_token
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ def acts_as_referral(options = {})
19
+ class_eval <<-EOV
20
+ include Devise::Referable::Referral::InstanceMethods
21
+
22
+ def self.referrer_types
23
+ User.referrer_types
24
+ end
25
+
26
+ def self.lookup_referrer(token)
27
+ unless token.blank?
28
+ referrer_types.map{ |type| type.to_s.classify.constantize }.each do |klass|
29
+ ref = klass.find_by_referrer_token(token)
30
+ return ref unless ref.nil?
31
+ end
32
+ end
33
+ return nil
34
+ end
35
+
36
+ def self.from_token(token)
37
+ sender = lookup_referrer(token)
38
+ if sender
39
+ self.create do |ref|
40
+ ref.referrer = sender
41
+ end
42
+ end
43
+ end
44
+
45
+ belongs_to :referrer, :polymorphic => true
46
+ belongs_to :recipient, :class_name => 'User'
47
+ before_create :generate_token
48
+
49
+ EOV
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+
57
+
@@ -7,6 +7,5 @@ Devise.add_module :referable, :controller => :referrals, :model => 'devise_refer
7
7
 
8
8
  module DeviseReferable; end
9
9
 
10
- require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'referral')
11
-
12
10
  require 'devise_referable/routes'
11
+ require 'devise_referable/referral'
data/rails/init.rb CHANGED
@@ -1 +1,3 @@
1
- require 'devise_referable'
1
+ require 'devise_referable'
2
+
3
+ ActiveRecord::Base.class_eval { include Devise::Referable::Referral }
@@ -19,6 +19,7 @@ class ReferableTest < ActiveSupport::TestCase
19
19
  test 'should create referral from token' do
20
20
  Blog.expects(:find_by_referrer_token).with('abc123').returns(create_user) # I just need an AR obj here to avoid massive stubbing.
21
21
  # Should be a blog not a user.
22
+
22
23
  result = Referral.from_token('abc123')
23
24
  assert result.is_a?( Referral)
24
25
  assert_not_nil result.referral_token
@@ -0,0 +1,4 @@
1
+ class Referral < ActiveRecord::Base
2
+ acts_as_referral
3
+
4
+ end
data/test/test_helper.rb CHANGED
@@ -44,7 +44,7 @@ ActionController::Routing::Routes.draw do |map|
44
44
  end
45
45
 
46
46
  require File.join(File.dirname(__FILE__), '..', 'app', 'controllers', 'referrals_controller')
47
- require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'referral')
47
+ # require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'referral')
48
48
 
49
49
  Webrat.configure do |config|
50
50
  config.mode = :rails
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matt Van Horn, based on work by Sergio Cambra
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-16 00:00:00 -04:00
17
+ date: 2010-03-22 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -67,17 +67,18 @@ extra_rdoc_files:
67
67
  files:
68
68
  - .document
69
69
  - .gitignore
70
+ - CHANGES
70
71
  - LICENSE
71
72
  - README.rdoc
72
73
  - Rakefile
73
74
  - VERSION
74
75
  - app/controllers/referrals_controller.rb
75
- - app/models/referral.rb
76
76
  - devise_referable.gemspec
77
77
  - init.rb
78
78
  - lib/devise/hooks/referable.rb
79
79
  - lib/devise_referable.rb
80
80
  - lib/devise_referable/model.rb
81
+ - lib/devise_referable/referral.rb
81
82
  - lib/devise_referable/routes.rb
82
83
  - rails/init.rb
83
84
  - test/integration/referable_test.rb
@@ -91,6 +92,7 @@ files:
91
92
  - test/rails_app/app/controllers/users_controller.rb
92
93
  - test/rails_app/app/helpers/application_helper.rb
93
94
  - test/rails_app/app/models/blog.rb
95
+ - test/rails_app/app/models/referral.rb
94
96
  - test/rails_app/app/models/user.rb
95
97
  - test/rails_app/app/views/home/index.html.erb
96
98
  - test/rails_app/config/boot.rb
@@ -150,6 +152,7 @@ test_files:
150
152
  - test/rails_app/app/controllers/users_controller.rb
151
153
  - test/rails_app/app/helpers/application_helper.rb
152
154
  - test/rails_app/app/models/blog.rb
155
+ - test/rails_app/app/models/referral.rb
153
156
  - test/rails_app/app/models/user.rb
154
157
  - test/rails_app/config/boot.rb
155
158
  - test/rails_app/config/environment.rb
@@ -1,38 +0,0 @@
1
- require 'devise/hooks/referable'
2
-
3
- class Referral < ActiveRecord::Base
4
- belongs_to :referrer, :polymorphic => true
5
- belongs_to :recipient, :class_name => 'User'
6
-
7
- before_create :generate_token
8
-
9
- class << self
10
- def referrer_types
11
- User.referrer_types
12
- end
13
-
14
- def lookup_referrer(token)
15
- unless token.blank?
16
- referrer_types.map{ |type| type.to_s.classify.constantize }.each do |klass|
17
- ref = klass.find_by_referrer_token(token)
18
- return ref unless ref.nil?
19
- end
20
- end
21
- return nil
22
- end
23
-
24
- def from_token(token)
25
- sender = lookup_referrer(token)
26
- if sender
27
- Referral.create do |ref|
28
- ref.referrer = sender
29
- end
30
- end
31
- end
32
- end
33
-
34
- def generate_token
35
- self.referral_token ||= Devise.friendly_token
36
- end
37
-
38
- end