clearance 1.0.0.rc4 → 1.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of clearance might be problematic. Click here for more details.

Files changed (58) hide show
  1. checksums.yaml +15 -0
  2. data/.travis.yml +14 -3
  3. data/Appraisals +7 -1
  4. data/Gemfile.lock +33 -26
  5. data/LICENSE +1 -1
  6. data/NEWS.md +13 -10
  7. data/README.md +44 -37
  8. data/Rakefile +3 -0
  9. data/app/controllers/clearance/passwords_controller.rb +6 -2
  10. data/app/views/clearance_mailer/change_password.html.erb +2 -2
  11. data/app/views/passwords/create.html.erb +3 -1
  12. data/app/views/passwords/edit.html.erb +15 -13
  13. data/app/views/passwords/new.html.erb +13 -11
  14. data/app/views/sessions/_form.html.erb +8 -3
  15. data/app/views/sessions/new.html.erb +4 -11
  16. data/app/views/users/_form.html.erb +2 -2
  17. data/app/views/users/new.html.erb +14 -5
  18. data/clearance.gemspec +5 -3
  19. data/config/locales/clearance.en.yml +53 -23
  20. data/config/routes.rb +3 -3
  21. data/gemfiles/{3.0.17.gemfile → 3.0.20.gemfile} +1 -1
  22. data/gemfiles/{3.0.17.gemfile.lock → 3.0.20.gemfile.lock} +62 -57
  23. data/gemfiles/{3.2.8.gemfile → 3.1.11.gemfile} +1 -1
  24. data/gemfiles/{3.1.8.gemfile.lock → 3.1.11.gemfile.lock} +70 -65
  25. data/gemfiles/{3.1.8.gemfile → 3.2.12.gemfile} +1 -1
  26. data/gemfiles/{3.2.8.gemfile.lock → 3.2.12.gemfile.lock} +74 -68
  27. data/gemfiles/3.2.13.rc2.gemfile +7 -0
  28. data/gemfiles/3.2.13.rc2.gemfile.lock +182 -0
  29. data/lib/clearance.rb +2 -1
  30. data/lib/clearance/authentication.rb +8 -53
  31. data/lib/clearance/authorization.rb +62 -0
  32. data/lib/clearance/back_door.rb +42 -0
  33. data/lib/clearance/controller.rb +11 -0
  34. data/lib/clearance/password_strategies/bcrypt.rb +13 -1
  35. data/lib/clearance/password_strategies/bcrypt_migration_from_sha1.rb +1 -0
  36. data/lib/clearance/password_strategies/blowfish.rb +5 -1
  37. data/lib/clearance/password_strategies/sha1.rb +5 -1
  38. data/lib/clearance/testing.rb +1 -1
  39. data/lib/clearance/testing/app/controllers/application_controller.rb +1 -1
  40. data/lib/clearance/user.rb +23 -10
  41. data/lib/clearance/version.rb +1 -1
  42. data/lib/generators/clearance/install/install_generator.rb +1 -1
  43. data/lib/generators/clearance/specs/templates/support/integration.rb +2 -0
  44. data/spec/clearance/back_door_spec.rb +39 -0
  45. data/spec/controllers/denies_controller_spec.rb +3 -2
  46. data/spec/controllers/flashes_controller_spec.rb +3 -3
  47. data/spec/controllers/forgeries_controller_spec.rb +3 -2
  48. data/spec/controllers/passwords_controller_spec.rb +14 -0
  49. data/spec/mailers/clearance_mailer_spec.rb +9 -1
  50. data/spec/models/bcrypt_migration_from_sha1_spec.rb +10 -9
  51. data/spec/models/bcrypt_spec.rb +21 -7
  52. data/spec/models/blowfish_spec.rb +1 -6
  53. data/spec/models/password_strategies_spec.rb +9 -3
  54. data/spec/models/sha1_spec.rb +1 -6
  55. data/spec/models/user_spec.rb +19 -9
  56. data/spec/support/clearance.rb +1 -1
  57. data/spec/support/fake_model_with_password_strategy.rb +14 -0
  58. metadata +54 -47
data/Rakefile CHANGED
@@ -9,6 +9,9 @@ require 'cucumber/rake/task'
9
9
  require 'rspec/core/rake_task'
10
10
  require 'appraisal'
11
11
 
12
+ require 'clearance/testing/application'
13
+ Clearance::Testing::Application.load_tasks
14
+
12
15
  task :default do
13
16
  if ENV['BUNDLE_GEMFILE'] =~ /gemfiles/
14
17
  exec 'rake spec cucumber'
@@ -10,7 +10,7 @@ class Clearance::PasswordsController < ApplicationController
10
10
  def create
11
11
  if user = find_user_for_create
12
12
  user.forgot_password!
13
- ::ClearanceMailer.change_password(user).deliver
13
+ deliver_email(user)
14
14
  end
15
15
  render :template => 'passwords/create'
16
16
  end
@@ -38,6 +38,10 @@ class Clearance::PasswordsController < ApplicationController
38
38
 
39
39
  private
40
40
 
41
+ def deliver_email(user)
42
+ ::ClearanceMailer.change_password(user).deliver
43
+ end
44
+
41
45
  def password_reset_params
42
46
  if params.has_key? :user
43
47
  ActiveSupport::Deprecation.warn %{Since locales functionality was added, accessing params[:user] is no longer supported.}
@@ -53,7 +57,7 @@ class Clearance::PasswordsController < ApplicationController
53
57
  end
54
58
 
55
59
  def find_user_for_create
56
- Clearance.configuration.user_model.find_by_email params[:password][:email]
60
+ Clearance.configuration.user_model.find_by_normalized_email params[:password][:email]
57
61
  end
58
62
 
59
63
  def find_user_for_edit
@@ -1,5 +1,5 @@
1
- <%= t('.introduction_paragraph') %>
1
+ <%= t('.opening') %>
2
2
 
3
3
  <%= edit_user_password_url(@user, :token => @user.confirmation_token.html_safe) %>
4
4
 
5
- <%= t('.ending_paragraph') %>
5
+ <%= t('.closing') %>
@@ -1 +1,3 @@
1
- <p><%= t '.description' %></p>
1
+ <div id="clearance" class="password-reset">
2
+ <p><%= t '.description' %></p>
3
+ </div>
@@ -1,16 +1,18 @@
1
- <h2><%= t '.title' %></h2>
1
+ <div id='clearance' class='password-reset'>
2
+ <h2><%= t '.title' %></h2>
2
3
 
3
- <p><%= t '.description' %></p>
4
+ <p><%= t '.description' %></p>
4
5
 
5
- <%= form_for :password_reset,
6
- :url => user_password_path(@user, :token => @user.confirmation_token),
7
- :html => { :method => :put } do |form| %>
8
- <div class='password_field'>
9
- <%= form.label :password %>
10
- <%= form.password_field :password %>
11
- </div>
6
+ <%= form_for :password_reset,
7
+ :url => user_password_path(@user, :token => @user.confirmation_token),
8
+ :html => { :method => :put } do |form| %>
9
+ <div class='password-field'>
10
+ <%= form.label :password %>
11
+ <%= form.password_field :password %>
12
+ </div>
12
13
 
13
- <div class='submit_field'>
14
- <%= form.submit %>
15
- </div>
16
- <% end %>
14
+ <div class='submit-field'>
15
+ <%= form.submit %>
16
+ </div>
17
+ <% end %>
18
+ </div>
@@ -1,14 +1,16 @@
1
- <h2><%= t '.title' %></h2>
1
+ <div id='clearance' class='password-reset'>
2
+ <h2><%= t '.title' %></h2>
2
3
 
3
- <p><%= t '.description' %></p>
4
+ <p><%= t '.description' %></p>
4
5
 
5
- <%= form_for :password, :url => passwords_path do |form| %>
6
- <div class='text_field'>
7
- <%= form.label :email %>
8
- <%= form.text_field :email, :type => 'email' %>
9
- </div>
6
+ <%= form_for :password, :url => passwords_path do |form| %>
7
+ <div class='text-field'>
8
+ <%= form.label :email %>
9
+ <%= form.text_field :email, :type => 'email' %>
10
+ </div>
10
11
 
11
- <div class='submit_field'>
12
- <%= form.submit %>
13
- </div>
14
- <% end %>
12
+ <div class='submit-field'>
13
+ <%= form.submit %>
14
+ </div>
15
+ <% end %>
16
+ </div>
@@ -1,15 +1,20 @@
1
1
  <%= form_for :session, :url => session_path do |form| %>
2
- <div class='text_field'>
2
+ <div class='text-field'>
3
3
  <%= form.label :email %>
4
4
  <%= form.text_field :email, :type => 'email' %>
5
5
  </div>
6
6
 
7
- <div class='text_field'>
7
+ <div class='password-field'>
8
8
  <%= form.label :password %>
9
9
  <%= form.password_field :password %>
10
10
  </div>
11
11
 
12
- <div class='submit_field'>
12
+ <div class='submit-field'>
13
13
  <%= form.submit %>
14
14
  </div>
15
+
16
+ <div class='other-links'>
17
+ <%= link_to t('.sign_up'), sign_up_path %>
18
+ <%= link_to t('.forgot_password'), new_password_path %>
19
+ </div>
15
20
  <% end %>
@@ -1,13 +1,6 @@
1
- <h2><%= t '.title' %></h2>
1
+ <div id='clearance' class='sign-in'>
2
+ <h2><%= t '.title' %></h2>
2
3
 
3
- <%= render :partial => '/sessions/form' %>
4
+ <%= render :partial => '/sessions/form' %>
4
5
 
5
- <ul>
6
- <li>
7
- <%= link_to t('.sign_up'), sign_up_path %>
8
- </li>
9
-
10
- <li>
11
- <%= link_to t('.forgot_password'), new_password_path %>
12
- </li>
13
- </ul>
6
+ </div>
@@ -1,9 +1,9 @@
1
- <div class='text_field'>
1
+ <div class='text-field'>
2
2
  <%= form.label :email %>
3
3
  <%= form.text_field :email, :type => 'email' %>
4
4
  </div>
5
5
 
6
- <div class='password_field'>
6
+ <div class='password-field'>
7
7
  <%= form.label :password %>
8
8
  <%= form.password_field :password %>
9
9
  </div>
@@ -1,6 +1,15 @@
1
- <h2>Sign up</h2>
1
+ <div id='clearance' class='sign-up'>
2
+ <h2>Sign up</h2>
2
3
 
3
- <%= form_for @user do |form| %>
4
- <%= render :partial => '/users/form', :object => form %>
5
- <%= form.submit %>
6
- <% end %>
4
+ <%= form_for @user do |form| %>
5
+ <%= render :partial => '/users/form', :object => form %>
6
+
7
+ <div class='submit-field'>
8
+ <%= form.submit %>
9
+ </div>
10
+
11
+ <div class='other-links'>
12
+ <%= link_to t('.sign_in'), sign_in_path %>
13
+ </div>
14
+ <% end %>
15
+ </div>
@@ -23,16 +23,18 @@ Gem::Specification.new do |s|
23
23
  s.required_ruby_version = Gem::Requirement.new('>= 1.9.2')
24
24
 
25
25
  s.add_dependency 'bcrypt-ruby'
26
+ s.add_dependency 'email_validator'
26
27
  s.add_dependency 'rails', '>= 3.0'
27
28
  s.add_development_dependency 'appraisal', '0.4.1'
28
29
  s.add_development_dependency 'aruba', '0.4.11'
29
- s.add_development_dependency 'bourne', '1.1.2'
30
- s.add_development_dependency 'bundler', '~> 1.2.0'
30
+ s.add_development_dependency 'bourne', '1.3.0'
31
+ s.add_development_dependency 'bundler', '~> 1.1'
31
32
  s.add_development_dependency 'capybara', '1.1.2'
32
33
  s.add_development_dependency 'cucumber-rails', '1.1.1'
33
34
  s.add_development_dependency 'database_cleaner', '0.8.0'
34
35
  s.add_development_dependency 'factory_girl_rails', '3.5.0'
35
- s.add_development_dependency 'rspec-rails', '2.11.0'
36
+ s.add_development_dependency 'psych', '~> 1.3.4'
37
+ s.add_development_dependency 'rspec-rails', '2.12.2'
36
38
  s.add_development_dependency 'shoulda-matchers', '1.2.0'
37
39
  s.add_development_dependency 'sqlite3', '1.3.6'
38
40
  s.add_development_dependency 'timecop', '0.3.5'
@@ -1,42 +1,72 @@
1
1
  en:
2
+ clearance_mailer:
3
+ change_password:
4
+ opening:
5
+ 'Someone, hopefully you, requested we send you a link to change your
6
+ password:'
7
+ closing:
8
+ "If you didn't request this, ignore this email. Your password has not
9
+ been changed."
2
10
  flashes:
3
- failure_when_forbidden: Please double check the URL or try submitting the form again.
4
- failure_after_update: Password can't be blank.
5
- failure_after_create: Bad email or password. Are you trying to register a new account? <a href="%{sign_up_path}">Sign up</a>.
11
+ failure_when_forbidden:
12
+ 'Please double check the URL or try submitting the form again.'
13
+ failure_after_update:
14
+ "Password can't be blank."
15
+ failure_after_create:
16
+ 'Bad email or password. Are you trying to register a new account?
17
+ <a href="%{sign_up_path}">Sign up</a>.'
6
18
  helpers:
7
19
  submit:
8
20
  password:
9
- submit: Reset password
21
+ submit:
22
+ 'Reset password'
10
23
  password_reset:
11
- submit: Save this password
24
+ submit:
25
+ 'Save this password'
12
26
  session:
13
- submit: Sign in
27
+ submit:
28
+ 'Sign in'
14
29
  user:
15
- create: Sign up
30
+ create:
31
+ 'Sign up'
16
32
  label:
17
33
  password:
18
- email: Email address
34
+ email:
35
+ 'Email address'
19
36
  password_reset:
20
- password: Choose password
37
+ password:
38
+ 'Choose password'
21
39
  layouts:
22
40
  application:
23
- sign_in: Sign in
24
- sign_out: Sign out
41
+ sign_in:
42
+ 'Sign in'
43
+ sign_out:
44
+ 'Sign out'
25
45
  passwords:
26
46
  create:
27
- description: You will receive an email within the next few minutes. It contains instructions for changing your password.
47
+ description:
48
+ 'You will receive an email within the next few minutes.
49
+ It contains instructions for changing your password.'
28
50
  edit:
29
- title: Change your password
30
- description: Your password has been reset. Choose a new password below.
51
+ description:
52
+ 'Your password has been reset. Choose a new password below.'
53
+ title:
54
+ 'Change your password'
31
55
  new:
32
- title: Reset your password
33
- description: We will email you a link to reset your password.
56
+ description:
57
+ 'To be emailed a link to reset your password, please enter your email
58
+ address.'
59
+ title:
60
+ 'Reset your password'
34
61
  sessions:
35
62
  new:
36
- title: Sign in
37
- sign_up: Sign up
38
- forgot_password: Forgot password?
39
- clearance_mailer:
40
- change_password:
41
- beginning_paragraph: 'Someone, hopefully you, requested we send you a link to change your password:'
42
- ending_paragraph: If you didn't request this, ignore this email. Your password hasn't been changed.
63
+ forgot_password:
64
+ 'Forgot password?'
65
+ sign_up:
66
+ 'Sign up'
67
+ title:
68
+ 'Sign in'
69
+ users:
70
+ new:
71
+ sign_in:
72
+ 'Sign in'
@@ -15,7 +15,7 @@ Rails.application.routes.draw do
15
15
  :only => [:create, :edit, :update]
16
16
  end
17
17
 
18
- match 'sign_in' => 'clearance/sessions#new', :as => 'sign_in'
19
- match 'sign_out' => 'clearance/sessions#destroy', :as => 'sign_out', :via => :delete
20
- match 'sign_up' => 'clearance/users#new', :as => 'sign_up'
18
+ get '/sign_in' => 'clearance/sessions#new', :as => 'sign_in'
19
+ delete '/sign_out' => 'clearance/sessions#destroy', :as => 'sign_out'
20
+ get '/sign_up' => 'clearance/users#new', :as => 'sign_up'
21
21
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rails", "3.0.17"
5
+ gem "rails", "3.0.20"
6
6
 
7
7
  gemspec :path=>"../"
@@ -1,20 +1,21 @@
1
1
  PATH
2
- remote: /Users/harlow/Sites/clearance
2
+ remote: ../
3
3
  specs:
4
- clearance (1.0.0.rc3)
4
+ clearance (1.0.0.rc5)
5
5
  bcrypt-ruby
6
+ email_validator
6
7
  rails (>= 3.0)
7
8
 
8
9
  GEM
9
10
  remote: http://rubygems.org/
10
11
  specs:
11
12
  abstract (1.0.0)
12
- actionmailer (3.0.17)
13
- actionpack (= 3.0.17)
13
+ actionmailer (3.0.20)
14
+ actionpack (= 3.0.20)
14
15
  mail (~> 2.2.19)
15
- actionpack (3.0.17)
16
- activemodel (= 3.0.17)
17
- activesupport (= 3.0.17)
16
+ actionpack (3.0.20)
17
+ activemodel (= 3.0.20)
18
+ activesupport (= 3.0.20)
18
19
  builder (~> 2.1.2)
19
20
  erubis (~> 2.6.6)
20
21
  i18n (~> 0.5.0)
@@ -22,20 +23,19 @@ GEM
22
23
  rack-mount (~> 0.6.14)
23
24
  rack-test (~> 0.5.7)
24
25
  tzinfo (~> 0.3.23)
25
- activemodel (3.0.17)
26
- activesupport (= 3.0.17)
26
+ activemodel (3.0.20)
27
+ activesupport (= 3.0.20)
27
28
  builder (~> 2.1.2)
28
29
  i18n (~> 0.5.0)
29
- activerecord (3.0.17)
30
- activemodel (= 3.0.17)
31
- activesupport (= 3.0.17)
30
+ activerecord (3.0.20)
31
+ activemodel (= 3.0.20)
32
+ activesupport (= 3.0.20)
32
33
  arel (~> 2.0.10)
33
34
  tzinfo (~> 0.3.23)
34
- activeresource (3.0.17)
35
- activemodel (= 3.0.17)
36
- activesupport (= 3.0.17)
37
- activesupport (3.0.17)
38
- addressable (2.3.2)
35
+ activeresource (3.0.20)
36
+ activemodel (= 3.0.20)
37
+ activesupport (= 3.0.20)
38
+ activesupport (3.0.20)
39
39
  appraisal (0.4.1)
40
40
  bundler
41
41
  rake
@@ -46,8 +46,8 @@ GEM
46
46
  ffi (>= 1.0.11)
47
47
  rspec (>= 2.7.0)
48
48
  bcrypt-ruby (3.0.1)
49
- bourne (1.1.2)
50
- mocha (= 0.10.5)
49
+ bourne (1.3.0)
50
+ mocha (= 0.13.0)
51
51
  builder (2.1.2)
52
52
  capybara (1.1.2)
53
53
  mime-types (>= 1.16)
@@ -56,7 +56,7 @@ GEM
56
56
  rack-test (>= 0.5.4)
57
57
  selenium-webdriver (~> 2.0)
58
58
  xpath (~> 0.1.4)
59
- childprocess (0.3.5)
59
+ childprocess (0.3.7)
60
60
  ffi (~> 1.0, >= 1.0.6)
61
61
  cucumber (1.2.1)
62
62
  builder (>= 2.1.2)
@@ -69,6 +69,8 @@ GEM
69
69
  nokogiri (>= 1.5.0)
70
70
  database_cleaner (0.8.0)
71
71
  diff-lcs (1.1.3)
72
+ email_validator (1.3.0)
73
+ activemodel
72
74
  erubis (2.6.6)
73
75
  abstract (>= 1.0.0)
74
76
  factory_girl (3.5.0)
@@ -76,13 +78,11 @@ GEM
76
78
  factory_girl_rails (3.5.0)
77
79
  factory_girl (~> 3.5.0)
78
80
  railties (>= 3.0.0)
79
- ffi (1.1.5)
80
- gherkin (2.11.2)
81
+ ffi (1.3.1)
82
+ gherkin (2.11.5)
81
83
  json (>= 1.4.6)
82
84
  i18n (0.5.0)
83
- json (1.7.5)
84
- libwebsocket (0.1.5)
85
- addressable
85
+ json (1.7.6)
86
86
  mail (2.2.19)
87
87
  activesupport (>= 2.3.6)
88
88
  i18n (>= 0.4.0)
@@ -90,61 +90,65 @@ GEM
90
90
  treetop (~> 1.4.8)
91
91
  metaclass (0.0.1)
92
92
  mime-types (1.19)
93
- mocha (0.10.5)
93
+ mocha (0.13.0)
94
94
  metaclass (~> 0.0.1)
95
- multi_json (1.3.6)
96
- nokogiri (1.5.5)
95
+ multi_json (1.5.0)
96
+ nokogiri (1.5.6)
97
97
  polyglot (0.3.3)
98
- rack (1.2.5)
98
+ psych (1.3.4)
99
+ rack (1.2.7)
99
100
  rack-mount (0.6.14)
100
101
  rack (>= 1.0.0)
101
102
  rack-test (0.5.7)
102
103
  rack (>= 1.0)
103
- rails (3.0.17)
104
- actionmailer (= 3.0.17)
105
- actionpack (= 3.0.17)
106
- activerecord (= 3.0.17)
107
- activeresource (= 3.0.17)
108
- activesupport (= 3.0.17)
104
+ rails (3.0.20)
105
+ actionmailer (= 3.0.20)
106
+ actionpack (= 3.0.20)
107
+ activerecord (= 3.0.20)
108
+ activeresource (= 3.0.20)
109
+ activesupport (= 3.0.20)
109
110
  bundler (~> 1.0)
110
- railties (= 3.0.17)
111
- railties (3.0.17)
112
- actionpack (= 3.0.17)
113
- activesupport (= 3.0.17)
111
+ railties (= 3.0.20)
112
+ railties (3.0.20)
113
+ actionpack (= 3.0.20)
114
+ activesupport (= 3.0.20)
114
115
  rake (>= 0.8.7)
115
116
  rdoc (~> 3.4)
116
117
  thor (~> 0.14.4)
117
- rake (0.9.2.2)
118
+ rake (10.0.3)
118
119
  rdoc (3.12)
119
120
  json (~> 1.4)
120
- rspec (2.11.0)
121
- rspec-core (~> 2.11.0)
122
- rspec-expectations (~> 2.11.0)
123
- rspec-mocks (~> 2.11.0)
124
- rspec-core (2.11.1)
125
- rspec-expectations (2.11.3)
121
+ rspec (2.12.0)
122
+ rspec-core (~> 2.12.0)
123
+ rspec-expectations (~> 2.12.0)
124
+ rspec-mocks (~> 2.12.0)
125
+ rspec-core (2.12.2)
126
+ rspec-expectations (2.12.1)
126
127
  diff-lcs (~> 1.1.3)
127
- rspec-mocks (2.11.2)
128
- rspec-rails (2.11.0)
128
+ rspec-mocks (2.12.2)
129
+ rspec-rails (2.12.2)
129
130
  actionpack (>= 3.0)
130
131
  activesupport (>= 3.0)
131
132
  railties (>= 3.0)
132
- rspec (~> 2.11.0)
133
+ rspec-core (~> 2.12.0)
134
+ rspec-expectations (~> 2.12.0)
135
+ rspec-mocks (~> 2.12.0)
133
136
  rubyzip (0.9.9)
134
- selenium-webdriver (2.25.0)
137
+ selenium-webdriver (2.29.0)
135
138
  childprocess (>= 0.2.5)
136
- libwebsocket (~> 0.1.3)
137
139
  multi_json (~> 1.0)
138
140
  rubyzip
141
+ websocket (~> 1.0.4)
139
142
  shoulda-matchers (1.2.0)
140
143
  activesupport (>= 3.0.0)
141
144
  sqlite3 (1.3.6)
142
145
  thor (0.14.6)
143
146
  timecop (0.3.5)
144
- treetop (1.4.10)
147
+ treetop (1.4.12)
145
148
  polyglot
146
149
  polyglot (>= 0.3.1)
147
- tzinfo (0.3.33)
150
+ tzinfo (0.3.35)
151
+ websocket (1.0.7)
148
152
  xpath (0.1.4)
149
153
  nokogiri (~> 1.3)
150
154
 
@@ -154,15 +158,16 @@ PLATFORMS
154
158
  DEPENDENCIES
155
159
  appraisal (= 0.4.1)
156
160
  aruba (= 0.4.11)
157
- bourne (= 1.1.2)
158
- bundler (~> 1.2.0)
161
+ bourne (= 1.3.0)
162
+ bundler (~> 1.1)
159
163
  capybara (= 1.1.2)
160
164
  clearance!
161
165
  cucumber-rails (= 1.1.1)
162
166
  database_cleaner (= 0.8.0)
163
167
  factory_girl_rails (= 3.5.0)
164
- rails (= 3.0.17)
165
- rspec-rails (= 2.11.0)
168
+ psych (~> 1.3.4)
169
+ rails (= 3.0.20)
170
+ rspec-rails (= 2.12.2)
166
171
  shoulda-matchers (= 1.2.0)
167
172
  sqlite3 (= 1.3.6)
168
173
  timecop (= 0.3.5)