thoughtbot-clearance 0.2.6 → 0.2.7

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.
@@ -0,0 +1,85 @@
1
+ module Clearance
2
+ module Test
3
+ module Functional
4
+ module ConfirmationsControllerTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+
9
+ context 'A GET to #new' do
10
+ context "with the User with the given id's salt" do
11
+ setup do
12
+ @user = Factory :user
13
+ get :new, :user_id => @user.id, :salt => @user.salt
14
+ end
15
+
16
+ should 'find the User record with the given id and salt' do
17
+ assert_equal @user, assigns(:user)
18
+ end
19
+
20
+ should_respond_with :success
21
+ should_render_template :new
22
+ end
23
+
24
+ context "without the User with the given id's salt" do
25
+ setup do
26
+ user = Factory :user
27
+ salt = ''
28
+ assert_not_equal salt, user.salt
29
+
30
+ get :new, :user_id => user.id, :salt => ''
31
+ end
32
+
33
+ should_respond_with :not_found
34
+
35
+ should 'render nothing' do
36
+ assert @response.body.blank?
37
+ end
38
+ end
39
+ end
40
+
41
+ context 'A POST to #create' do
42
+ context "with the User with the given id's salt" do
43
+ setup do
44
+ @user = Factory :user
45
+ assert ! @user.confirmed?
46
+
47
+ post :create, :user_id => @user, :salt => @user.salt
48
+ @user.reload
49
+ end
50
+
51
+ should 'confirm the User record with the given id' do
52
+ assert @user.confirmed?
53
+ end
54
+
55
+ should 'log the User in' do
56
+ assert_equal @user.id, session[:user_id]
57
+ end
58
+
59
+ should_redirect_to "user_path(@user)"
60
+ end
61
+
62
+ context "without the User with the given id's salt" do
63
+ setup do
64
+ user = Factory :user
65
+ salt = ''
66
+ assert_not_equal salt, user.salt
67
+
68
+ post :create, :user_id => user.id, :salt => salt
69
+ end
70
+
71
+ should_respond_with :not_found
72
+
73
+ should 'render nothing' do
74
+ assert @response.body.blank?
75
+ end
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,192 @@
1
+ module Clearance
2
+ module Test
3
+ module Functional
4
+ module PasswordsControllerTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+
9
+ should_route :get, '/users/1/password/edit', :action => 'edit', :user_id => '1'
10
+
11
+ context 'with a user' do
12
+ setup { @user = Factory :user }
13
+
14
+ context 'A GET to #new' do
15
+ setup { get :new, :user_id => @user_id }
16
+
17
+ should_respond_with :success
18
+ should_render_template 'new'
19
+ end
20
+
21
+ context 'A POST to #create' do
22
+ context "with an existing user's email address" do
23
+ setup do
24
+ ActionMailer::Base.deliveries.clear
25
+
26
+ post :create, :password => { :email => @user.email }
27
+ @email = ActionMailer::Base.deliveries[0]
28
+ end
29
+
30
+ should 'send an email to the user to edit their password' do
31
+ assert @email.subject =~ /request to change your password/i
32
+ end
33
+
34
+ should_redirect_to "new_session_path"
35
+ end
36
+
37
+ context 'with a non-existing email address' do
38
+ setup do
39
+ email = 'user1@example.com'
40
+ assert ! User.exists?(['email = ?', email])
41
+ ActionMailer::Base.deliveries.clear
42
+
43
+ post :create, :password => { :email => email }
44
+ end
45
+
46
+ should 'not send a password reminder email' do
47
+ assert ActionMailer::Base.deliveries.empty?
48
+ end
49
+
50
+ should 'set a :warning flash' do
51
+ assert_not_nil flash.now[:warning]
52
+ end
53
+
54
+ should_render_template "new"
55
+ end
56
+ end
57
+
58
+ context 'A GET to #edit' do
59
+ context "with an existing user's id and password" do
60
+ setup do
61
+ get :edit,
62
+ :user_id => @user.id,
63
+ :password => @user.crypted_password,
64
+ :email => @user.email
65
+ end
66
+
67
+ should 'find the user with the given id and password' do
68
+ assert_equal @user, assigns(:user)
69
+ end
70
+
71
+ should_respond_with :success
72
+ should_render_template "edit"
73
+
74
+ should "have a form for the user's email, password, and password confirm" do
75
+ update_path = ERB::Util.h(user_password_path(@user,
76
+ :password => @user.crypted_password,
77
+ :email => @user.email))
78
+
79
+ assert_select 'form[action=?]', update_path do
80
+ assert_select 'input[name=_method][value=?]', 'put'
81
+ assert_select 'input[name=?]', 'user[password]'
82
+ assert_select 'input[name=?]', 'user[password_confirmation]'
83
+ end
84
+ end
85
+ end
86
+
87
+ context "with an existing user's id but not password" do
88
+ setup do
89
+ get(:edit,
90
+ :user_id => @user.id,
91
+ :password => '')
92
+ end
93
+
94
+ should_respond_with :not_found
95
+
96
+ should 'render an empty response' do
97
+ assert @response.body.blank?
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'A PUT to #update' do
103
+ context "with an existing user's id but not password" do
104
+ setup do
105
+ put(:update,
106
+ :user_id => @user.id,
107
+ :password => '')
108
+ end
109
+
110
+ should "not update the user's password" do
111
+ assert_not_equal @encrypted_new_password, @user.crypted_password
112
+ end
113
+
114
+ should 'not log the user in' do
115
+ assert_nil session[:user_id]
116
+ end
117
+
118
+ should_respond_with :not_found
119
+
120
+ should 'render an empty response' do
121
+ assert @response.body.blank?
122
+ end
123
+ end
124
+
125
+ context 'with a matching password and password confirmation' do
126
+ setup do
127
+ new_password = 'new_password'
128
+ encryption_format = "--#{@user.salt}--#{new_password}--"
129
+ @encrypted_new_password = Digest::SHA1.hexdigest encryption_format
130
+ assert_not_equal @encrypted_new_password, @user.crypted_password
131
+
132
+ put(:update,
133
+ :user_id => @user,
134
+ :email => @user.email,
135
+ :password => @user.crypted_password,
136
+ :user => {
137
+ :password => new_password,
138
+ :password_confirmation => new_password
139
+ })
140
+ @user.reload
141
+ end
142
+
143
+ should "update the user's password" do
144
+ assert_equal @encrypted_new_password, @user.crypted_password
145
+ end
146
+
147
+ should 'log the user in' do
148
+ assert_equal session[:user_id], @user.id
149
+ end
150
+
151
+ should_redirect_to "user_path(@user)"
152
+ end
153
+
154
+ context 'with password but blank password confirmation' do
155
+ setup do
156
+ new_password = 'new_password'
157
+ encryption_format = "--#{@user.salt}--#{new_password}--"
158
+ @encrypted_new_password = Digest::SHA1.hexdigest encryption_format
159
+
160
+ put(:update,
161
+ :user_id => @user.id,
162
+ :password => @user.crypted_password,
163
+ :user => {
164
+ :password => new_password,
165
+ :password_confirmation => ''
166
+ })
167
+ @user.reload
168
+ end
169
+
170
+ should "not update the user's password" do
171
+ assert_not_equal @encrypted_new_password, @user.crypted_password
172
+ end
173
+
174
+ should 'not log the user in' do
175
+ assert_nil session[:user_id]
176
+ end
177
+
178
+ should_respond_with :not_found
179
+
180
+ should 'render an empty response' do
181
+ assert @response.body.blank?
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,96 @@
1
+ module Clearance
2
+ module Test
3
+ module Functional
4
+ module SessionsControllerTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+ context "Given a user" do
9
+ setup { @user = Factory :user }
10
+
11
+ should_filter_params :password
12
+
13
+ context "on GET to /sessions/new" do
14
+ setup { get :new }
15
+
16
+ should_respond_with :success
17
+ should_render_template :new
18
+ should_not_set_the_flash
19
+ should_have_form :action => "session_path",
20
+ :fields => { "session[email]" => :text,
21
+ "session[password]" => :password,
22
+ "session[remember_me]" => :checkbox }
23
+ end
24
+
25
+ context "a POST to #create with good credentials" do
26
+ setup do
27
+ post :create, :session => { :email => @user.email, :password => @user.password }
28
+ end
29
+
30
+ should_set_the_flash_to /success/i
31
+ should_redirect_to '@controller.send(:url_after_create)'
32
+ #should_return_from_session(:user_id, '@user.id')
33
+ should "return the correct value from the session for key :user_id" do
34
+ instantiate_variables_from_assigns do
35
+ expected_value = @user.id
36
+ assert_equal expected_value, session[:user_id], "Expected #{expected_value.inspect} but was #{session[:user_id]}"
37
+ end
38
+ end
39
+ end
40
+
41
+ context "a POST to #create with bad credentials" do
42
+ setup do
43
+ post :create, :session => { :email => @user.email, :password => "bad value" }
44
+ end
45
+
46
+ should_set_the_flash_to /bad/i
47
+ should_render_template :new
48
+ #should_return_from_session(:user_id, 'nil')
49
+ should "return nil from the session for key :user_id" do
50
+ instantiate_variables_from_assigns do
51
+ assert_nil session[:user_id], "Expected nil but was #{session[:user_id]}"
52
+ end
53
+ end
54
+ end
55
+
56
+ # TODO: two tests for remember me - success and failure
57
+ end
58
+
59
+ public_context do
60
+ context "logging out again" do
61
+ setup { delete :destroy }
62
+ should_redirect_to '@controller.send(:url_after_destroy)'
63
+ end
64
+ end
65
+
66
+ logged_in_user_context do
67
+ context "a DELETE to #destroy without a cookie" do
68
+ setup { delete :destroy }
69
+
70
+ should_set_the_flash_to(/logged out/i)
71
+ should_redirect_to '@controller.send(:url_after_destroy)'
72
+ end
73
+
74
+ context 'a DELETE to #destroy with a cookie' do
75
+ setup do
76
+ cookies['auth_token'] = CGI::Cookie.new 'token', 'value'
77
+ delete :destroy
78
+ end
79
+
80
+ should 'delete the cookie' do
81
+ assert cookies['auth_token'].empty?
82
+ end
83
+
84
+ should 'delete the remember me token in users table' do
85
+ assert_nil @user.reload.remember_token
86
+ assert_nil @user.reload.remember_token_expires_at
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,64 @@
1
+ module Clearance
2
+ module Test
3
+ module Functional
4
+ module UsersControllerTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+ public_context do
9
+
10
+ context "on GET to /users/new" do
11
+ setup { get :new }
12
+ should_respond_with :success
13
+ should_render_template :new
14
+ should_not_set_the_flash
15
+ should_have_form :action => "users_path",
16
+ :method => :post,
17
+ :fields => { :email => :text,
18
+ :password => :password,
19
+ :password_confirmation => :password }
20
+
21
+ context "with params" do
22
+ setup do
23
+ @email = 'a@example.com'
24
+ get :new, :user => {:email => @email}
25
+ end
26
+
27
+ should_assign_to :user
28
+ should "set the @user's params" do
29
+ assert_equal @email, assigns(:user).email
30
+ end
31
+ end
32
+ end
33
+
34
+ context "on POST to /users" do
35
+ setup do
36
+ post :create, :user => {
37
+ :email => Factory.next(:email),
38
+ :password => 'skerit',
39
+ :password_confirmation => 'skerit'
40
+ }
41
+ end
42
+
43
+ should_set_the_flash_to /confirm/i
44
+ should_redirect_to "@controller.send(:url_after_create)"
45
+ should_assign_to :user
46
+ should_change 'User.count', :by => 1
47
+ end
48
+
49
+ end
50
+
51
+ logged_in_user_context do
52
+
53
+ should_deny_access_on "get :new"
54
+ should_deny_access_on "post :create, :user => {}"
55
+ should_filter_params :password
56
+
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,38 @@
1
+ module Clearance
2
+ module Test
3
+ module Unit
4
+ module UserMailerTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+ context "A change password email" do
9
+ setup do
10
+ @user = Factory :user
11
+ @email = UserMailer.create_change_password @user
12
+ end
13
+
14
+ should "set its from address to 'donotreply@example.com'" do
15
+ assert_equal 'donotreply@example.com', @email.from[0]
16
+ end
17
+
18
+ should "contain a link to edit the user's password" do
19
+ host = ActionMailer::Base.default_url_options[:host]
20
+ regexp = %r{http://#{host}/users/#{@user.id}/password/edit\?email=#{@user.email.gsub("@", "%40")}&password=#{@user.crypted_password}}
21
+ assert_match regexp, @email.body
22
+ end
23
+
24
+ should "be sent to the user" do
25
+ assert_equal [@user.email], @email.to
26
+ end
27
+
28
+ should "have a subject of '[YOUR APP] Request to change your password'" do
29
+ assert_equal "[YOUR APP] Request to change your password", @email.subject
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,208 @@
1
+ module Clearance
2
+ module Test
3
+ module Unit
4
+ module UserTest
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+ should_require_attributes :email, :password
9
+
10
+ should "require password validation on create" do
11
+ user = Factory.build(:user, :password => 'blah', :password_confirmation => 'boogidy')
12
+ assert !user.save
13
+ assert_match(/confirmation/i, user.errors.on(:password))
14
+ end
15
+
16
+ should "create a crypted_password on save" do
17
+ assert_not_nil Factory(:user, :crypted_password => nil).crypted_password
18
+ end
19
+
20
+ context 'updating a password' do
21
+ setup do
22
+ @user = Factory(:user)
23
+ assert_not_nil @user.crypted_password
24
+ @crypt = @user.crypted_password
25
+ assert_not_nil @user.salt
26
+ @salt = @user.salt
27
+ @user.password = 'a_new_password'
28
+ @user.password_confirmation = 'a_new_password'
29
+ assert @user.save
30
+ end
31
+
32
+ should 'update a crypted_password' do
33
+ @user.reload
34
+ assert @user.crypted_password != @crypt
35
+ end
36
+ end
37
+
38
+ context 'A user' do
39
+ setup do
40
+ @salt = 'salt'
41
+ User.any_instance.stubs(:initialize_salt)
42
+ @user = Factory :user, :salt => @salt
43
+ @password = @user.password
44
+ end
45
+
46
+ should "require password validation on update" do
47
+ @user.update_attributes(:password => "blah", :password_confirmation => "boogidy")
48
+ assert !@user.save
49
+ assert_match(/confirmation/i, @user.errors.on(:password))
50
+ end
51
+
52
+ should_require_unique_attributes :email
53
+
54
+ context 'authenticating a user' do
55
+ context 'with good credentials' do
56
+ setup do
57
+ @result = User.authenticate @user.email, @password
58
+ end
59
+
60
+ should 'return true' do
61
+ assert @result
62
+ end
63
+ end
64
+
65
+ context 'with bad credentials' do
66
+ setup do
67
+ @result = User.authenticate @user.email, 'horribly_wrong_password'
68
+ end
69
+
70
+ should 'return false' do
71
+ assert !@result
72
+ end
73
+ end
74
+ end
75
+
76
+ context 'authenticated?' do
77
+ context 'with good credentials' do
78
+ setup do
79
+ @result = @user.authenticated? @password
80
+ end
81
+
82
+ should 'return true' do
83
+ assert @result
84
+ end
85
+ end
86
+
87
+ context 'with bad credentials' do
88
+ setup do
89
+ @result = @user.authenticated? 'horribly_wrong_password'
90
+ end
91
+
92
+ should 'return false' do
93
+ assert !@result
94
+ end
95
+ end
96
+ end
97
+
98
+ context 'encrypt' do
99
+ setup do
100
+ @crypted = @user.encrypt(@password)
101
+ @expected = Digest::SHA1.hexdigest("--#{@salt}--#{@password}--")
102
+ end
103
+
104
+ should 'create a Hash using SHA1 encryption' do
105
+ assert_equal @expected, @crypted
106
+ assert_not_equal @password, @crypted
107
+ end
108
+ end
109
+
110
+ context 'remember_me!' do
111
+ setup do
112
+ assert_nil @user.remember_token
113
+ assert_nil @user.remember_token_expires_at
114
+ @user.remember_me!
115
+ end
116
+
117
+ should 'set the remember token and expiration date' do
118
+ assert_not_nil @user.remember_token
119
+ assert_not_nil @user.remember_token_expires_at
120
+ end
121
+
122
+ should 'remember_token?' do
123
+ assert @user.remember_token?
124
+ end
125
+
126
+ context 'forget_me!' do
127
+ setup do
128
+ @user.forget_me!
129
+ end
130
+
131
+ should 'unset the remember token and expiration date' do
132
+ assert_nil @user.remember_token
133
+ assert_nil @user.remember_token_expires_at
134
+ end
135
+
136
+ should 'not remember_token?' do
137
+ assert ! @user.remember_token?
138
+ end
139
+ end
140
+ end
141
+
142
+ context 'remember_token?' do
143
+ context 'when token expires in the future' do
144
+ setup do
145
+ @user.update_attribute :remember_token_expires_at, 2.weeks.from_now.utc
146
+ end
147
+
148
+ should 'be true' do
149
+ assert @user.remember_token?
150
+ end
151
+ end
152
+
153
+ context 'when token expired' do
154
+ setup do
155
+ @user.update_attribute :remember_token_expires_at, 2.weeks.ago.utc
156
+ end
157
+
158
+ should 'be false' do
159
+ assert ! @user.remember_token?
160
+ end
161
+ end
162
+ end
163
+
164
+ context "User.authenticate with a valid email and password" do
165
+ setup do
166
+ @found_user = User.authenticate @user.email, @user.password
167
+ end
168
+
169
+ should "find that user" do
170
+ assert_equal @user, @found_user
171
+ end
172
+ end
173
+
174
+ context "When sent authenticate with an invalid email and password" do
175
+ setup do
176
+ @found_user = User.authenticate "not", "valid"
177
+ end
178
+
179
+ should "find nothing" do
180
+ assert_nil @found_user
181
+ end
182
+ end
183
+ end
184
+
185
+ context "A user" do
186
+ setup do
187
+ @user = Factory :user
188
+ end
189
+
190
+ context 'when sent #confirm!' do
191
+ setup do
192
+ assert ! @user.confirmed?
193
+ assert @user.confirm!
194
+ @user.reload
195
+ end
196
+
197
+ should 'mark the User record as confirmed' do
198
+ assert @user.confirmed?
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ end
206
+ end
207
+ end
208
+ end
@@ -1,7 +1,7 @@
1
- module Clearance
1
+ class Clearance
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- PATCH = 6
5
+ PATCH = 7
6
6
  end
7
7
  end
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.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoughtbot, inc.
@@ -81,15 +81,15 @@ files:
81
81
  - lib/clearance/app/models/user.rb
82
82
  - lib/clearance/app/models/user_mailer.rb
83
83
  - lib/clearance/test
84
- - lib/clearance/test/functionals
85
- - lib/clearance/test/functionals/confirmations_controller_test.rb
86
- - lib/clearance/test/functionals/passwords_controller_test.rb
87
- - lib/clearance/test/functionals/sessions_controller_test.rb
88
- - lib/clearance/test/functionals/users_controller_test.rb
84
+ - lib/clearance/test/functional
85
+ - lib/clearance/test/functional/confirmations_controller_test.rb
86
+ - lib/clearance/test/functional/passwords_controller_test.rb
87
+ - lib/clearance/test/functional/sessions_controller_test.rb
88
+ - lib/clearance/test/functional/users_controller_test.rb
89
89
  - lib/clearance/test/test_helper.rb
90
- - lib/clearance/test/units
91
- - lib/clearance/test/units/user_mailer_test.rb
92
- - lib/clearance/test/units/user_test.rb
90
+ - lib/clearance/test/unit
91
+ - lib/clearance/test/unit/user_mailer_test.rb
92
+ - lib/clearance/test/unit/user_test.rb
93
93
  - lib/clearance/version.rb
94
94
  - lib/clearance.rb
95
95
  - test/rails_root
@@ -142,8 +142,10 @@ files:
142
142
  - test/rails_root/config/routes.rb
143
143
  - test/rails_root/db
144
144
  - test/rails_root/db/bootstrap
145
+ - test/rails_root/db/development.sqlite3
145
146
  - test/rails_root/db/migrate
146
147
  - test/rails_root/db/migrate/001_create_users.rb
148
+ - test/rails_root/db/schema.rb
147
149
  - test/rails_root/db/test.sqlite3
148
150
  - test/rails_root/doc
149
151
  - test/rails_root/doc/README_FOR_APP
@@ -198,6 +200,8 @@ files:
198
200
  - test/rails_root/script/server
199
201
  - test/rails_root/test
200
202
  - test/rails_root/test/factories.rb
203
+ - test/rails_root/test/fixtures
204
+ - test/rails_root/test/fixtures/mailer
201
205
  - test/rails_root/test/functional
202
206
  - test/rails_root/test/functional/confirmations_controller_test.rb
203
207
  - test/rails_root/test/functional/passwords_controller_test.rb
@@ -211,6 +215,11 @@ files:
211
215
  - test/rails_root/test/unit
212
216
  - test/rails_root/test/unit/user_mailer_test.rb
213
217
  - test/rails_root/test/unit/user_test.rb
218
+ - test/rails_root/tmp
219
+ - test/rails_root/tmp/cache
220
+ - test/rails_root/tmp/pids
221
+ - test/rails_root/tmp/sessions
222
+ - test/rails_root/tmp/sockets
214
223
  - test/rails_root/vendor
215
224
  - test/rails_root/vendor/gems
216
225
  - test/rails_root/vendor/gems/mocha-0.9.1
@@ -532,39 +541,6 @@ files:
532
541
  - test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/templates/unit_test.rb
533
542
  - test/rails_root/vendor/plugins/factory_girl_on_rails/rails_generators/factory/USAGE
534
543
  - test/rails_root/vendor/plugins/factory_girl_on_rails/README
535
- - test/rails_root/vendor/plugins/shoulda
536
- - test/rails_root/vendor/plugins/shoulda/bin
537
- - test/rails_root/vendor/plugins/shoulda/lib
538
- - test/rails_root/vendor/plugins/shoulda/lib/shoulda
539
- - test/rails_root/vendor/plugins/shoulda/lib/shoulda/action_mailer
540
- - test/rails_root/vendor/plugins/shoulda/lib/shoulda/active_record
541
- - test/rails_root/vendor/plugins/shoulda/lib/shoulda/controller
542
- - test/rails_root/vendor/plugins/shoulda/lib/shoulda/controller/formats
543
- - test/rails_root/vendor/plugins/shoulda/tasks
544
- - test/rails_root/vendor/plugins/shoulda/test
545
- - test/rails_root/vendor/plugins/shoulda/test/fixtures
546
- - test/rails_root/vendor/plugins/shoulda/test/functional
547
- - test/rails_root/vendor/plugins/shoulda/test/other
548
- - test/rails_root/vendor/plugins/shoulda/test/rails_root
549
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app
550
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/controllers
551
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/helpers
552
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/models
553
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/views
554
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/views/layouts
555
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/views/posts
556
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/app/views/users
557
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/config
558
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/config/environments
559
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/config/initializers
560
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/db
561
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/db/migrate
562
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/log
563
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/public
564
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/script
565
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/vendor
566
- - test/rails_root/vendor/plugins/shoulda/test/rails_root/vendor/plugins
567
- - test/rails_root/vendor/plugins/shoulda/test/unit
568
544
  has_rdoc: false
569
545
  homepage: http://github.com/thoughtbot/clearance
570
546
  post_install_message: