thoughtbot-clearance 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.textile +4 -0
- data/Rakefile +23 -8
- data/generators/clearance/templates/README +3 -3
- data/generators/clearance/templates/test/factories/clearance.rb +1 -1
- data/generators/clearance_features/USAGE +1 -0
- data/generators/clearance_features/clearance_features_generator.rb +16 -0
- data/generators/clearance_features/templates/features/password_reset.feature +32 -0
- data/generators/clearance_features/templates/features/sign_in.feature +41 -0
- data/generators/clearance_features/templates/features/sign_out.feature +22 -0
- data/generators/clearance_features/templates/features/sign_up.feature +30 -0
- data/generators/clearance_features/templates/features/step_definitions/clearance_steps.rb +103 -0
- data/lib/clearance/test/functional/confirmations_controller_test.rb +2 -2
- data/lib/clearance/test/functional/passwords_controller_test.rb +1 -1
- data/lib/clearance/test/functional/sessions_controller_test.rb +3 -3
- data/lib/clearance/test/functional/users_controller_test.rb +2 -2
- data/lib/clearance/test/test_helper.rb +1 -1
- data/lib/clearance/test/unit/clearance_mailer_test.rb +2 -2
- data/lib/clearance/test/unit/user_test.rb +14 -14
- data/shoulda_macros/clearance.rb +4 -4
- metadata +14 -2
data/CHANGELOG.textile
ADDED
data/Rakefile
CHANGED
@@ -1,41 +1,56 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
+
require 'cucumber/rake/task'
|
3
4
|
|
4
5
|
test_files_pattern = 'test/rails_root/test/{unit,functional,other}/**/*_test.rb'
|
6
|
+
|
5
7
|
namespace :test do
|
6
8
|
Rake::TestTask.new(:all => ['generator:cleanup', 'generator:generate']) do |task|
|
7
9
|
task.libs << 'lib'
|
8
10
|
task.pattern = test_files_pattern
|
9
11
|
task.verbose = false
|
10
12
|
end
|
13
|
+
|
14
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
15
|
+
t.cucumber_opts = "--format progress"
|
16
|
+
t.feature_pattern = 'test/rails_root/features/*.feature'
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
20
|
+
generators = %w(clearance clearance_features)
|
21
|
+
|
13
22
|
namespace :generator do
|
14
23
|
desc "Cleans up the test app before running the generator"
|
15
24
|
task :cleanup do
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
generators.each do |generator|
|
26
|
+
FileList["generators/#{generator}/templates/**/*.*"].each do |each|
|
27
|
+
file = "test/rails_root/#{each.gsub("generators/#{generator}/templates/",'')}"
|
28
|
+
File.delete(file) if File.exists?(file)
|
29
|
+
end
|
19
30
|
end
|
20
31
|
|
21
|
-
|
32
|
+
FileList["test/rails_root/db/**/*"].each do |each|
|
33
|
+
FileUtils.rm_rf(each)
|
34
|
+
end
|
22
35
|
FileUtils.rm_rf("test/rails_root/vendor/plugins/clearance")
|
23
36
|
system "mkdir -p test/rails_root/vendor/plugins/clearance"
|
24
37
|
system "cp -R generators test/rails_root/vendor/plugins/clearance"
|
25
38
|
end
|
26
|
-
|
39
|
+
|
27
40
|
desc "Run the generator on the tests"
|
28
41
|
task :generate do
|
29
|
-
|
42
|
+
generators.each do |generator|
|
43
|
+
system "cd test/rails_root && ./script/generate #{generator}"
|
44
|
+
end
|
30
45
|
end
|
31
46
|
end
|
32
47
|
|
33
48
|
desc "Run the test suite"
|
34
|
-
task :default => 'test:all'
|
49
|
+
task :default => ['test:all', 'test:features']
|
35
50
|
|
36
51
|
gem_spec = Gem::Specification.new do |gem_spec|
|
37
52
|
gem_spec.name = "clearance"
|
38
|
-
gem_spec.version = "0.4.
|
53
|
+
gem_spec.version = "0.4.4"
|
39
54
|
gem_spec.summary = "Rails authentication for developers who write tests."
|
40
55
|
gem_spec.email = "support@thoughtbot.com"
|
41
56
|
gem_spec.homepage = "http://github.com/thoughtbot/clearance"
|
@@ -36,9 +36,9 @@ The constant is used by mailers to generate URLs in emails.
|
|
36
36
|
In config/environment.rb:
|
37
37
|
|
38
38
|
DO_NOT_REPLY = "donotreply@example.com"
|
39
|
-
|
39
|
+
|
40
40
|
3. Clearance depends on root_url, so please make sure that it is defined to
|
41
|
-
*something* your config/routes.rb:
|
41
|
+
*something* in your config/routes.rb:
|
42
42
|
|
43
43
|
map.root :controller => 'home'
|
44
44
|
|
@@ -51,4 +51,4 @@ test/test_helper.rb:
|
|
51
51
|
include Clearance::Test::TestHelper
|
52
52
|
end
|
53
53
|
|
54
|
-
*******************************************************************************
|
54
|
+
*******************************************************************************
|
@@ -2,7 +2,7 @@ Factory.sequence :email do |n|
|
|
2
2
|
"user#{n}@example.com"
|
3
3
|
end
|
4
4
|
|
5
|
-
Factory.define :
|
5
|
+
Factory.define :user do |user|
|
6
6
|
user.email { Factory.next :email }
|
7
7
|
user.password { "password" }
|
8
8
|
user.password_confirmation { "password" }
|
@@ -0,0 +1 @@
|
|
1
|
+
script/generate clearance_stories
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class ClearanceFeaturesGenerator < Rails::Generator::Base
|
2
|
+
|
3
|
+
def manifest
|
4
|
+
record do |m|
|
5
|
+
m.directory File.join("features", "step_definitions")
|
6
|
+
|
7
|
+
["features/step_definitions/clearance_steps.rb",
|
8
|
+
"features/sign_in.feature",
|
9
|
+
"features/sign_out.feature",
|
10
|
+
"features/sign_up.feature"].each do |file|
|
11
|
+
m.file file, file
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Fature: Password Reset
|
2
|
+
In order to sign in even if he forgot his password
|
3
|
+
A user
|
4
|
+
Should be able to reset it
|
5
|
+
|
6
|
+
Scenario: User is not registered
|
7
|
+
Given there is no user with "email@person.com"
|
8
|
+
When I request password reset link to be sent to "email@person.com"
|
9
|
+
Then I should see "Unknown email"
|
10
|
+
|
11
|
+
Scenario: User requests password reset
|
12
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
13
|
+
When I request password reset link to be sent to "email@person.com"
|
14
|
+
Then I should see "Details for changing your password have been sent to email@person.com"
|
15
|
+
And a password reset message should be sent to "email@person.com"
|
16
|
+
|
17
|
+
Scenario: User updated his password and types wrong confirmation
|
18
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
19
|
+
When I follow the password reset link sent to "email@person.com"
|
20
|
+
And I update my password with "newpassword/wrongconfirmation"
|
21
|
+
Then I should see error messages
|
22
|
+
And I should not be signed in
|
23
|
+
|
24
|
+
Scenario: User updates his password
|
25
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
26
|
+
When I follow the password reset link sent to "email@person.com"
|
27
|
+
And I update my password with "newpassword/newpassword"
|
28
|
+
Then I should be signed in
|
29
|
+
When I sign out
|
30
|
+
And I sign in as "email@person.com/newpassword"
|
31
|
+
Then I should be signed in
|
32
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Sign in
|
2
|
+
In order to get access to protected sections of the site
|
3
|
+
A registered user
|
4
|
+
Should be able to sign in
|
5
|
+
|
6
|
+
Scenario User is not registered
|
7
|
+
Given there is no user with "email@person.com"
|
8
|
+
When I go to the sign in page
|
9
|
+
And I sign in as "email@person.com/password"
|
10
|
+
Then I should see "Bad email or password"
|
11
|
+
And I should not be signed in
|
12
|
+
|
13
|
+
Scenario: User is not confirmed
|
14
|
+
Given I signed up with "email@person.com/password"
|
15
|
+
When I go to the sign in page
|
16
|
+
And I sign in as "email@person.com/password"
|
17
|
+
Then I should see "User has not confirmed email"
|
18
|
+
And I should not be signed in
|
19
|
+
|
20
|
+
Scenario: User enters wrong password
|
21
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
22
|
+
When I go to the sign in page
|
23
|
+
And I sign in as "email@person.com/wrongpassword"
|
24
|
+
Then I should see "Bad email or password"
|
25
|
+
And I should not be signed in
|
26
|
+
|
27
|
+
Scenario: User signs in successfully
|
28
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
29
|
+
When I go to the sign in page
|
30
|
+
And I sign in as "email@person.com/password"
|
31
|
+
Then I should see "Signed in successfully"
|
32
|
+
And I should be signed in
|
33
|
+
|
34
|
+
Scenario: User signs in and checks "remember me"
|
35
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
36
|
+
When I go to the sign in page
|
37
|
+
And I sign in with "remember me" as "email@person.com/password"
|
38
|
+
Then I should see "Signed in successfully"
|
39
|
+
And I should be signed in
|
40
|
+
When I return next time
|
41
|
+
Then I should be signed in
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Sign out
|
2
|
+
To protect my account from unauthorized access
|
3
|
+
A signed in user
|
4
|
+
Should be able to sign out
|
5
|
+
|
6
|
+
Scenario: User signs out
|
7
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
8
|
+
When I sign in as "email@person.com/password"
|
9
|
+
Then I should be signed in
|
10
|
+
And I sign out
|
11
|
+
Then I should see "You have been signed out"
|
12
|
+
And I should not be signed in
|
13
|
+
|
14
|
+
Scenario: User who was remembered signs out
|
15
|
+
Given I am signed up and confirmed as "email@person.com/password"
|
16
|
+
When I sign in with "remember me" as "email@person.com/password"
|
17
|
+
Then I should be signed in
|
18
|
+
And I sign out
|
19
|
+
Then I should see "You have been signed out"
|
20
|
+
And I should not be signed in
|
21
|
+
When I return next time
|
22
|
+
Then I should not be signed in
|
@@ -0,0 +1,30 @@
|
|
1
|
+
Feature: Sign up
|
2
|
+
In order to get access to protected sections of the site
|
3
|
+
A user
|
4
|
+
Should be able to sign up
|
5
|
+
|
6
|
+
Scenario: User signs up with invalid data
|
7
|
+
When I go to the sign up page
|
8
|
+
And I fill in "Email" with "invalidemail"
|
9
|
+
And I fill in "Password" with "password"
|
10
|
+
And I fill in "Verify Password" with ""
|
11
|
+
And I press "Sign Up"
|
12
|
+
Then I should see error messages
|
13
|
+
|
14
|
+
Scenario: User signs up with valid data
|
15
|
+
When I go to the sign up page
|
16
|
+
And I fill in "Email" with "email@person.com"
|
17
|
+
And I fill in "Password" with "password"
|
18
|
+
And I fill in "Verify Password" with "password"
|
19
|
+
And I press "Sign Up"
|
20
|
+
Then I should see "You will receive an email within the next few minutes"
|
21
|
+
And a confirmation message should be sent to "email@person.com"
|
22
|
+
|
23
|
+
Scenario: User confirms his account
|
24
|
+
Given I signed up with "email@person.com/password"
|
25
|
+
When I follow the confirmation link sent to "email@person.com"
|
26
|
+
Then I should see "Confirmed email and signed in"
|
27
|
+
And I should be signed in
|
28
|
+
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# General
|
2
|
+
|
3
|
+
Then /^I should see error messages$/ do
|
4
|
+
Then %{I should see "error(s)? prohibited"}
|
5
|
+
end
|
6
|
+
|
7
|
+
# DB
|
8
|
+
|
9
|
+
Given /^there is no user with "(.*)"$/ do |email|
|
10
|
+
assert_nil User.find_by_email(email)
|
11
|
+
end
|
12
|
+
|
13
|
+
Given /^I signed up with "(.*)\/(.*)"$/ do |email, password|
|
14
|
+
user = Factory :user,
|
15
|
+
:email => email,
|
16
|
+
:password => password,
|
17
|
+
:password_confirmation => password
|
18
|
+
end
|
19
|
+
|
20
|
+
Given /^I am signed up and confirmed as "(.*)\/(.*)"$/ do |email, password|
|
21
|
+
user = Factory :email_confirmed_user,
|
22
|
+
:email => email,
|
23
|
+
:password => password,
|
24
|
+
:password_confirmation => password
|
25
|
+
end
|
26
|
+
|
27
|
+
# Session
|
28
|
+
|
29
|
+
Then /^I should be signed in$/ do
|
30
|
+
assert_not_nil request.session[:user_id]
|
31
|
+
assert_not_nil request.session[:salt]
|
32
|
+
end
|
33
|
+
|
34
|
+
Then /^I should not be signed in$/ do
|
35
|
+
assert_nil request.session[:user_id]
|
36
|
+
assert_nil request.session[:salt]
|
37
|
+
end
|
38
|
+
|
39
|
+
When /^session is cleared$/ do
|
40
|
+
request.session[:user_id] = nil
|
41
|
+
request.session[:salt] = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
# Emails
|
45
|
+
|
46
|
+
Then /^a confirmation message should be sent to "(.*)"$/ do |email|
|
47
|
+
user = User.find_by_email(email)
|
48
|
+
sent = ActionMailer::Base.deliveries.first
|
49
|
+
assert_equal [user.email], sent.to
|
50
|
+
assert_equal 'Account confirmation', sent.subject
|
51
|
+
assert !user.token.blank?
|
52
|
+
assert_match /#{user.token}/, sent.body
|
53
|
+
end
|
54
|
+
|
55
|
+
When /^I follow the confirmation link sent to "(.*)"$/ do |email|
|
56
|
+
user = User.find_by_email(email)
|
57
|
+
visit new_user_confirmation_path(:user_id => user, :token => user.token)
|
58
|
+
end
|
59
|
+
|
60
|
+
Then /^a password reset message should be sent to "(.*)"$/ do |email|
|
61
|
+
user = User.find_by_email(email)
|
62
|
+
sent = ActionMailer::Base.deliveries.first
|
63
|
+
assert_equal [user.email], sent.to
|
64
|
+
assert_equal 'Change your password', sent.subject
|
65
|
+
assert !user.token.blank?
|
66
|
+
assert_match /#{user.token}/, sent.body
|
67
|
+
end
|
68
|
+
|
69
|
+
When /^I follow the password reset link sent to "(.*)"$/ do |email|
|
70
|
+
user = User.find_by_email(email)
|
71
|
+
visit edit_user_password_path(:user_id => user, :token => user.token)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Actions
|
75
|
+
|
76
|
+
When /^I sign in( with "remember me")? as "(.*)\/(.*)"$/ do |remember, email, password|
|
77
|
+
When %{I go to the sign in page}
|
78
|
+
And %{I fill in "Email" with "#{email}"}
|
79
|
+
And %{I fill in "Password" with "#{password}"}
|
80
|
+
And %{I check "Remember me"} if remember
|
81
|
+
And %{I press "Sign In"}
|
82
|
+
end
|
83
|
+
|
84
|
+
When /^I sign out$/ do
|
85
|
+
visit '/session', :delete
|
86
|
+
end
|
87
|
+
|
88
|
+
When /^I request password reset link to be sent to "(.*)"$/ do |email|
|
89
|
+
When %{I go to the password reset request page}
|
90
|
+
And %{I fill in "Email address" with "#{email}"}
|
91
|
+
And %{I press "Reset password"}
|
92
|
+
end
|
93
|
+
|
94
|
+
When /^I update my password with "(.*)\/(.*)"$/ do |password, confirmation|
|
95
|
+
And %{I fill in "Choose password" with "#{password}"}
|
96
|
+
And %{I fill in "Verify password" with "#{confirmation}"}
|
97
|
+
And %{I press "Save this password"}
|
98
|
+
end
|
99
|
+
|
100
|
+
When /^I return next time$/ do
|
101
|
+
When %{session is cleared}
|
102
|
+
And %{I go to the homepage}
|
103
|
+
end
|
@@ -9,8 +9,8 @@ module Clearance
|
|
9
9
|
should_filter_params :token
|
10
10
|
|
11
11
|
context "Given a user whose email has not been confirmed" do
|
12
|
-
setup { @user = Factory(:
|
13
|
-
|
12
|
+
setup { @user = Factory(:user) }
|
13
|
+
|
14
14
|
context "on GET to #new with correct id and token" do
|
15
15
|
setup do
|
16
16
|
get :new, :user_id => @user.to_param, :token => @user.token
|
@@ -18,8 +18,8 @@ module Clearance
|
|
18
18
|
should_display_a_sign_in_form
|
19
19
|
end
|
20
20
|
|
21
|
-
context "Given a
|
22
|
-
setup { @user = Factory(:
|
21
|
+
context "Given a user" do
|
22
|
+
setup { @user = Factory(:user) }
|
23
23
|
|
24
24
|
context "a POST to #create with good credentials" do
|
25
25
|
setup do
|
@@ -41,7 +41,7 @@ module Clearance
|
|
41
41
|
|
42
42
|
context "Given an email confirmed user" do
|
43
43
|
setup do
|
44
|
-
@user = Factory(:
|
44
|
+
@user = Factory(:user)
|
45
45
|
@user.confirm_email!
|
46
46
|
end
|
47
47
|
|
@@ -16,7 +16,7 @@ module Clearance
|
|
16
16
|
should_render_template :new
|
17
17
|
should_not_set_the_flash
|
18
18
|
|
19
|
-
|
19
|
+
should_display_a_sign_up_form
|
20
20
|
end
|
21
21
|
|
22
22
|
context "Given email parameter when getting new User view" do
|
@@ -32,7 +32,7 @@ module Clearance
|
|
32
32
|
|
33
33
|
context "Given valid attributes when creating a new user" do
|
34
34
|
setup do
|
35
|
-
user_attributes = Factory.attributes_for(:
|
35
|
+
user_attributes = Factory.attributes_for(:user)
|
36
36
|
post :create, :user => user_attributes
|
37
37
|
end
|
38
38
|
|
@@ -8,7 +8,7 @@ module Clearance
|
|
8
8
|
|
9
9
|
context "A change password email" do
|
10
10
|
setup do
|
11
|
-
@user = Factory(:
|
11
|
+
@user = Factory(:user)
|
12
12
|
@email = ClearanceMailer.create_change_password @user
|
13
13
|
end
|
14
14
|
|
@@ -33,7 +33,7 @@ module Clearance
|
|
33
33
|
|
34
34
|
context "A confirmation email" do
|
35
35
|
setup do
|
36
|
-
@user = Factory(:
|
36
|
+
@user = Factory(:user)
|
37
37
|
@email = ClearanceMailer.create_confirmation @user
|
38
38
|
end
|
39
39
|
|
@@ -10,24 +10,24 @@ module Clearance
|
|
10
10
|
:salt, :encrypted_password,
|
11
11
|
:token, :token_expires_at
|
12
12
|
|
13
|
-
#
|
13
|
+
# signing up
|
14
14
|
|
15
|
-
context "When
|
15
|
+
context "When signing up" do
|
16
16
|
should_require_attributes :email, :password
|
17
17
|
should_allow_values_for :email, "foo@example.com"
|
18
18
|
should_not_allow_values_for :email, "foo"
|
19
19
|
should_not_allow_values_for :email, "example.com"
|
20
20
|
|
21
21
|
should_validate_confirmation_of :password,
|
22
|
-
:factory => :
|
22
|
+
:factory => :user
|
23
23
|
|
24
24
|
should "initialize salt" do
|
25
|
-
assert_not_nil Factory(:
|
25
|
+
assert_not_nil Factory(:user).salt
|
26
26
|
end
|
27
27
|
|
28
28
|
should "initialize token witout expiry date" do
|
29
|
-
assert_not_nil Factory(:
|
30
|
-
assert_nil Factory(:
|
29
|
+
assert_not_nil Factory(:user).token
|
30
|
+
assert_nil Factory(:user).token_expires_at
|
31
31
|
end
|
32
32
|
|
33
33
|
context "encrypt password" do
|
@@ -35,7 +35,7 @@ module Clearance
|
|
35
35
|
@salt = "salt"
|
36
36
|
User.any_instance.stubs(:initialize_salt)
|
37
37
|
|
38
|
-
@user = Factory(:
|
38
|
+
@user = Factory(:user, :salt => @salt)
|
39
39
|
@password = @user.password
|
40
40
|
|
41
41
|
@user.encrypt(@password)
|
@@ -49,22 +49,22 @@ module Clearance
|
|
49
49
|
end
|
50
50
|
|
51
51
|
should "store email in lower case" do
|
52
|
-
user = Factory(:
|
52
|
+
user = Factory(:user, :email => "John.Doe@example.com")
|
53
53
|
assert_equal "john.doe@example.com", user.email
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
context "When multiple users have
|
58
|
-
setup { @user = Factory(:
|
57
|
+
context "When multiple users have signed up" do
|
58
|
+
setup { @user = Factory(:user) }
|
59
59
|
|
60
60
|
should_require_unique_attributes :email
|
61
61
|
end
|
62
62
|
|
63
63
|
# confirming email
|
64
64
|
|
65
|
-
context "A
|
65
|
+
context "A user without email confirmation" do
|
66
66
|
setup do
|
67
|
-
@user = Factory(:
|
67
|
+
@user = Factory(:user)
|
68
68
|
assert ! @user.email_confirmed?
|
69
69
|
end
|
70
70
|
|
@@ -88,7 +88,7 @@ module Clearance
|
|
88
88
|
|
89
89
|
context "A user" do
|
90
90
|
setup do
|
91
|
-
@user = Factory(:
|
91
|
+
@user = Factory(:user)
|
92
92
|
@password = @user.password
|
93
93
|
end
|
94
94
|
|
@@ -176,7 +176,7 @@ module Clearance
|
|
176
176
|
|
177
177
|
context "An email confirmed user" do
|
178
178
|
setup do
|
179
|
-
@user = Factory(:
|
179
|
+
@user = Factory(:user)
|
180
180
|
@user.confirm_email!
|
181
181
|
end
|
182
182
|
|
data/shoulda_macros/clearance.rb
CHANGED
@@ -61,7 +61,7 @@ module Clearance
|
|
61
61
|
def signed_in_user_context(&blk)
|
62
62
|
context "A signed in user" do
|
63
63
|
setup do
|
64
|
-
@user = Factory(:
|
64
|
+
@user = Factory(:user)
|
65
65
|
@user.confirm_email!
|
66
66
|
sign_in_as @user
|
67
67
|
end
|
@@ -184,10 +184,10 @@ module Clearance
|
|
184
184
|
end
|
185
185
|
end
|
186
186
|
|
187
|
-
def
|
188
|
-
should "display a form to
|
187
|
+
def should_display_a_sign_up_form
|
188
|
+
should "display a form to sign up" do
|
189
189
|
assert_select "form[action=#{users_path}][method=post]",
|
190
|
-
true, "There must be a form to
|
190
|
+
true, "There must be a form to sign up" do
|
191
191
|
assert_select "input[type=text][name=?]",
|
192
192
|
"user[email]", true, "There must be an email field"
|
193
193
|
assert_select "input[type=password][name=?]",
|
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.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thoughtbot, inc.
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2009-01
|
18
|
+
date: 2009-02-01 21:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -28,6 +28,7 @@ extensions: []
|
|
28
28
|
extra_rdoc_files: []
|
29
29
|
|
30
30
|
files:
|
31
|
+
- CHANGELOG.textile
|
31
32
|
- LICENSE
|
32
33
|
- Rakefile
|
33
34
|
- README.textile
|
@@ -78,6 +79,17 @@ files:
|
|
78
79
|
- generators/clearance/templates/test/unit/clearance_mailer_test.rb
|
79
80
|
- generators/clearance/templates/test/unit/user_test.rb
|
80
81
|
- generators/clearance/USAGE
|
82
|
+
- generators/clearance_features
|
83
|
+
- generators/clearance_features/clearance_features_generator.rb
|
84
|
+
- generators/clearance_features/templates
|
85
|
+
- generators/clearance_features/templates/features
|
86
|
+
- generators/clearance_features/templates/features/password_reset.feature
|
87
|
+
- generators/clearance_features/templates/features/sign_in.feature
|
88
|
+
- generators/clearance_features/templates/features/sign_out.feature
|
89
|
+
- generators/clearance_features/templates/features/sign_up.feature
|
90
|
+
- generators/clearance_features/templates/features/step_definitions
|
91
|
+
- generators/clearance_features/templates/features/step_definitions/clearance_steps.rb
|
92
|
+
- generators/clearance_features/USAGE
|
81
93
|
- lib/clearance
|
82
94
|
- lib/clearance/app
|
83
95
|
- lib/clearance/app/controllers
|