password_resetter 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +36 -0
  4. data/app/assets/javascripts/password_resets.js +2 -0
  5. data/app/assets/stylesheets/password_resets.css +4 -0
  6. data/app/controllers/password_resets_controller.rb +37 -0
  7. data/app/helpers/password_resets_helper.rb +2 -0
  8. data/app/mailers/password_reset_mailer.rb +9 -0
  9. data/app/models/password_reset.rb +57 -0
  10. data/app/views/password_reset_mailer/password_reset.text.erb +7 -0
  11. data/app/views/password_resets/edit.html.erb +7 -0
  12. data/app/views/password_resets/new.html.erb +9 -0
  13. data/bin/execute_migrations +5 -0
  14. data/config/routes.rb +5 -0
  15. data/db/migrate/20120829163145_create_password_resets.rb +14 -0
  16. data/lib/password_resetter.rb +4 -0
  17. data/lib/password_resetter/engine.rb +4 -0
  18. data/lib/password_resetter/version.rb +3 -0
  19. data/lib/tasks/password_resetter_tasks.rake +4 -0
  20. data/spec/dummy/README.rdoc +261 -0
  21. data/spec/dummy/Rakefile +7 -0
  22. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  23. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  24. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  25. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  26. data/spec/dummy/app/models/user.rb +30 -0
  27. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  28. data/spec/dummy/config.ru +4 -0
  29. data/spec/dummy/config/application.rb +59 -0
  30. data/spec/dummy/config/boot.rb +10 -0
  31. data/spec/dummy/config/database.yml +25 -0
  32. data/spec/dummy/config/environment.rb +5 -0
  33. data/spec/dummy/config/environments/development.rb +37 -0
  34. data/spec/dummy/config/environments/production.rb +67 -0
  35. data/spec/dummy/config/environments/test.rb +41 -0
  36. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  37. data/spec/dummy/config/initializers/inflections.rb +15 -0
  38. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  39. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  40. data/spec/dummy/config/initializers/session_store.rb +8 -0
  41. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  42. data/spec/dummy/config/locales/en.yml +5 -0
  43. data/spec/dummy/config/routes.rb +58 -0
  44. data/spec/dummy/db/development.sqlite3 +0 -0
  45. data/spec/dummy/db/migrate/20120829165609_create_users.rb +12 -0
  46. data/spec/dummy/db/production.sqlite3 +0 -0
  47. data/spec/dummy/db/schema.rb +35 -0
  48. data/spec/dummy/db/spec.sqlite3 +0 -0
  49. data/spec/dummy/db/test.sqlite3 +0 -0
  50. data/spec/dummy/log/development.log +138 -0
  51. data/spec/dummy/log/test.log +7071 -0
  52. data/spec/dummy/public/404.html +26 -0
  53. data/spec/dummy/public/422.html +26 -0
  54. data/spec/dummy/public/500.html +25 -0
  55. data/spec/dummy/public/favicon.ico +0 -0
  56. data/spec/dummy/script/rails +6 -0
  57. data/spec/dummy/test/fixtures/users.yml +11 -0
  58. data/spec/dummy/test/unit/user_test.rb +7 -0
  59. data/spec/factories/users.rb +7 -0
  60. data/spec/models/password_reset_spec.rb +133 -0
  61. data/spec/spec_helper.rb +27 -0
  62. data/spec/support/account_helper.rb +10 -0
  63. data/spec/support/controller_login_helper.rb +5 -0
  64. data/spec/support/making_helper.rb +24 -0
  65. metadata +284 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2
+
3
+ # This model initially had no columns defined. If you add columns to the
4
+ # model remove the '{}' from the fixture names and add the columns immediately
5
+ # below each fixture, per the syntax in the comments below
6
+ #
7
+ one: {}
8
+ # column: value
9
+ #
10
+ two: {}
11
+ # column: value
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :user do
3
+ sequence(:username) {|n|"user_#{n}" }
4
+ password 'password'
5
+ password_confirmation 'password'
6
+ end
7
+ end
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+
3
+ describe PasswordReset do
4
+
5
+ it { should validate_presence_of(:email) }
6
+
7
+
8
+ describe "attributes" do
9
+ it "allows mass assignment" do
10
+ subject = described_class.new(:email => 'foo')
11
+ subject.email.should == 'foo'
12
+ end
13
+ end
14
+
15
+
16
+ describe "#match_email?" do
17
+ it "is nil by default" do
18
+ subject.user.should be_nil
19
+ end
20
+
21
+ it "returns the user with a matching email" do
22
+ user = FactoryGirl.create(:user, :email => 'eli@example.com')
23
+ subject = described_class.new(:email => 'eli@example.com')
24
+ subject.match_email?
25
+ subject.user.should == user
26
+ end
27
+
28
+ it "returns false without a user match" do
29
+ subject = described_class.new(:email => 'totally_fake')
30
+ subject.match_email?.should be(false)
31
+ end
32
+ end
33
+
34
+ describe "#send_password_reset" do
35
+
36
+ context "when the request is valid" do
37
+ # * generates token
38
+ # * saves present time
39
+ # * sends an email to the user with instructions
40
+
41
+ let(:user) { FactoryGirl.create(:user, :username => 'eli', :email => 'eli@viget.com') }
42
+ let(:mailer) { double('password reset mailer') }
43
+ subject { described_class.create(:user => user) }
44
+
45
+ before do
46
+ PasswordResetMailer.stub(:password_reset).with(user, subject).and_return(mailer)
47
+ mailer.stub(:deliver).and_return(true) # so the email doesn't actually get called
48
+ end
49
+
50
+ it "generates a reset_token" do
51
+ expect{ subject.send_password_reset }.to change{ subject.reset_token }.from(nil)
52
+ end
53
+
54
+ it "saves the present time" do
55
+ expect{ subject.send_password_reset }.to change{ subject.reset_sent_at }.from(nil)
56
+ end
57
+
58
+ it "sends an email" do
59
+ mailer.should_receive(:deliver)
60
+ subject.send_password_reset
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "#update_user_password" do
66
+ let(:user) { FactoryGirl.create(:user, :username => 'eli', :email => 'eli@viget.com') }
67
+ subject { described_class.create(:user => user) }
68
+
69
+ context "when passwords are blank" do
70
+
71
+ it "should return false for blank password" do
72
+ subject.update_user_password("", "secret").should be(false)
73
+ end
74
+
75
+ it "should return false for blank password_confirmation" do
76
+ subject.update_user_password("secret", "").should be(false)
77
+ end
78
+
79
+ it "should return false for blank both" do
80
+ subject.update_user_password("", "").should be(false)
81
+ end
82
+ end
83
+
84
+ context "when passwords don't match" do
85
+
86
+ it "should return false" do
87
+ subject.update_user_password("does_not", "match").should be(false)
88
+ end
89
+ end
90
+
91
+ context "when passwords are valid" do
92
+
93
+ it "should return true" do
94
+ subject.update_user_password("new_secret", "new_secret").should be(true)
95
+ end
96
+
97
+ it "should change the password of the user" do
98
+ expect{ subject.update_user_password("asdf", "asdf") }.to change{ User.authenticate("eli", "asdf") }.from(false).to(user)
99
+ end
100
+ end
101
+ end
102
+
103
+ describe "#expired?" do
104
+
105
+ it "should return true if > 2 hours have passed" do
106
+ subject.update_attributes(:reset_sent_at => 3.hours.ago)
107
+ subject.expired?.should be(true)
108
+ end
109
+
110
+ it "should return false if < 2 hours have passed" do
111
+ subject.update_attributes(:reset_sent_at => 2.hours.ago + 1.minute)
112
+ subject.expired?.should be(false)
113
+ end
114
+ end
115
+
116
+ describe "#delete_existing" do
117
+ let(:user) { FactoryGirl.create(:user, :username => 'eli', :email => 'eli@viget.com') }
118
+ before do
119
+ @pr1 = PasswordReset.create(:user => user, :email => 'filler')
120
+ end
121
+
122
+ it "should do nothing if another PasswordReset does not exist" do
123
+ expect{ @pr1.delete_existing }.to_not change{ PasswordReset.count }
124
+ end
125
+
126
+ it "should delete an existing PasswordReset if one exists" do
127
+ @pr2 = PasswordReset.create(:user => user, :email => 'filler')
128
+ expect{ @pr2.delete_existing }.to change{ PasswordReset.count }.by(-1)
129
+ end
130
+
131
+ end
132
+
133
+ end
@@ -0,0 +1,27 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ ENV['RAILS_ENV'] ||= 'test'
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require 'rspec/rails'
6
+ require 'rspec/autorun'
7
+ require 'shoulda-matchers'
8
+ require 'capybara/rails'
9
+ require 'capybara/rspec'
10
+ require 'database_cleaner'
11
+ require 'factory_girl_rails'
12
+
13
+ Rails.backtrace_cleaner.remove_silencers!
14
+
15
+ DatabaseCleaner.strategy = :truncation
16
+
17
+ RSpec.configure do |config|
18
+ config.mock_with :rspec
19
+ config.use_transactional_fixtures = true
20
+ config.infer_base_class_for_anonymous_controllers = false
21
+
22
+ config.after(:each, :type => :request) do
23
+ DatabaseCleaner.clean # Truncate the database
24
+ Capybara.reset_sessions! # Forget the (simulated) browser state
25
+ Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module AccountHelper
2
+
3
+ def login_with(username, password)
4
+ visit '/login' if current_path != '/login'
5
+ fill_in 'Username', :with => username
6
+ fill_in 'Password', :with => password
7
+ click_button 'Log In'
8
+ end
9
+
10
+ end
@@ -0,0 +1,5 @@
1
+ module ControllerLoginHelper
2
+ def login_as(user)
3
+ controller.stub(:current_user).and_return(user)
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ module MakingHelper
2
+
3
+ def make_comment(content = "This is a primary comment")
4
+ fill_in 'Content', :with => content
5
+ click_on 'Add Comment'
6
+ end
7
+
8
+ def make_article
9
+ fill_in 'Title', :with => 'Example Page'
10
+ fill_in 'Link', :with => 'example.com'
11
+ click_on 'Create Article'
12
+ end
13
+
14
+ def click_on_article(article_name, link = "0 comments")
15
+ article_node = all('table tbody tr td').detect {|n| n.text.include?(article_name) && n.text.include?(link)}
16
+ article_node.click_link "#{link}"
17
+ end
18
+
19
+ def click_on_comment(context)
20
+ comment_node = all('div comment').detect { |n| n.text.include?(context) }
21
+ comment_node.click_link "link"
22
+ end
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,284 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: password_resetter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eli Fatsi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: shoulda-matchers
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: capybara
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: database_cleaner
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: factory_girl_rails
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '1.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '1.7'
126
+ - !ruby/object:Gem::Dependency
127
+ name: bcrypt-ruby
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: And it will be sweet
143
+ email:
144
+ - efatsi@comcast.net
145
+ executables:
146
+ - execute_migrations
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - app/assets/javascripts/password_resets.js
151
+ - app/assets/stylesheets/password_resets.css
152
+ - app/controllers/password_resets_controller.rb
153
+ - app/helpers/password_resets_helper.rb
154
+ - app/mailers/password_reset_mailer.rb
155
+ - app/models/password_reset.rb
156
+ - app/views/password_reset_mailer/password_reset.text.erb
157
+ - app/views/password_resets/edit.html.erb
158
+ - app/views/password_resets/new.html.erb
159
+ - config/routes.rb
160
+ - db/migrate/20120829163145_create_password_resets.rb
161
+ - lib/password_resetter/engine.rb
162
+ - lib/password_resetter/version.rb
163
+ - lib/password_resetter.rb
164
+ - lib/tasks/password_resetter_tasks.rake
165
+ - MIT-LICENSE
166
+ - Rakefile
167
+ - README.rdoc
168
+ - spec/dummy/app/assets/javascripts/application.js
169
+ - spec/dummy/app/assets/stylesheets/application.css
170
+ - spec/dummy/app/controllers/application_controller.rb
171
+ - spec/dummy/app/helpers/application_helper.rb
172
+ - spec/dummy/app/models/user.rb
173
+ - spec/dummy/app/views/layouts/application.html.erb
174
+ - spec/dummy/config/application.rb
175
+ - spec/dummy/config/boot.rb
176
+ - spec/dummy/config/database.yml
177
+ - spec/dummy/config/environment.rb
178
+ - spec/dummy/config/environments/development.rb
179
+ - spec/dummy/config/environments/production.rb
180
+ - spec/dummy/config/environments/test.rb
181
+ - spec/dummy/config/initializers/backtrace_silencers.rb
182
+ - spec/dummy/config/initializers/inflections.rb
183
+ - spec/dummy/config/initializers/mime_types.rb
184
+ - spec/dummy/config/initializers/secret_token.rb
185
+ - spec/dummy/config/initializers/session_store.rb
186
+ - spec/dummy/config/initializers/wrap_parameters.rb
187
+ - spec/dummy/config/locales/en.yml
188
+ - spec/dummy/config/routes.rb
189
+ - spec/dummy/config.ru
190
+ - spec/dummy/db/development.sqlite3
191
+ - spec/dummy/db/migrate/20120829165609_create_users.rb
192
+ - spec/dummy/db/production.sqlite3
193
+ - spec/dummy/db/schema.rb
194
+ - spec/dummy/db/spec.sqlite3
195
+ - spec/dummy/db/test.sqlite3
196
+ - spec/dummy/log/development.log
197
+ - spec/dummy/log/test.log
198
+ - spec/dummy/public/404.html
199
+ - spec/dummy/public/422.html
200
+ - spec/dummy/public/500.html
201
+ - spec/dummy/public/favicon.ico
202
+ - spec/dummy/Rakefile
203
+ - spec/dummy/README.rdoc
204
+ - spec/dummy/script/rails
205
+ - spec/dummy/test/fixtures/users.yml
206
+ - spec/dummy/test/unit/user_test.rb
207
+ - spec/factories/users.rb
208
+ - spec/models/password_reset_spec.rb
209
+ - spec/spec_helper.rb
210
+ - spec/support/account_helper.rb
211
+ - spec/support/controller_login_helper.rb
212
+ - spec/support/making_helper.rb
213
+ - !binary |-
214
+ YmluL2V4ZWN1dGVfbWlncmF0aW9ucw==
215
+ homepage: http://efatsi.github.com
216
+ licenses: []
217
+ post_install_message:
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ none: false
223
+ requirements:
224
+ - - ! '>='
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ none: false
229
+ requirements:
230
+ - - ! '>='
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ requirements: []
234
+ rubyforge_project:
235
+ rubygems_version: 1.8.24
236
+ signing_key:
237
+ specification_version: 3
238
+ summary: This will work one day.
239
+ test_files:
240
+ - spec/dummy/app/assets/javascripts/application.js
241
+ - spec/dummy/app/assets/stylesheets/application.css
242
+ - spec/dummy/app/controllers/application_controller.rb
243
+ - spec/dummy/app/helpers/application_helper.rb
244
+ - spec/dummy/app/models/user.rb
245
+ - spec/dummy/app/views/layouts/application.html.erb
246
+ - spec/dummy/config/application.rb
247
+ - spec/dummy/config/boot.rb
248
+ - spec/dummy/config/database.yml
249
+ - spec/dummy/config/environment.rb
250
+ - spec/dummy/config/environments/development.rb
251
+ - spec/dummy/config/environments/production.rb
252
+ - spec/dummy/config/environments/test.rb
253
+ - spec/dummy/config/initializers/backtrace_silencers.rb
254
+ - spec/dummy/config/initializers/inflections.rb
255
+ - spec/dummy/config/initializers/mime_types.rb
256
+ - spec/dummy/config/initializers/secret_token.rb
257
+ - spec/dummy/config/initializers/session_store.rb
258
+ - spec/dummy/config/initializers/wrap_parameters.rb
259
+ - spec/dummy/config/locales/en.yml
260
+ - spec/dummy/config/routes.rb
261
+ - spec/dummy/config.ru
262
+ - spec/dummy/db/development.sqlite3
263
+ - spec/dummy/db/migrate/20120829165609_create_users.rb
264
+ - spec/dummy/db/production.sqlite3
265
+ - spec/dummy/db/schema.rb
266
+ - spec/dummy/db/spec.sqlite3
267
+ - spec/dummy/db/test.sqlite3
268
+ - spec/dummy/log/development.log
269
+ - spec/dummy/log/test.log
270
+ - spec/dummy/public/404.html
271
+ - spec/dummy/public/422.html
272
+ - spec/dummy/public/500.html
273
+ - spec/dummy/public/favicon.ico
274
+ - spec/dummy/Rakefile
275
+ - spec/dummy/README.rdoc
276
+ - spec/dummy/script/rails
277
+ - spec/dummy/test/fixtures/users.yml
278
+ - spec/dummy/test/unit/user_test.rb
279
+ - spec/factories/users.rb
280
+ - spec/models/password_reset_spec.rb
281
+ - spec/spec_helper.rb
282
+ - spec/support/account_helper.rb
283
+ - spec/support/controller_login_helper.rb
284
+ - spec/support/making_helper.rb