teamon-merb-auth-slice-activation 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +198 -0
  3. data/Rakefile +57 -0
  4. data/TODO +9 -0
  5. data/app/controllers/activations.rb +24 -0
  6. data/app/controllers/application.rb +5 -0
  7. data/app/helpers/application_helper.rb +64 -0
  8. data/app/helpers/mailer_helper.rb +29 -0
  9. data/app/mailers/activation_mailer.rb +18 -0
  10. data/app/mailers/views/activation_mailer/activation.text.erb +1 -0
  11. data/app/mailers/views/activation_mailer/signup.text.erb +7 -0
  12. data/app/views/layout/merb_auth_slice_activation.html.erb +16 -0
  13. data/lib/merb-auth-slice-activation.rb +91 -0
  14. data/lib/merb-auth-slice-activation/merbtasks.rb +112 -0
  15. data/lib/merb-auth-slice-activation/mixins/activated_user.rb +118 -0
  16. data/lib/merb-auth-slice-activation/mixins/activated_user/ar_activated_user.rb +21 -0
  17. data/lib/merb-auth-slice-activation/mixins/activated_user/dm_activated_user.rb +24 -0
  18. data/lib/merb-auth-slice-activation/mixins/activated_user/sq_activated_user.rb +23 -0
  19. data/lib/merb-auth-slice-activation/slicetasks.rb +18 -0
  20. data/lib/merb-auth-slice-activation/spectasks.rb +75 -0
  21. data/public/javascripts/master.js +0 -0
  22. data/public/stylesheets/master.css +2 -0
  23. data/spec/controllers/activations_spec.rb +83 -0
  24. data/spec/mailers/activation_mailer_spec.rb +68 -0
  25. data/spec/mixins/activated_user_spec.rb +122 -0
  26. data/spec/spec_helper.rb +61 -0
  27. data/stubs/app/controllers/activations.rb +8 -0
  28. data/stubs/app/mailers/views/activation_mailer/activation.text.erb +1 -0
  29. data/stubs/app/mailers/views/activation_mailer/signup.text.erb +7 -0
  30. metadata +138 -0
File without changes
@@ -0,0 +1,2 @@
1
+ html, body { margin: 0; padding: 0; }
2
+ #container { width: 800px; margin: 4em auto; padding: 4em 4em 6em 4em; background: #DDDDDD; }
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "Activation in the controller" do
4
+ before(:all) do
5
+ Merb::Router.reset!
6
+ Merb::Router.prepare do
7
+ match("/foos").to(:controller => "foo", :action => "index")
8
+ add_slice(:merb_auth_slice_activation, :path_prefix => "activation")
9
+ end
10
+
11
+ User.all.destroy!
12
+ end
13
+
14
+ after(:all) do
15
+ Merb::Router.reset!
16
+ end
17
+
18
+ before(:each) do
19
+ @active_user = User.create( user_attributes(:login => "fred") )
20
+ @active_user.activate!
21
+ @user = User.create( user_attributes(:login => "barney", :email => "barney@example.com"))
22
+
23
+ class TestStrategy < Merb::Authentication::Strategy
24
+ def run!
25
+ User.first(:login => request.params[:login])
26
+ end
27
+ end
28
+
29
+ class Foo < Merb::Controller
30
+ before :ensure_authenticated
31
+ def index ; "INDEX" ; end
32
+ end
33
+
34
+ end
35
+
36
+ after(:each) do
37
+ User.all.destroy!
38
+ end
39
+
40
+ describe "Authenticating the session" do
41
+
42
+ it "should successfully login a user who is activated" do
43
+ @active_user.should be_active
44
+ result = request("/foos", :params => {:login => "fred"})
45
+ result.status.should == 200
46
+ result.body.should == "INDEX"
47
+ end
48
+
49
+ it "should raise an error for a user who is not activated" do
50
+ @user.should_not be_active
51
+ result = request("/foos", :params => {:login => "barney"})
52
+ result.should_not be_successful
53
+ result.status.should == 401
54
+ end
55
+
56
+ it "should refuse entry until activated" do
57
+ @user.should_not be_active
58
+ result = request("/foos", :params => {:login => "barney"})
59
+ result.status.should == 401
60
+ @user.activate!
61
+ result = request("/foos", :params => {:login => "barney"})
62
+ result.should be_successful
63
+ result.body.should == "INDEX"
64
+ end
65
+
66
+ end
67
+
68
+ describe "activating a user" do
69
+ it "should activate a user with the correct activation code" do
70
+ ac = @user.activation_code
71
+ ac.should_not be_nil
72
+ @user.should_not be_active
73
+ request("/activation/activate/#{ac}")
74
+ User.first(:login => "barney").should be_active
75
+ end
76
+
77
+ it "should redirect after activation" do
78
+ r = request("/activation/activate/#{@user.activation_code}")
79
+ r.should redirect
80
+ end
81
+ end
82
+
83
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "ActivationMailer" do
4
+
5
+ before(:all) do
6
+ Merb::Router.prepare { add_slice(:merb_auth_slice_activation)}
7
+ User.auto_migrate!
8
+ end
9
+
10
+ after(:all) do
11
+ Merb::Router.reset!
12
+ end
13
+
14
+ describe MerbAuthSliceActivation::ActivationMailer do
15
+
16
+ def deliver(action, mail_opts= {},opts = {})
17
+ MerbAuthSliceActivation::ActivationMailer.dispatch_and_deliver action, mail_opts, opts
18
+ @delivery = Merb::Mailer.deliveries.last
19
+ end
20
+
21
+ before(:each) do
22
+ @u = User.new(:email => "homer@simpsons.com", :login => "homer", :activation_code => "12345")
23
+ @mailer_params = { :from => "info@mysite.com", :to => @u.email, :subject => "Welcome to MySite.com" }
24
+ end
25
+
26
+ after(:each) do
27
+ Merb::Mailer.deliveries.clear
28
+ end
29
+
30
+ it "should send mail to homer@simpsons.com for the signup email" do
31
+ deliver(:signup, @mailer_params, :user => @u)
32
+ @delivery.assigns(:headers).should include("to: homer@simpsons.com")
33
+ end
34
+
35
+ it "should send the mail from 'info@mysite.com' for the signup email" do
36
+ deliver(:signup, @mailer_params, :user => @u)
37
+ @delivery.assigns(:headers).should include("from: info@mysite.com")
38
+ end
39
+
40
+ it "should mention the users login in the text signup mail" do
41
+ deliver(:signup, @mailer_params, :user => @u)
42
+ @delivery.text.should include(@u.login)
43
+ end
44
+
45
+ it "should mention the activation link in the signup emails" do
46
+ deliver(:signup, @mailer_params, :user => @u)
47
+ the_url = MerbAuthSliceActivation::ActivationMailer.new.slice_url(:activate, :activation_code => @u.activation_code)
48
+ the_url.should_not be_nil
49
+ @delivery.text.should include( the_url )
50
+ end
51
+
52
+ it "should send mail to homer@simpson.com for the activation email" do
53
+ deliver(:activation, @mailer_params, :user => @u)
54
+ @delivery.assigns(:headers).should include("to: homer@simpsons.com")
55
+ end
56
+
57
+ it "should send the mail from 'info@mysite.com' for the activation email" do
58
+ deliver(:activation, @mailer_params, :user => @u)
59
+ @delivery.assigns(:headers).should include("from: info@mysite.com")
60
+ end
61
+
62
+ it "should mention ther users login in the text activation mail" do
63
+ deliver(:activation, @mailer_params, :user => @u)
64
+ @delivery.text.should include(@u.email)
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,122 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "Actviated User" do
4
+ before(:all) do
5
+ Merb::Router.prepare { add_slice(:merb_auth_slice_activation)}
6
+ end
7
+
8
+ after(:all) do
9
+ Merb::Router.reset!
10
+ end
11
+
12
+ describe "ActivatedUser Mixin" do
13
+
14
+ include ActivatedUserSpecHelper
15
+
16
+ before(:all) do
17
+ User.auto_migrate!
18
+ end
19
+
20
+ before(:each) do
21
+ @user = User.new(user_attributes)
22
+ end
23
+
24
+ after(:each) do
25
+ User.all.destroy!
26
+ end
27
+
28
+ it "should add the 'activated_at' property to the user model" do
29
+ @user.should respond_to(:activated_at)
30
+ @user.should respond_to(:activated_at=)
31
+ end
32
+
33
+ it "should add the 'activation_code' property to the user model" do
34
+ @user.should respond_to(:activation_code)
35
+ @user.should respond_to(:activation_code=)
36
+ end
37
+
38
+ it "should mark all new users as not activated" do
39
+ @user.activated?.should == false
40
+ end
41
+
42
+ it "should mark all new users as not active" do
43
+ @user.active?.should == false
44
+ end
45
+
46
+ end
47
+
48
+
49
+ describe "ActivatedUser Mixin Activation Code" do
50
+
51
+ include ActivatedUserSpecHelper
52
+
53
+ before(:all) do
54
+ User.auto_migrate!
55
+ end
56
+
57
+ after(:each) do
58
+ User.all.destroy!
59
+ end
60
+
61
+ before(:each) do
62
+ @user = User.new(user_attributes)
63
+ end
64
+
65
+ it "should set the activation_code" do
66
+ @user.activation_code.should be_nil
67
+ @user.save
68
+ @user.activation_code.should_not be_nil
69
+ end
70
+ end
71
+
72
+
73
+ describe "Activation" do
74
+
75
+ include ActivatedUserSpecHelper
76
+
77
+ before(:all) do
78
+ User.auto_migrate!
79
+ end
80
+
81
+ before(:each) do
82
+ User.all.destroy!
83
+ @user = User.create(user_attributes)
84
+ end
85
+
86
+ after(:each) do
87
+ User.all.destroy!
88
+ end
89
+
90
+ it "should mark users as active" do
91
+ @user.should_not be_active
92
+ @user.activate!
93
+ @user.should be_active
94
+ @user.reload
95
+ @user.should be_active
96
+ end
97
+
98
+ it "should mark user as (just) activated" do
99
+ @user.activate!
100
+ @user.should be_recently_activated
101
+ end
102
+
103
+ it "should set the activated_at property to the current date and time" do
104
+ now = DateTime.now
105
+ DateTime.should_receive(:now).and_return(now)
106
+ @user.activate!
107
+ @user.activated_at.should == now
108
+ end
109
+
110
+ it "should clear out the activation code" do
111
+ @user.activation_code.should_not be_nil
112
+ @user.activate!
113
+ @user.activation_code.should be_nil
114
+ end
115
+
116
+ it "should send out the activation notification" do
117
+ @user.should_receive(:send_activation_notification)
118
+ @user.activate!
119
+ end
120
+
121
+ end
122
+ end
@@ -0,0 +1,61 @@
1
+ require 'rubygems'
2
+ require 'merb-core'
3
+ require 'merb-slices'
4
+ require 'spec'
5
+ require 'dm-core'
6
+ require 'dm-validations'
7
+
8
+ # Add merb-auth-slice-activation.rb to the search path
9
+ Merb::Plugins.config[:merb_slices][:auto_register] = true
10
+ Merb::Plugins.config[:merb_slices][:search_path] = File.join(File.dirname(__FILE__), '..', 'lib', 'merb-auth-slice-activation.rb')
11
+
12
+ # Using Merb.root below makes sure that the correct root is set for
13
+ # - testing standalone, without being installed as a gem and no host application
14
+ # - testing from within the host application; its root will be used
15
+ Merb.start_environment(
16
+ :testing => true,
17
+ :adapter => 'runner',
18
+ :environment => ENV['MERB_ENV'] || 'test',
19
+ :merb_root => Merb.root,
20
+ :session_store => :memory,
21
+ :exception_details => true
22
+ )
23
+
24
+ module Merb
25
+ module Test
26
+ module SliceHelper
27
+
28
+ # The absolute path to the current slice
29
+ def current_slice_root
30
+ @current_slice_root ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
31
+ end
32
+
33
+ # Whether the specs are being run from a host application or standalone
34
+ def standalone?
35
+ Merb.root == ::MerbAuthSliceActivation.root
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+
42
+ module ActivatedUserSpecHelper
43
+ def user_attributes(options = {})
44
+ { :login => 'fred',
45
+ :email => 'fred@example.com'
46
+ }.merge(options)
47
+ end
48
+ end
49
+
50
+ class Merb::Mailer
51
+ self.delivery_method = :test_send
52
+ end
53
+
54
+ Spec::Runner.configure do |config|
55
+ config.include(Merb::Test::ViewHelper)
56
+ config.include(Merb::Test::RouteHelper)
57
+ config.include(Merb::Test::ControllerHelper)
58
+ config.include(Merb::Test::SliceHelper)
59
+ config.include(ActivatedUserSpecHelper)
60
+ config.before(:all){ User.auto_migrate! }
61
+ end
@@ -0,0 +1,8 @@
1
+ class MerbAuthSliceActivation::Activations < MerbAuthSliceActivation::Application
2
+
3
+ private
4
+ def redirect_after_activation
5
+ redirect "/", :message => {:notice => "Activation Successful"}
6
+ end
7
+
8
+ end # MerbAuthSliceActivation::Activations
@@ -0,0 +1 @@
1
+ Your email has been authenticated <%= @user.email %>
@@ -0,0 +1,7 @@
1
+ Your account has been created.
2
+
3
+ Username: <%= @user.send(Merb::Authentication::Strategies::Basic::Base.login_param.to_sym) %>
4
+
5
+ Visit this url to activate your account:
6
+
7
+ <%= activation_url(@user) %>
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: teamon-merb-auth-slice-activation
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Neighman, Christian Kebekus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-10 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: merb-slices
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "1.0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: merb-auth-core
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "1.0"
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: merb-auth-more
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "1.0"
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: merb-mailer
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "1.0"
50
+ version:
51
+ description: Merb Slice that adds basic activation functionality to merb-auth.
52
+ email: has.sox@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README.textile
59
+ - LICENSE
60
+ - TODO
61
+ files:
62
+ - LICENSE
63
+ - README.textile
64
+ - Rakefile
65
+ - TODO
66
+ - lib/merb-auth-slice-activation
67
+ - lib/merb-auth-slice-activation/merbtasks.rb
68
+ - lib/merb-auth-slice-activation/mixins
69
+ - lib/merb-auth-slice-activation/mixins/activated_user
70
+ - lib/merb-auth-slice-activation/mixins/activated_user/ar_activated_user.rb
71
+ - lib/merb-auth-slice-activation/mixins/activated_user/dm_activated_user.rb
72
+ - lib/merb-auth-slice-activation/mixins/activated_user/sq_activated_user.rb
73
+ - lib/merb-auth-slice-activation/mixins/activated_user.rb
74
+ - lib/merb-auth-slice-activation/slicetasks.rb
75
+ - lib/merb-auth-slice-activation/spectasks.rb
76
+ - lib/merb-auth-slice-activation.rb
77
+ - spec/controllers
78
+ - spec/controllers/activations_spec.rb
79
+ - spec/mailers
80
+ - spec/mailers/activation_mailer_spec.rb
81
+ - spec/mixins
82
+ - spec/mixins/activated_user_spec.rb
83
+ - spec/spec_helper.rb
84
+ - app/controllers
85
+ - app/controllers/activations.rb
86
+ - app/controllers/application.rb
87
+ - app/helpers
88
+ - app/helpers/application_helper.rb
89
+ - app/helpers/mailer_helper.rb
90
+ - app/mailers
91
+ - app/mailers/activation_mailer.rb
92
+ - app/mailers/views
93
+ - app/mailers/views/activation_mailer
94
+ - app/mailers/views/activation_mailer/activation.text.erb
95
+ - app/mailers/views/activation_mailer/signup.text.erb
96
+ - app/views
97
+ - app/views/layout
98
+ - app/views/layout/merb_auth_slice_activation.html.erb
99
+ - public/javascripts
100
+ - public/javascripts/master.js
101
+ - public/stylesheets
102
+ - public/stylesheets/master.css
103
+ - stubs/app
104
+ - stubs/app/controllers
105
+ - stubs/app/controllers/activations.rb
106
+ - stubs/app/mailers
107
+ - stubs/app/mailers/views
108
+ - stubs/app/mailers/views/activation_mailer
109
+ - stubs/app/mailers/views/activation_mailer/activation.text.erb
110
+ - stubs/app/mailers/views/activation_mailer/signup.text.erb
111
+ has_rdoc: true
112
+ homepage: http://merbivore.com/
113
+ post_install_message:
114
+ rdoc_options: []
115
+
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ version:
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: "0"
129
+ version:
130
+ requirements: []
131
+
132
+ rubyforge_project: merb
133
+ rubygems_version: 1.2.0
134
+ signing_key:
135
+ specification_version: 2
136
+ summary: Merb Slice that adds basic activation functionality to merb-auth.
137
+ test_files: []
138
+