thoughtbot-clearance 0.6.9 → 0.7.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/CHANGELOG.textile +9 -0
- data/README.textile +1 -1
- data/Rakefile +37 -10
- data/app/controllers/clearance/confirmations_controller.rb +27 -6
- data/generators/clearance_features/clearance_features_generator.rb +3 -3
- data/generators/clearance_features/templates/features/sign_up.feature +17 -0
- data/generators/clearance_views/USAGE +0 -0
- data/generators/clearance_views/clearance_views_generator.rb +27 -0
- data/generators/clearance_views/templates/formtastic/passwords/edit.html.erb +21 -0
- data/generators/clearance_views/templates/formtastic/passwords/new.html.erb +15 -0
- data/generators/clearance_views/templates/formtastic/sessions/new.html.erb +22 -0
- data/generators/clearance_views/templates/formtastic/users/_inputs.html.erb +6 -0
- data/generators/clearance_views/templates/formtastic/users/new.html.erb +10 -0
- data/lib/clearance/authentication.rb +6 -4
- data/shoulda_macros/clearance.rb +6 -0
- metadata +18 -3
data/CHANGELOG.textile
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
h2. 0.7.0 (08/04/2009)
|
2
|
+
|
3
|
+
* Redirect signed in user who clicks confirmation link again. (Dan Croak)
|
4
|
+
* Redirect signed out user who clicks confirmation link again. (Dan Croak)
|
5
|
+
* Added signed_out? convenience method for controllers, helpers, views. (Dan
|
6
|
+
Croak)
|
7
|
+
* Added clearance_views generator. By default, creates formtastic views which
|
8
|
+
pass all tests and features. (Dan Croak)
|
9
|
+
|
1
10
|
h2. 0.6.9 (07/04/2009)
|
2
11
|
|
3
12
|
* Added timestamps to create users migration. (Dan Croak)
|
data/README.textile
CHANGED
data/Rakefile
CHANGED
@@ -5,8 +5,16 @@ require 'rake/testtask'
|
|
5
5
|
require 'cucumber/rake/task'
|
6
6
|
|
7
7
|
namespace :test do
|
8
|
-
Rake::TestTask.new(:
|
9
|
-
|
8
|
+
Rake::TestTask.new(:basic => ["generator:cleanup",
|
9
|
+
"generator:clearance",
|
10
|
+
"generator:clearance_features"]) do |task|
|
11
|
+
task.libs << "lib"
|
12
|
+
task.libs << "test"
|
13
|
+
task.pattern = "test/**/*_test.rb"
|
14
|
+
task.verbose = false
|
15
|
+
end
|
16
|
+
|
17
|
+
Rake::TestTask.new(:views => ["generator:clearance_views"]) do |task|
|
10
18
|
task.libs << "lib"
|
11
19
|
task.libs << "test"
|
12
20
|
task.pattern = "test/**/*_test.rb"
|
@@ -17,9 +25,14 @@ namespace :test do
|
|
17
25
|
t.cucumber_opts = "--format progress"
|
18
26
|
t.feature_pattern = "test/rails_root/features/*.feature"
|
19
27
|
end
|
28
|
+
|
29
|
+
Cucumber::Rake::Task.new(:features_for_views) do |t|
|
30
|
+
t.cucumber_opts = "--format progress"
|
31
|
+
t.feature_pattern = "test/rails_root/features/*.feature"
|
32
|
+
end
|
20
33
|
end
|
21
34
|
|
22
|
-
generators = %w(clearance clearance_features)
|
35
|
+
generators = %w(clearance clearance_features clearance_views)
|
23
36
|
|
24
37
|
namespace :generator do
|
25
38
|
desc "Cleans up the test app before running the generator"
|
@@ -34,26 +47,40 @@ namespace :generator do
|
|
34
47
|
FileList["test/rails_root/db/**/*"].each do |each|
|
35
48
|
FileUtils.rm_rf(each)
|
36
49
|
end
|
50
|
+
|
37
51
|
FileUtils.rm_rf("test/rails_root/vendor/plugins/clearance")
|
38
52
|
FileUtils.mkdir_p("test/rails_root/vendor/plugins")
|
39
53
|
clearance_root = File.expand_path(File.dirname(__FILE__))
|
40
54
|
system("ln -s #{clearance_root} test/rails_root/vendor/plugins/clearance")
|
55
|
+
|
56
|
+
FileUtils.rm_rf("test/rails_root/app/views/passwords")
|
57
|
+
FileUtils.rm_rf("test/rails_root/app/views/sessions")
|
58
|
+
FileUtils.rm_rf("test/rails_root/app/views/users")
|
41
59
|
end
|
42
60
|
|
43
|
-
desc "Run the generator
|
44
|
-
task :
|
45
|
-
|
46
|
-
|
47
|
-
|
61
|
+
desc "Run the clearance generator"
|
62
|
+
task :clearance do
|
63
|
+
system "cd test/rails_root && ./script/generate clearance && rake db:migrate db:test:prepare"
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "Run the clearance features generator"
|
67
|
+
task :clearance_features do
|
68
|
+
system "cd test/rails_root && ./script/generate clearance_features"
|
69
|
+
end
|
70
|
+
|
71
|
+
desc "Run the clearance views generator"
|
72
|
+
task :clearance_views do
|
73
|
+
system "cd test/rails_root && ./script/generate clearance_views"
|
48
74
|
end
|
49
75
|
end
|
50
76
|
|
51
77
|
desc "Run the test suite"
|
52
|
-
task :default => ['test:
|
78
|
+
task :default => ['test:basic', 'test:features',
|
79
|
+
'test:views', 'test:features_for_views']
|
53
80
|
|
54
81
|
gem_spec = Gem::Specification.new do |gem_spec|
|
55
82
|
gem_spec.name = "clearance"
|
56
|
-
gem_spec.version = "0.
|
83
|
+
gem_spec.version = "0.7.0"
|
57
84
|
gem_spec.summary = "Rails authentication with email & password."
|
58
85
|
gem_spec.email = "support@thoughtbot.com"
|
59
86
|
gem_spec.homepage = "http://github.com/thoughtbot/clearance"
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class Clearance::ConfirmationsController < ApplicationController
|
2
2
|
unloadable
|
3
3
|
|
4
|
-
before_filter :
|
5
|
-
before_filter :
|
6
|
-
before_filter :
|
4
|
+
before_filter :redirect_signed_in_confirmed_user, :only => [:new, :create]
|
5
|
+
before_filter :redirect_signed_out_confirmed_user, :only => [:new, :create]
|
6
|
+
before_filter :forbid_missing_token, :only => [:new, :create]
|
7
|
+
before_filter :forbid_non_existent_user, :only => [:new, :create]
|
8
|
+
|
7
9
|
filter_parameter_logging :token
|
8
10
|
|
9
11
|
def new
|
@@ -21,10 +23,19 @@ class Clearance::ConfirmationsController < ApplicationController
|
|
21
23
|
|
22
24
|
private
|
23
25
|
|
24
|
-
def
|
26
|
+
def redirect_signed_in_confirmed_user
|
27
|
+
user = ::User.find_by_id(params[:user_id])
|
28
|
+
if user && user.email_confirmed? && current_user == user
|
29
|
+
flash_success_after_create
|
30
|
+
redirect_to(url_after_create)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def redirect_signed_out_confirmed_user
|
25
35
|
user = ::User.find_by_id(params[:user_id])
|
26
|
-
if user && user.email_confirmed?
|
27
|
-
|
36
|
+
if user && user.email_confirmed? && signed_out?
|
37
|
+
flash_already_confirmed
|
38
|
+
redirect_to(url_already_confirmed)
|
28
39
|
end
|
29
40
|
end
|
30
41
|
|
@@ -46,7 +57,17 @@ class Clearance::ConfirmationsController < ApplicationController
|
|
46
57
|
:default => "Confirmed email and signed in.")
|
47
58
|
end
|
48
59
|
|
60
|
+
def flash_already_confirmed
|
61
|
+
flash[:success] = translate(:already_confirmed_email,
|
62
|
+
:scope => [:clearance, :controllers, :confirmations],
|
63
|
+
:default => "Already confirmed email. Please sign in.")
|
64
|
+
end
|
65
|
+
|
49
66
|
def url_after_create
|
50
67
|
root_url
|
51
68
|
end
|
69
|
+
|
70
|
+
def url_already_confirmed
|
71
|
+
sign_in_url
|
72
|
+
end
|
52
73
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class ClearanceFeaturesGenerator < Rails::Generator::Base
|
2
|
-
|
2
|
+
|
3
3
|
def manifest
|
4
4
|
record do |m|
|
5
5
|
m.directory File.join("features", "step_definitions")
|
6
6
|
m.directory File.join("features", "support")
|
7
|
-
|
7
|
+
|
8
8
|
["features/step_definitions/clearance_steps.rb",
|
9
9
|
"features/step_definitions/factory_girl_steps.rb",
|
10
10
|
"features/support/paths.rb",
|
@@ -16,5 +16,5 @@ class ClearanceFeaturesGenerator < Rails::Generator::Base
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
end
|
@@ -26,3 +26,20 @@ Feature: Sign up
|
|
26
26
|
Then I should see "Confirmed email and signed in"
|
27
27
|
And I should be signed in
|
28
28
|
|
29
|
+
Scenario: Signed in user clicks confirmation link again
|
30
|
+
Given I signed up with "email@person.com/password"
|
31
|
+
When I follow the confirmation link sent to "email@person.com"
|
32
|
+
Then I should be signed in
|
33
|
+
When I follow the confirmation link sent to "email@person.com"
|
34
|
+
Then I should see "Confirmed email and signed in"
|
35
|
+
And I should be signed in
|
36
|
+
|
37
|
+
Scenario: Signed out user clicks confirmation link again
|
38
|
+
Given I signed up with "email@person.com/password"
|
39
|
+
When I follow the confirmation link sent to "email@person.com"
|
40
|
+
Then I should be signed in
|
41
|
+
When I sign out
|
42
|
+
And I follow the confirmation link sent to "email@person.com"
|
43
|
+
Then I should see "Already confirmed email. Please sign in."
|
44
|
+
And I should be signed out
|
45
|
+
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class ClearanceViewsGenerator < Rails::Generator::Base
|
2
|
+
|
3
|
+
def manifest
|
4
|
+
record do |m|
|
5
|
+
strategy = "formtastic"
|
6
|
+
template_strategy = "erb"
|
7
|
+
|
8
|
+
m.directory File.join("app", "views", "users")
|
9
|
+
m.file "#{strategy}/users/new.html.#{template_strategy}",
|
10
|
+
"app/views/users/new.html.#{template_strategy}"
|
11
|
+
m.file "#{strategy}/users/_inputs.html.#{template_strategy}",
|
12
|
+
"app/views/users/_inputs.html.#{template_strategy}"
|
13
|
+
|
14
|
+
m.directory File.join("app", "views", "sessions")
|
15
|
+
m.file "#{strategy}/sessions/new.html.#{template_strategy}",
|
16
|
+
"app/views/sessions/new.html.#{template_strategy}"
|
17
|
+
|
18
|
+
m.directory File.join("app", "views", "passwords")
|
19
|
+
m.file "#{strategy}/passwords/new.html.#{template_strategy}",
|
20
|
+
"app/views/passwords/new.html.#{template_strategy}"
|
21
|
+
m.file "#{strategy}/passwords/edit.html.#{template_strategy}",
|
22
|
+
"app/views/passwords/edit.html.#{template_strategy}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<h2>Change your password</h2>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
Your password has been reset. Choose a new password below.
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<% semantic_form_for(:user,
|
8
|
+
:url => user_password_path(@user, :token => @user.token),
|
9
|
+
:html => { :method => :put }) do |form| %>
|
10
|
+
<%= form.error_messages %>
|
11
|
+
<% form.inputs do -%>
|
12
|
+
<%= form.input :password, :as => :password,
|
13
|
+
:label => "Choose password" %>
|
14
|
+
<%= form.input :password_confirmation, :as => :password,
|
15
|
+
:label => "Confirm password" %>
|
16
|
+
<% end -%>
|
17
|
+
<% form.buttons do -%>
|
18
|
+
<%= form.commit_button "Save this password" %>
|
19
|
+
<% end -%>
|
20
|
+
<% end %>
|
21
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<h2>Reset your password</h2>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
We will email you a link to reset your password.
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<% semantic_form_for :password, :url => passwords_path do |form| -%>
|
8
|
+
<% form.inputs do -%>
|
9
|
+
<%= form.input :email, :label => "Email address" %>
|
10
|
+
<% end -%>
|
11
|
+
<% form.buttons do -%>
|
12
|
+
<%= form.commit_button "Reset password" %>
|
13
|
+
<% end -%>
|
14
|
+
<% end -%>
|
15
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<h2>Sign in</h2>
|
2
|
+
|
3
|
+
<% semantic_form_for :session, :url => session_path do |form| %>
|
4
|
+
<% form.inputs do %>
|
5
|
+
<%= form.input :email %>
|
6
|
+
<%= form.input :password, :as => :password %>
|
7
|
+
<%= form.input :remember_me, :as => :boolean, :required => false %>
|
8
|
+
<% end %>
|
9
|
+
<% form.buttons do %>
|
10
|
+
<%= form.commit_button "Sign in" %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<ul>
|
15
|
+
<li>
|
16
|
+
<%= link_to "Sign up", new_user_path %>
|
17
|
+
</li>
|
18
|
+
<li>
|
19
|
+
<%= link_to "Forgot password?", new_password_path %>
|
20
|
+
</li>
|
21
|
+
</ul>
|
22
|
+
|
@@ -5,10 +5,8 @@ module Clearance
|
|
5
5
|
controller.send(:include, InstanceMethods)
|
6
6
|
|
7
7
|
controller.class_eval do
|
8
|
-
helper_method :current_user
|
9
|
-
|
10
|
-
|
11
|
-
hide_action :current_user, :signed_in?
|
8
|
+
helper_method :current_user, :signed_in?, :signed_out?
|
9
|
+
hide_action :current_user, :signed_in?, :signed_out?
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
@@ -21,6 +19,10 @@ module Clearance
|
|
21
19
|
! current_user.nil?
|
22
20
|
end
|
23
21
|
|
22
|
+
def signed_out?
|
23
|
+
current_user.nil?
|
24
|
+
end
|
25
|
+
|
24
26
|
protected
|
25
27
|
|
26
28
|
def authenticate
|
data/shoulda_macros/clearance.rb
CHANGED
@@ -132,6 +132,12 @@ module Clearance
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
def should_redirect_to_url_already_confirmed
|
136
|
+
should_redirect_to("the already confirmed url") do
|
137
|
+
@controller.send(:url_already_confirmed)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
135
141
|
# VALIDATIONS
|
136
142
|
|
137
143
|
def should_validate_confirmation_of(attribute, opts = {})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thoughtbot-clearance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Croak
|
@@ -24,7 +24,7 @@ autorequire:
|
|
24
24
|
bindir: bin
|
25
25
|
cert_chain: []
|
26
26
|
|
27
|
-
date: 2009-
|
27
|
+
date: 2009-08-03 21:00:00 -07:00
|
28
28
|
default_executable:
|
29
29
|
dependencies: []
|
30
30
|
|
@@ -90,6 +90,19 @@ files:
|
|
90
90
|
- generators/clearance_features/templates/features/support
|
91
91
|
- generators/clearance_features/templates/features/support/paths.rb
|
92
92
|
- generators/clearance_features/USAGE
|
93
|
+
- generators/clearance_views
|
94
|
+
- generators/clearance_views/clearance_views_generator.rb
|
95
|
+
- generators/clearance_views/templates
|
96
|
+
- generators/clearance_views/templates/formtastic
|
97
|
+
- generators/clearance_views/templates/formtastic/passwords
|
98
|
+
- generators/clearance_views/templates/formtastic/passwords/edit.html.erb
|
99
|
+
- generators/clearance_views/templates/formtastic/passwords/new.html.erb
|
100
|
+
- generators/clearance_views/templates/formtastic/sessions
|
101
|
+
- generators/clearance_views/templates/formtastic/sessions/new.html.erb
|
102
|
+
- generators/clearance_views/templates/formtastic/users
|
103
|
+
- generators/clearance_views/templates/formtastic/users/_inputs.html.erb
|
104
|
+
- generators/clearance_views/templates/formtastic/users/new.html.erb
|
105
|
+
- generators/clearance_views/USAGE
|
93
106
|
- lib/clearance
|
94
107
|
- lib/clearance/authentication.rb
|
95
108
|
- lib/clearance/extensions
|
@@ -102,6 +115,8 @@ files:
|
|
102
115
|
- rails/init.rb
|
103
116
|
has_rdoc: true
|
104
117
|
homepage: http://github.com/thoughtbot/clearance
|
118
|
+
licenses: []
|
119
|
+
|
105
120
|
post_install_message:
|
106
121
|
rdoc_options: []
|
107
122
|
|
@@ -122,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
137
|
requirements: []
|
123
138
|
|
124
139
|
rubyforge_project:
|
125
|
-
rubygems_version: 1.
|
140
|
+
rubygems_version: 1.3.5
|
126
141
|
signing_key:
|
127
142
|
specification_version: 3
|
128
143
|
summary: Rails authentication with email & password.
|