thoughtbot-clearance 0.5.6 → 0.6.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.
Files changed (58) hide show
  1. data/CHANGELOG.textile +25 -1
  2. data/README.textile +18 -5
  3. data/Rakefile +9 -10
  4. data/TODO.textile +6 -0
  5. data/app/controllers/clearance/confirmations_controller.rb +47 -0
  6. data/app/controllers/clearance/passwords_controller.rb +65 -0
  7. data/app/controllers/clearance/sessions_controller.rb +62 -0
  8. data/app/controllers/clearance/users_controller.rb +30 -0
  9. data/app/models/clearance_mailer.rb +19 -0
  10. data/{generators/clearance/templates/app → app}/views/clearance_mailer/change_password.html.erb +0 -0
  11. data/{generators/clearance/templates/app → app}/views/clearance_mailer/confirmation.html.erb +0 -0
  12. data/{generators/clearance/templates/app → app}/views/passwords/edit.html.erb +0 -0
  13. data/{generators/clearance/templates/app → app}/views/passwords/new.html.erb +0 -0
  14. data/{generators/clearance/templates/app → app}/views/sessions/new.html.erb +0 -0
  15. data/{generators/clearance/templates/app → app}/views/users/_form.html.erb +0 -0
  16. data/{generators/clearance/templates/app → app}/views/users/new.html.erb +0 -0
  17. data/config/clearance_routes.rb +19 -0
  18. data/generators/clearance/clearance_generator.rb +16 -76
  19. data/generators/clearance/templates/README +6 -23
  20. data/generators/clearance/templates/{test/factories/clearance.rb → factories.rb} +2 -5
  21. data/generators/clearance/templates/{db/migrate/create_users_with_clearance_columns.rb → migrations/create_users.rb} +1 -1
  22. data/generators/clearance/templates/{db/migrate/update_users_with_clearance_columns.rb → migrations/update_users.rb} +7 -7
  23. data/generators/clearance/templates/user.rb +3 -0
  24. data/generators/clearance_features/templates/features/step_definitions/clearance_steps.rb +1 -1
  25. data/lib/clearance.rb +15 -15
  26. data/lib/clearance/authentication.rb +80 -0
  27. data/lib/clearance/{lib/extensions → extensions}/errors.rb +0 -0
  28. data/lib/clearance/{lib/extensions → extensions}/rescue.rb +0 -0
  29. data/lib/clearance/user.rb +114 -0
  30. data/shoulda_macros/clearance.rb +11 -4
  31. metadata +34 -63
  32. data/generators/clearance/templates/app/controllers/application.rb +0 -5
  33. data/generators/clearance/templates/app/controllers/confirmations_controller.rb +0 -3
  34. data/generators/clearance/templates/app/controllers/passwords_controller.rb +0 -3
  35. data/generators/clearance/templates/app/controllers/sessions_controller.rb +0 -3
  36. data/generators/clearance/templates/app/controllers/users_controller.rb +0 -3
  37. data/generators/clearance/templates/app/models/clearance_mailer.rb +0 -5
  38. data/generators/clearance/templates/app/models/user.rb +0 -3
  39. data/generators/clearance/templates/app/views/users/edit.html.erb +0 -6
  40. data/generators/clearance/templates/test/functional/confirmations_controller_test.rb +0 -5
  41. data/generators/clearance/templates/test/functional/passwords_controller_test.rb +0 -5
  42. data/generators/clearance/templates/test/functional/sessions_controller_test.rb +0 -5
  43. data/generators/clearance/templates/test/functional/users_controller_test.rb +0 -5
  44. data/generators/clearance/templates/test/unit/clearance_mailer_test.rb +0 -6
  45. data/generators/clearance/templates/test/unit/user_test.rb +0 -5
  46. data/lib/clearance/app/controllers/application_controller.rb +0 -84
  47. data/lib/clearance/app/controllers/confirmations_controller.rb +0 -63
  48. data/lib/clearance/app/controllers/passwords_controller.rb +0 -79
  49. data/lib/clearance/app/controllers/sessions_controller.rb +0 -74
  50. data/lib/clearance/app/controllers/users_controller.rb +0 -45
  51. data/lib/clearance/app/models/clearance_mailer.rb +0 -23
  52. data/lib/clearance/app/models/user.rb +0 -118
  53. data/lib/clearance/test/functional/confirmations_controller_test.rb +0 -72
  54. data/lib/clearance/test/functional/passwords_controller_test.rb +0 -180
  55. data/lib/clearance/test/functional/sessions_controller_test.rb +0 -187
  56. data/lib/clearance/test/functional/users_controller_test.rb +0 -60
  57. data/lib/clearance/test/unit/clearance_mailer_test.rb +0 -65
  58. data/lib/clearance/test/unit/user_test.rb +0 -236
@@ -1,5 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- helper :all
3
- protect_from_forgery
4
- include Clearance::App::Controllers::ApplicationController
5
- end
@@ -1,3 +0,0 @@
1
- class ConfirmationsController < ApplicationController
2
- include Clearance::App::Controllers::ConfirmationsController
3
- end
@@ -1,3 +0,0 @@
1
- class PasswordsController < ApplicationController
2
- include Clearance::App::Controllers::PasswordsController
3
- end
@@ -1,3 +0,0 @@
1
- class SessionsController < ApplicationController
2
- include Clearance::App::Controllers::SessionsController
3
- end
@@ -1,3 +0,0 @@
1
- class UsersController < ApplicationController
2
- include Clearance::App::Controllers::UsersController
3
- end
@@ -1,5 +0,0 @@
1
- class ClearanceMailer < ActionMailer::Base
2
- default_url_options[:host] = HOST
3
-
4
- include Clearance::App::Models::ClearanceMailer
5
- end
@@ -1,3 +0,0 @@
1
- class User < ActiveRecord::Base
2
- include Clearance::App::Models::User
3
- end
@@ -1,6 +0,0 @@
1
- <h2>Edit user information</h2>
2
-
3
- <% form_for @user do |form| %>
4
- <%= render :partial => '/users/form', :object => form %>
5
- <%= form.submit 'Update', :disable_with => 'Please wait...' %>
6
- <% end %>
@@ -1,5 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ConfirmationsControllerTest < ActionController::TestCase
4
- include Clearance::Test::Functional::ConfirmationsControllerTest
5
- end
@@ -1,5 +0,0 @@
1
- require 'test_helper'
2
-
3
- class PasswordsControllerTest < ActionController::TestCase
4
- include Clearance::Test::Functional::PasswordsControllerTest
5
- end
@@ -1,5 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SessionsControllerTest < ActionController::TestCase
4
- include Clearance::Test::Functional::SessionsControllerTest
5
- end
@@ -1,5 +0,0 @@
1
- require 'test_helper'
2
-
3
- class UsersControllerTest < ActionController::TestCase
4
- include Clearance::Test::Functional::UsersControllerTest
5
- end
@@ -1,6 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ClearanceMailerTest < ActionMailer::TestCase
4
- tests ClearanceMailer
5
- include Clearance::Test::Unit::ClearanceMailerTest
6
- end
@@ -1,5 +0,0 @@
1
- require 'test_helper'
2
-
3
- class UserTest < ActiveSupport::TestCase
4
- include Clearance::Test::Unit::UserTest
5
- end
@@ -1,84 +0,0 @@
1
- module Clearance
2
- module App
3
- module Controllers
4
- module ApplicationController
5
-
6
- def self.included(controller)
7
- controller.send(:include, InstanceMethods)
8
-
9
- controller.class_eval do
10
- helper_method :current_user
11
- helper_method :signed_in?
12
-
13
- hide_action :current_user, :signed_in?
14
- end
15
- end
16
-
17
- module InstanceMethods
18
- def current_user
19
- @_current_user ||= (user_from_cookie || user_from_session)
20
- end
21
-
22
- def signed_in?
23
- ! current_user.nil?
24
- end
25
-
26
- protected
27
-
28
- def authenticate
29
- deny_access unless signed_in?
30
- end
31
-
32
- def user_from_session
33
- if session[:user_id]
34
- return nil unless user = User.find_by_id(session[:user_id])
35
- return user if user.email_confirmed?
36
- end
37
- end
38
-
39
- def user_from_cookie
40
- if token = cookies[:remember_token]
41
- return nil unless user = User.find_by_token(token)
42
- return user if user.remember?
43
- end
44
- end
45
-
46
- def sign_user_in(user)
47
- sign_in(user)
48
- end
49
-
50
- def sign_in(user)
51
- if user
52
- session[:user_id] = user.id
53
- end
54
- end
55
-
56
- def redirect_back_or(default)
57
- session[:return_to] ||= params[:return_to]
58
- if session[:return_to]
59
- redirect_to(session[:return_to])
60
- else
61
- redirect_to(default)
62
- end
63
- session[:return_to] = nil
64
- end
65
-
66
- def redirect_to_root
67
- redirect_to root_url
68
- end
69
-
70
- def store_location
71
- session[:return_to] = request.request_uri if request.get?
72
- end
73
-
74
- def deny_access(flash_message = nil, opts = {})
75
- store_location
76
- flash[:failure] = flash_message if flash_message
77
- redirect_to new_session_url
78
- end
79
- end
80
-
81
- end
82
- end
83
- end
84
- end
@@ -1,63 +0,0 @@
1
- module Clearance
2
- module App
3
- module Controllers
4
- module ConfirmationsController
5
-
6
- def self.included(controller)
7
- controller.send(:include, Actions)
8
- controller.send(:include, PrivateMethods)
9
-
10
- controller.class_eval do
11
- before_filter :forbid_confirmed_user, :only => :new
12
- before_filter :forbid_missing_token, :only => :new
13
- before_filter :forbid_non_existant_user, :only => :new
14
- filter_parameter_logging :token
15
- end
16
- end
17
-
18
- module Actions
19
- def new
20
- create
21
- end
22
-
23
- def create
24
- @user = User.find_by_id_and_token(params[:user_id], params[:token])
25
- @user.confirm_email!
26
-
27
- sign_user_in(@user)
28
- flash[:success] = "Confirmed email and signed in."
29
- redirect_to url_after_create
30
- end
31
- end
32
-
33
- module PrivateMethods
34
- private
35
-
36
- def forbid_confirmed_user
37
- user = User.find_by_id(params[:user_id])
38
- if user && user.email_confirmed?
39
- raise ActionController::Forbidden, "confirmed user"
40
- end
41
- end
42
-
43
- def forbid_missing_token
44
- if params[:token].blank?
45
- raise ActionController::Forbidden, "missing token"
46
- end
47
- end
48
-
49
- def forbid_non_existant_user
50
- unless User.find_by_id_and_token(params[:user_id], params[:token])
51
- raise ActionController::Forbidden, "non-existant user"
52
- end
53
- end
54
-
55
- def url_after_create
56
- root_url
57
- end
58
- end
59
-
60
- end
61
- end
62
- end
63
- end
@@ -1,79 +0,0 @@
1
- module Clearance
2
- module App
3
- module Controllers
4
- module PasswordsController
5
-
6
- def self.included(controller)
7
- controller.send(:include, Actions)
8
- controller.send(:include, PrivateMethods)
9
-
10
- controller.class_eval do
11
- before_filter :forbid_missing_token, :only => [:edit, :update]
12
- before_filter :forbid_non_existant_user, :only => [:edit, :update]
13
- filter_parameter_logging :password, :password_confirmation
14
- end
15
- end
16
-
17
- module Actions
18
- def new
19
- end
20
-
21
- def create
22
- if user = User.find_by_email(params[:password][:email])
23
- user.forgot_password!
24
- ClearanceMailer.deliver_change_password user
25
- flash[:notice] = "You will receive an email within the next few minutes. " <<
26
- "It contains instructions for changing your password."
27
- redirect_to url_after_create
28
- else
29
- flash.now[:notice] = "Unknown email"
30
- render :action => :new
31
- end
32
- end
33
-
34
- def edit
35
- @user = User.find_by_id_and_token(params[:user_id], params[:token])
36
- end
37
-
38
- def update
39
- @user = User.find_by_id_and_token(params[:user_id], params[:token])
40
-
41
- if @user.update_password(params[:user][:password],
42
- params[:user][:password_confirmation])
43
- @user.confirm_email! unless @user.email_confirmed?
44
- sign_user_in(@user)
45
- redirect_to url_after_update
46
- else
47
- render :action => :edit
48
- end
49
- end
50
- end
51
-
52
- module PrivateMethods
53
- private
54
-
55
- def forbid_missing_token
56
- if params[:token].blank?
57
- raise ActionController::Forbidden, "missing token"
58
- end
59
- end
60
-
61
- def forbid_non_existant_user
62
- unless User.find_by_id_and_token(params[:user_id], params[:token])
63
- raise ActionController::Forbidden, "non-existant user"
64
- end
65
- end
66
-
67
- def url_after_create
68
- new_session_url
69
- end
70
-
71
- def url_after_update
72
- root_url
73
- end
74
- end
75
-
76
- end
77
- end
78
- end
79
- end
@@ -1,74 +0,0 @@
1
- module Clearance
2
- module App
3
- module Controllers
4
- module SessionsController
5
-
6
- def self.included(controller)
7
- controller.send(:include, Actions)
8
- controller.send(:include, PrivateMethods)
9
-
10
- controller.class_eval do
11
- protect_from_forgery :except => :create
12
- filter_parameter_logging :password
13
- end
14
- end
15
-
16
- module Actions
17
- def create
18
- @user = User.authenticate(params[:session][:email],
19
- params[:session][:password])
20
- if @user.nil?
21
- flash.now[:notice] = "Bad email or password."
22
- render :action => :new, :status => :unauthorized
23
- else
24
- if @user.email_confirmed?
25
- remember(@user) if remember?
26
- sign_user_in(@user)
27
- flash[:notice] = "Signed in successfully."
28
- redirect_back_or url_after_create
29
- else
30
- ClearanceMailer.deliver_confirmation(@user)
31
- deny_access("User has not confirmed email. Confirmation email will be resent.")
32
- end
33
- end
34
- end
35
-
36
- def destroy
37
- forget(current_user)
38
- reset_session
39
- flash[:notice] = "You have been signed out."
40
- redirect_to url_after_destroy
41
- end
42
- end
43
-
44
- module PrivateMethods
45
- private
46
-
47
- def remember?
48
- params[:session] && params[:session][:remember_me] == "1"
49
- end
50
-
51
- def remember(user)
52
- user.remember_me!
53
- cookies[:remember_token] = { :value => user.token,
54
- :expires => user.token_expires_at }
55
- end
56
-
57
- def forget(user)
58
- user.forget_me! if user
59
- cookies.delete :remember_token
60
- end
61
-
62
- def url_after_create
63
- root_url
64
- end
65
-
66
- def url_after_destroy
67
- new_session_url
68
- end
69
- end
70
-
71
- end
72
- end
73
- end
74
- end
@@ -1,45 +0,0 @@
1
- module Clearance
2
- module App
3
- module Controllers
4
- module UsersController
5
-
6
- def self.included(controller)
7
- controller.send(:include, Actions)
8
- controller.send(:include, PrivateMethods)
9
-
10
- controller.class_eval do
11
- before_filter :redirect_to_root, :only => [:new, :create], :if => :signed_in?
12
- filter_parameter_logging :password
13
- end
14
- end
15
-
16
- module Actions
17
- def new
18
- @user = User.new(params[:user])
19
- end
20
-
21
- def create
22
- @user = User.new params[:user]
23
- if @user.save
24
- ClearanceMailer.deliver_confirmation @user
25
- flash[:notice] = "You will receive an email within the next few minutes. " <<
26
- "It contains instructions for confirming your account."
27
- redirect_to url_after_create
28
- else
29
- render :action => "new"
30
- end
31
- end
32
- end
33
-
34
- module PrivateMethods
35
- private
36
-
37
- def url_after_create
38
- new_session_url
39
- end
40
- end
41
-
42
- end
43
- end
44
- end
45
- end
@@ -1,23 +0,0 @@
1
- module Clearance
2
- module App
3
- module Models
4
- module ClearanceMailer
5
-
6
- def change_password(user)
7
- from DO_NOT_REPLY
8
- recipients user.email
9
- subject "Change your password"
10
- body :user => user
11
- end
12
-
13
- def confirmation(user)
14
- from DO_NOT_REPLY
15
- recipients user.email
16
- subject "Account confirmation"
17
- body :user => user
18
- end
19
-
20
- end
21
- end
22
- end
23
- end