clearance 0.16.3 → 1.0.0.rc1

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 (85) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +0 -2
  3. data/Appraisals +2 -2
  4. data/CONTRIBUTING.md +10 -19
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +81 -82
  7. data/NEWS.md +17 -4
  8. data/README.md +176 -113
  9. data/app/controllers/clearance/passwords_controller.rb +44 -31
  10. data/app/controllers/clearance/sessions_controller.rb +11 -10
  11. data/app/controllers/clearance/users_controller.rb +8 -12
  12. data/app/mailers/clearance_mailer.rb +4 -5
  13. data/app/views/clearance_mailer/change_password.html.erb +2 -4
  14. data/app/views/layouts/application.html.erb +7 -5
  15. data/app/views/passwords/edit.html.erb +8 -7
  16. data/app/views/passwords/new.html.erb +6 -5
  17. data/app/views/sessions/_form.html.erb +7 -5
  18. data/app/views/sessions/new.html.erb +3 -2
  19. data/app/views/users/_form.html.erb +4 -3
  20. data/clearance.gemspec +29 -27
  21. data/config/routes.rb +10 -13
  22. data/db/migrate/20110111224543_create_clearance_users.rb +18 -0
  23. data/db/schema.rb +4 -5
  24. data/features/engine/visitor_resets_password.feature +0 -7
  25. data/features/engine/visitor_signs_in.feature +7 -0
  26. data/features/engine/visitor_signs_up.feature +2 -2
  27. data/features/integration.feature +0 -1
  28. data/features/integration_with_test_unit.feature +43 -0
  29. data/features/step_definitions/configuration_steps.rb +8 -15
  30. data/features/step_definitions/engine/clearance_steps.rb +38 -38
  31. data/features/support/clearance.rb +1 -1
  32. data/features/support/env.rb +4 -21
  33. data/gemfiles/{3.0.12.gemfile → 3.0.15.gemfile} +1 -1
  34. data/gemfiles/{3.0.12.gemfile.lock → 3.0.15.gemfile.lock} +75 -76
  35. data/gemfiles/{3.2.3.gemfile → 3.1.6.gemfile} +1 -1
  36. data/gemfiles/{3.1.4.gemfile.lock → 3.1.6.gemfile.lock} +79 -80
  37. data/gemfiles/{3.1.4.gemfile → 3.2.6.gemfile} +1 -1
  38. data/gemfiles/{3.2.3.gemfile.lock → 3.2.6.gemfile.lock} +80 -81
  39. data/lib/clearance.rb +1 -0
  40. data/lib/clearance/authentication.rb +37 -69
  41. data/lib/clearance/configuration.rb +3 -18
  42. data/lib/clearance/constraints.rb +2 -0
  43. data/lib/clearance/constraints/signed_in.rb +28 -0
  44. data/lib/clearance/constraints/signed_out.rb +9 -0
  45. data/lib/clearance/engine.rb +4 -4
  46. data/lib/clearance/password_strategies.rb +5 -1
  47. data/lib/clearance/password_strategies/bcrypt.rb +27 -0
  48. data/lib/clearance/password_strategies/bcrypt_migration_from_sha1.rb +52 -0
  49. data/lib/clearance/password_strategies/blowfish.rb +11 -15
  50. data/lib/clearance/password_strategies/fake.rb +23 -0
  51. data/lib/clearance/password_strategies/sha1.rb +15 -21
  52. data/lib/clearance/session.rb +28 -20
  53. data/lib/clearance/testing.rb +8 -3
  54. data/lib/clearance/testing/assertion_error.rb +2 -7
  55. data/lib/clearance/testing/deny_access_matcher.rb +27 -32
  56. data/lib/clearance/testing/helpers.rb +7 -8
  57. data/lib/clearance/user.rb +26 -92
  58. data/lib/clearance/version.rb +1 -1
  59. data/lib/generators/clearance/install/templates/db/migrate/upgrade_clearance_to_diesel.rb +24 -26
  60. data/spec/clearance/constraints/signed_in_spec.rb +51 -0
  61. data/spec/clearance/constraints/signed_out_spec.rb +15 -0
  62. data/spec/clearance/rack_session_spec.rb +8 -7
  63. data/spec/clearance/session_spec.rb +28 -27
  64. data/spec/configuration_spec.rb +7 -6
  65. data/spec/controllers/denies_controller_spec.rb +11 -10
  66. data/spec/controllers/flashes_controller_spec.rb +5 -5
  67. data/spec/controllers/forgeries_controller_spec.rb +9 -9
  68. data/spec/controllers/passwords_controller_spec.rb +42 -55
  69. data/spec/controllers/sessions_controller_spec.rb +26 -33
  70. data/spec/controllers/users_controller_spec.rb +16 -14
  71. data/spec/factories.rb +1 -3
  72. data/spec/mailers/clearance_mailer_spec.rb +4 -4
  73. data/spec/models/bcrypt_migration_from_sha1_spec.rb +71 -0
  74. data/spec/models/bcrypt_spec.rb +40 -0
  75. data/spec/models/blowfish_spec.rb +14 -13
  76. data/spec/models/{clearance_user_spec.rb → password_strategies_spec.rb} +5 -5
  77. data/spec/models/sha1_spec.rb +18 -13
  78. data/spec/models/user_spec.rb +58 -73
  79. data/spec/spec_helper.rb +5 -6
  80. data/spec/support/clearance.rb +0 -4
  81. data/spec/support/cookies.rb +25 -27
  82. data/spec/support/request_with_remember_token.rb +19 -0
  83. metadata +95 -90
  84. data/db/migrate/20110111224543_create_diesel_clearance_users.rb +0 -19
  85. data/init.rb +0 -1
@@ -0,0 +1,18 @@
1
+ class CreateClearanceUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |t|
4
+ t.timestamps :null => false
5
+ t.string :email, :null => false
6
+ t.string :encrypted_password, :limit => 128, :null => false
7
+ t.string :confirmation_token, :limit => 128
8
+ t.string :remember_token, :limit => 128, :null => false
9
+ end
10
+
11
+ add_index :users, :email
12
+ add_index :users, :remember_token
13
+ end
14
+
15
+ def self.down
16
+ drop_table :users
17
+ end
18
+ end
data/db/schema.rb CHANGED
@@ -14,13 +14,12 @@
14
14
  ActiveRecord::Schema.define(:version => 20110111224543) do
15
15
 
16
16
  create_table "users", :force => true do |t|
17
- t.string "email"
18
- t.string "encrypted_password", :limit => 128
19
- t.string "salt", :limit => 128
20
- t.string "confirmation_token", :limit => 128
21
- t.string "remember_token", :limit => 128
22
17
  t.datetime "created_at", :null => false
23
18
  t.datetime "updated_at", :null => false
19
+ t.string "email", :null => false
20
+ t.string "encrypted_password", :limit => 128, :null => false
21
+ t.string "confirmation_token", :limit => 128
22
+ t.string "remember_token", :limit => 128, :null => false
24
23
  end
25
24
 
26
25
  add_index "users", ["email"], :name => "index_users_on_email"
@@ -32,10 +32,3 @@ Feature: Password reset
32
32
  When I sign in with "email@example.com" and "newpassword"
33
33
  Then I should be signed in
34
34
 
35
- Scenario: User who was created before Clearance was installed creates password for first time
36
- Given a user "email@example.com" exists without a salt, remember token, or password
37
- When I reset the password for "email@example.com"
38
- When I follow the password reset link sent to "email@example.com"
39
- And I update my password with "newpassword"
40
- Then I should be signed in
41
-
@@ -24,3 +24,10 @@ Feature: Sign in
24
24
  Given I am signed up as "email@example.com"
25
25
  When I sign in as "Email@example.com"
26
26
  Then I should be signed in
27
+
28
+ Scenario: Visitor enters wrong password and goes to sign up
29
+ Given I am signed up as "email@example.com"
30
+ When I sign in as "email@example.com" and "badpassword"
31
+ Then I am told email or password is bad
32
+ When I follow the sign up link in the flash
33
+ Then I should be on the sign up page
@@ -6,11 +6,11 @@ Feature: Sign up
6
6
 
7
7
  Scenario: Visitor signs up with invalid email
8
8
  When I sign up with "invalidemail" and "password"
9
- Then I am told to enter a valid email address
9
+ Then I should be signed out
10
10
 
11
11
  Scenario: Visitor signs up with blank password
12
12
  When I sign up with "email@example.com" and ""
13
- Then I am told to enter a password
13
+ Then I should be signed out
14
14
 
15
15
  Scenario: Visitor signs up with valid data
16
16
  When I sign up with "email@example.com" and "password"
@@ -15,7 +15,6 @@ Feature: integrate with application
15
15
  And I add the "clearance" gem from this project
16
16
  And I run `bundle install --local`
17
17
  And I successfully run `bundle exec rails generate cucumber:install`
18
- And I disable Capybara Javascript emulation
19
18
  And I successfully run `bundle exec rails generate clearance:features`
20
19
 
21
20
  Scenario: generate a Rails app, run the generators, and run the tests
@@ -0,0 +1,43 @@
1
+ Feature: integrate with test unit
2
+
3
+ Background:
4
+ When I successfully run `bundle exec rails new testapp`
5
+ And I cd to "testapp"
6
+ And I remove the file "public/index.html"
7
+ And I remove the file "app/views/layouts/application.html.erb"
8
+ And I configure ActionMailer to use "localhost" as a host
9
+ And I configure a root route
10
+ And I add the "factory_girl_rails" gem
11
+ And I run `bundle install --local`
12
+
13
+ Scenario: generate a Rails app, run the generators, and run the tests
14
+ When I successfully run `bundle exec rails generate clearance:install`
15
+ And I successfully run `bundle exec rake db:migrate --trace`
16
+ And I successfully run `bundle exec rails generate controller posts index`
17
+ And I add the "cucumber-rails" gem
18
+ And I write to "test/test_helper.rb" with:
19
+ """
20
+ ENV['RAILS_ENV'] = 'test'
21
+ require File.expand_path('../../config/environment', __FILE__)
22
+ require 'rails/test_help'
23
+
24
+ class ActiveSupport::TestCase
25
+ fixtures :all
26
+ end
27
+
28
+ require 'clearance/testing'
29
+ """
30
+ And I write to "test/functionals/posts_controller_test.rb" with:
31
+ """
32
+ require 'test_helper'
33
+
34
+ class PostsControllerTest < ActionController::TestCase
35
+ test 'should get index' do
36
+ sign_in
37
+ get :index
38
+ assert_response :success
39
+ end
40
+ end
41
+ """
42
+ And I successfully run `bundle exec rake --trace`
43
+ Then the output should contain "1 tests, 1 assertions, 0 failures"
@@ -1,6 +1,7 @@
1
1
  When /^I configure ActionMailer to use "([^"]+)" as a host$/ do |host|
2
2
  mailer_config = "config.action_mailer.default_url_options = { :host => '#{host}' }"
3
- path = "config/application.rb"
3
+ path = 'config/application.rb'
4
+
4
5
  in_current_dir do
5
6
  contents = IO.read(path)
6
7
  contents.sub!(/(class .* < Rails::Application)/, "\\1\n#{mailer_config}")
@@ -10,31 +11,23 @@ end
10
11
 
11
12
  When /^I configure a root route$/ do
12
13
  route = "root :to => 'home#show'"
13
- path = "config/routes.rb"
14
+ path = 'config/routes.rb'
15
+
14
16
  in_current_dir do
15
17
  contents = IO.read(path)
16
18
  contents.sub!(/(\.routes\.draw do)/, "\\1\n#{route}\n")
17
- File.open(path, "w") { |file| file.write(contents) }
19
+ File.open(path, 'w') { |file| file.write(contents) }
18
20
  end
19
- write_file("app/controllers/home_controller.rb", <<-CONTROLLER)
21
+
22
+ write_file('app/controllers/home_controller.rb', <<-CONTROLLER)
20
23
  class HomeController < ApplicationController
21
24
  def show
22
- render :text => "", :layout => "application"
25
+ render :text => '', :layout => 'application'
23
26
  end
24
27
  end
25
28
  CONTROLLER
26
29
  end
27
30
 
28
- When /^I disable Capybara Javascript emulation$/ do
29
- in_current_dir do
30
- path = "features/support/env.rb"
31
- contents = IO.read(path)
32
- contents.sub!(%{require 'cucumber/rails/capybara_javascript_emulation'},
33
- "# Disabled")
34
- File.open(path, "w") { |file| file.write(contents) }
35
- end
36
- end
37
-
38
31
  When /^I copy the locked Gemfile from this project$/ do
39
32
  in_current_dir do
40
33
  FileUtils.cp(File.join(PROJECT_ROOT, 'Gemfile.lock'), 'Gemfile.lock')
@@ -3,13 +3,7 @@
3
3
  require 'factory_girl_rails'
4
4
 
5
5
  Given /^(?:I am|I have|I) signed up (?:as|with) "(.*)"$/ do |email|
6
- FactoryGirl.create(:user, :email => email)
7
- end
8
-
9
- Given /^a user "([^"]*)" exists without a salt, remember token, or password$/ do |email|
10
- user = FactoryGirl.create(:user, :email => email)
11
- sql = "update users set salt = NULL, encrypted_password = NULL, remember_token = NULL where id = #{user.id}"
12
- ActiveRecord::Base.connection.update(sql)
6
+ FactoryGirl.create :user, :email => email
13
7
  end
14
8
 
15
9
  # Sign up
@@ -17,10 +11,9 @@ end
17
11
  When /^I sign up (?:with|as) "(.*)" and "(.*)"$/ do |email, password|
18
12
  visit sign_up_path
19
13
  page.should have_css("input[type='email']")
20
-
21
- fill_in "Email", :with => email
22
- fill_in "Password", :with => password
23
- click_button "Sign up"
14
+ fill_in 'Email', :with => email
15
+ fill_in 'Password', :with => password
16
+ click_button 'Sign up'
24
17
  end
25
18
 
26
19
  # Sign in
@@ -28,8 +21,8 @@ end
28
21
  Given /^I sign in$/ do
29
22
  email = FactoryGirl.generate(:email)
30
23
  steps %{
31
- I have signed up with "#{email}"
32
- I sign in with "#{email}"
24
+ Given I have signed up with "#{email}"
25
+ And I sign in with "#{email}"
33
26
  }
34
27
  end
35
28
 
@@ -40,17 +33,16 @@ end
40
33
  When /^I sign in (?:with|as) "([^"]*)" and "([^"]*)"$/ do |email, password|
41
34
  visit sign_in_path
42
35
  page.should have_css("input[type='email']")
43
-
44
- fill_in "Email", :with => email
45
- fill_in "Password", :with => password
46
- click_button "Sign in"
36
+ fill_in 'Email', :with => email
37
+ fill_in 'Password', :with => password
38
+ click_button 'Sign in'
47
39
  end
48
40
 
49
41
  # Sign out
50
42
 
51
- When "I sign out" do
52
- visit "/"
53
- click_link "Sign out"
43
+ When 'I sign out' do
44
+ visit '/'
45
+ click_link 'Sign out'
54
46
  end
55
47
 
56
48
  # Reset password
@@ -58,22 +50,22 @@ end
58
50
  When /^I reset the password for "(.*)"$/ do |email|
59
51
  visit new_password_path
60
52
  page.should have_css("input[type='email']")
61
-
62
- fill_in "Email address", :with => email
63
- click_button "Reset password"
53
+ fill_in 'Email address', :with => email
54
+ click_button 'Reset password'
64
55
  end
65
56
 
66
57
  Then /^instructions for changing my password are emailed to "(.*)"$/ do |email|
67
- page.should have_content("instructions for changing your password")
68
-
58
+ page.should have_content('instructions for changing your password')
69
59
  user = User.find_by_email!(email)
70
60
  assert !user.confirmation_token.blank?
71
61
  assert !ActionMailer::Base.deliveries.empty?
62
+
72
63
  result = ActionMailer::Base.deliveries.any? do |email|
73
- email.to == [user.email] &&
64
+ email.to == [user.email] &&
74
65
  email.subject =~ /password/i &&
75
- email.body =~ /#{user.confirmation_token}/
66
+ email.body =~ /#{user.confirmation_token}/
76
67
  end
68
+
77
69
  assert result
78
70
  end
79
71
 
@@ -89,22 +81,30 @@ When /^I change the password of "(.*)" without token$/ do |email|
89
81
  end
90
82
 
91
83
  When /^I update my password with "(.*)"$/ do |password|
92
- fill_in "Choose password", :with => password
93
- click_button "Save this password"
84
+ fill_in 'Choose password', :with => password
85
+ click_button 'Save this password'
86
+ end
87
+
88
+ # Navigation
89
+
90
+ Then /^I should be on the sign up page$/ do
91
+ page.current_path.should == sign_up_path
94
92
  end
95
93
 
96
94
  # Flashes
97
95
 
98
96
  Then /^I am told email or password is bad$/ do
99
- page.should have_content("Bad email or password")
97
+ page.should have_content('Bad email or password. Are you trying to register a new account? Sign up.')
100
98
  end
101
99
 
102
- Then /^I am told email is unknown$/ do
103
- page.should have_content("Unknown email")
100
+ When /^I follow the sign up link in the flash$/ do
101
+ within '#flash' do
102
+ click_link 'Sign up'
103
+ end
104
104
  end
105
105
 
106
- Then /^I am told to enter a valid email address$/ do
107
- page.should have_content("Must be a valid email address")
106
+ Then /^I am told email is unknown$/ do
107
+ page.should have_content('Unknown email')
108
108
  end
109
109
 
110
110
  Then /^I am told to enter a password$/ do
@@ -114,11 +114,11 @@ end
114
114
  # Verification
115
115
 
116
116
  Then /^I should be signed in$/ do
117
- visit "/"
118
- page.should have_content "Sign out"
117
+ visit '/'
118
+ page.should have_content 'Sign out'
119
119
  end
120
120
 
121
121
  Then /^I should be signed out$/ do
122
- visit "/"
123
- page.should have_content "Sign in"
122
+ visit '/'
123
+ page.should have_content 'Sign in'
124
124
  end
@@ -7,7 +7,7 @@ class ApplicationController < ActionController::Base
7
7
  include Clearance::Authentication
8
8
 
9
9
  def show
10
- render :text => "", :layout => 'application'
10
+ render :text => '', :layout => 'application'
11
11
  end
12
12
  end
13
13
 
@@ -4,10 +4,10 @@
4
4
  # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
5
  # files.
6
6
 
7
- ENV["RAILS_ENV"] ||= "test"
7
+ ENV['RAILS_ENV'] ||= 'test'
8
8
 
9
- PROJECT_ROOT = File.expand_path("../../..", __FILE__)
10
- $LOAD_PATH << File.join(PROJECT_ROOT, "lib")
9
+ PROJECT_ROOT = File.expand_path('../../..', __FILE__)
10
+ $LOAD_PATH << File.join(PROJECT_ROOT, 'lib')
11
11
 
12
12
  require 'rails/all'
13
13
 
@@ -29,27 +29,10 @@ require 'cucumber/rails/capybara'
29
29
  Capybara.default_selector = :css
30
30
  Capybara.save_and_open_page_path = 'tmp'
31
31
 
32
- # By default, any exception happening in your Rails application will bubble up
33
- # to Cucumber so that your scenario will fail. This is a different from how
34
- # your application behaves in the production environment, where an error page will
35
- # be rendered instead.
36
- #
37
- # Sometimes we want to override this default behaviour and allow Rails to rescue
38
- # exceptions and display an error page (just like when the app is running in production).
39
- # Typical scenarios where you want to do this is when you test your error pages.
40
- # There are two ways to allow Rails to rescue exceptions:
41
- #
42
- # 1) Tag your scenario (or feature) with @allow-rescue
43
- #
44
- # 2) Set the value below to true. Beware that doing this globally is not
45
- # recommended as it will mask a lot of errors for you!
46
- #
47
32
  ActionController::Base.allow_rescue = false
48
33
 
49
- # Remove/comment out the lines below if your app doesn't have a database.
50
- # For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
51
34
  begin
52
35
  DatabaseCleaner.strategy = :transaction
53
36
  rescue NameError
54
- raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
37
+ raise 'You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it.'
55
38
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rails", "3.0.12"
5
+ gem "rails", "3.0.15"
6
6
 
7
7
  gemspec :path=>"../"
@@ -1,20 +1,21 @@
1
1
  PATH
2
- remote: /home/mike/clearance
2
+ remote: /home/mike/thoughtbot/clearance
3
3
  specs:
4
- clearance (0.16.2)
5
- diesel (~> 0.1.5)
4
+ clearance (1.0.0.rc1)
5
+ bcrypt-ruby
6
+ diesel (= 0.1.5)
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.12)
13
- actionpack (= 3.0.12)
13
+ actionmailer (3.0.15)
14
+ actionpack (= 3.0.15)
14
15
  mail (~> 2.2.19)
15
- actionpack (3.0.12)
16
- activemodel (= 3.0.12)
17
- activesupport (= 3.0.12)
16
+ actionpack (3.0.15)
17
+ activemodel (= 3.0.15)
18
+ activesupport (= 3.0.15)
18
19
  builder (~> 2.1.2)
19
20
  erubis (~> 2.6.6)
20
21
  i18n (~> 0.5.0)
@@ -22,20 +23,20 @@ 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.12)
26
- activesupport (= 3.0.12)
26
+ activemodel (3.0.15)
27
+ activesupport (= 3.0.15)
27
28
  builder (~> 2.1.2)
28
29
  i18n (~> 0.5.0)
29
- activerecord (3.0.12)
30
- activemodel (= 3.0.12)
31
- activesupport (= 3.0.12)
30
+ activerecord (3.0.15)
31
+ activemodel (= 3.0.15)
32
+ activesupport (= 3.0.15)
32
33
  arel (~> 2.0.10)
33
34
  tzinfo (~> 0.3.23)
34
- activeresource (3.0.12)
35
- activemodel (= 3.0.12)
36
- activesupport (= 3.0.12)
37
- activesupport (3.0.12)
38
- addressable (2.2.7)
35
+ activeresource (3.0.15)
36
+ activemodel (= 3.0.15)
37
+ activesupport (= 3.0.15)
38
+ activesupport (3.0.15)
39
+ addressable (2.3.1)
39
40
  appraisal (0.4.1)
40
41
  bundler
41
42
  rake
@@ -45,6 +46,7 @@ GEM
45
46
  cucumber (>= 1.1.1)
46
47
  ffi (>= 1.0.11)
47
48
  rspec (>= 2.7.0)
49
+ bcrypt-ruby (3.0.1)
48
50
  bourne (1.1.2)
49
51
  mocha (= 0.10.5)
50
52
  builder (2.1.2)
@@ -55,99 +57,97 @@ GEM
55
57
  rack-test (>= 0.5.4)
56
58
  selenium-webdriver (~> 2.0)
57
59
  xpath (~> 0.1.4)
58
- childprocess (0.3.1)
59
- ffi (~> 1.0.6)
60
- cucumber (1.1.9)
60
+ childprocess (0.3.4)
61
+ ffi (~> 1.0, >= 1.0.6)
62
+ cucumber (1.2.1)
61
63
  builder (>= 2.1.2)
62
- diff-lcs (>= 1.1.2)
63
- gherkin (~> 2.9.0)
64
+ diff-lcs (>= 1.1.3)
65
+ gherkin (~> 2.11.0)
64
66
  json (>= 1.4.6)
65
- term-ansicolor (>= 1.0.6)
66
67
  cucumber-rails (1.1.1)
67
68
  capybara (>= 1.1.1)
68
69
  cucumber (>= 1.1.0)
69
70
  nokogiri (>= 1.5.0)
70
- database_cleaner (0.7.2)
71
+ database_cleaner (0.8.0)
71
72
  diesel (0.1.5)
72
73
  railties
73
74
  diff-lcs (1.1.3)
74
75
  erubis (2.6.6)
75
76
  abstract (>= 1.0.0)
76
- factory_girl (3.1.1)
77
+ factory_girl (3.5.0)
77
78
  activesupport (>= 3.0.0)
78
- factory_girl_rails (3.1.0)
79
- factory_girl (~> 3.1.0)
79
+ factory_girl_rails (3.5.0)
80
+ factory_girl (~> 3.5.0)
80
81
  railties (>= 3.0.0)
81
- ffi (1.0.11)
82
- gherkin (2.9.3)
82
+ ffi (1.1.0)
83
+ gherkin (2.11.1)
83
84
  json (>= 1.4.6)
84
85
  i18n (0.5.0)
85
- json (1.6.6)
86
- launchy (2.1.0)
87
- addressable (~> 2.2.6)
86
+ json (1.7.3)
87
+ libwebsocket (0.1.4)
88
+ addressable
88
89
  mail (2.2.19)
89
90
  activesupport (>= 2.3.6)
90
91
  i18n (>= 0.4.0)
91
92
  mime-types (~> 1.16)
92
93
  treetop (~> 1.4.8)
93
94
  metaclass (0.0.1)
94
- mime-types (1.18)
95
+ mime-types (1.19)
95
96
  mocha (0.10.5)
96
97
  metaclass (~> 0.0.1)
97
- multi_json (1.2.0)
98
- nokogiri (1.5.2)
98
+ multi_json (1.3.6)
99
+ nokogiri (1.5.5)
99
100
  polyglot (0.3.3)
100
101
  rack (1.2.5)
101
102
  rack-mount (0.6.14)
102
103
  rack (>= 1.0.0)
103
104
  rack-test (0.5.7)
104
105
  rack (>= 1.0)
105
- rails (3.0.12)
106
- actionmailer (= 3.0.12)
107
- actionpack (= 3.0.12)
108
- activerecord (= 3.0.12)
109
- activeresource (= 3.0.12)
110
- activesupport (= 3.0.12)
106
+ rails (3.0.15)
107
+ actionmailer (= 3.0.15)
108
+ actionpack (= 3.0.15)
109
+ activerecord (= 3.0.15)
110
+ activeresource (= 3.0.15)
111
+ activesupport (= 3.0.15)
111
112
  bundler (~> 1.0)
112
- railties (= 3.0.12)
113
- railties (3.0.12)
114
- actionpack (= 3.0.12)
115
- activesupport (= 3.0.12)
113
+ railties (= 3.0.15)
114
+ railties (3.0.15)
115
+ actionpack (= 3.0.15)
116
+ activesupport (= 3.0.15)
116
117
  rake (>= 0.8.7)
117
118
  rdoc (~> 3.4)
118
119
  thor (~> 0.14.4)
119
120
  rake (0.9.2.2)
120
121
  rdoc (3.12)
121
122
  json (~> 1.4)
122
- rspec (2.9.0)
123
- rspec-core (~> 2.9.0)
124
- rspec-expectations (~> 2.9.0)
125
- rspec-mocks (~> 2.9.0)
126
- rspec-core (2.9.0)
127
- rspec-expectations (2.9.1)
123
+ rspec (2.11.0)
124
+ rspec-core (~> 2.11.0)
125
+ rspec-expectations (~> 2.11.0)
126
+ rspec-mocks (~> 2.11.0)
127
+ rspec-core (2.11.1)
128
+ rspec-expectations (2.11.1)
128
129
  diff-lcs (~> 1.1.3)
129
- rspec-mocks (2.9.0)
130
- rspec-rails (2.9.0)
130
+ rspec-mocks (2.11.1)
131
+ rspec-rails (2.11.0)
131
132
  actionpack (>= 3.0)
132
133
  activesupport (>= 3.0)
133
134
  railties (>= 3.0)
134
- rspec (~> 2.9.0)
135
- rubyzip (0.9.6.1)
136
- selenium-webdriver (2.20.0)
135
+ rspec (~> 2.11.0)
136
+ rubyzip (0.9.9)
137
+ selenium-webdriver (2.25.0)
137
138
  childprocess (>= 0.2.5)
138
- ffi (~> 1.0)
139
+ libwebsocket (~> 0.1.3)
139
140
  multi_json (~> 1.0)
140
141
  rubyzip
141
- shoulda-matchers (1.1.0)
142
+ shoulda-matchers (1.2.0)
142
143
  activesupport (>= 3.0.0)
143
- sqlite3 (1.3.5)
144
- term-ansicolor (1.0.7)
144
+ sqlite3 (1.3.6)
145
145
  thor (0.14.6)
146
146
  timecop (0.3.5)
147
147
  treetop (1.4.10)
148
148
  polyglot
149
149
  polyglot (>= 0.3.1)
150
- tzinfo (0.3.32)
150
+ tzinfo (0.3.33)
151
151
  xpath (0.1.4)
152
152
  nokogiri (~> 1.3)
153
153
 
@@ -155,18 +155,17 @@ PLATFORMS
155
155
  ruby
156
156
 
157
157
  DEPENDENCIES
158
- appraisal (~> 0.4.1)
159
- aruba (~> 0.4.11)
160
- bourne (~> 1.1.2)
161
- bundler (~> 1.1.0)
162
- capybara (~> 1.1.2)
158
+ appraisal (= 0.4.1)
159
+ aruba (= 0.4.11)
160
+ bourne (= 1.1.2)
161
+ bundler (= 1.1.3)
162
+ capybara (= 1.1.2)
163
163
  clearance!
164
- cucumber-rails (~> 1.1.1)
165
- database_cleaner
166
- factory_girl_rails (~> 3.1.0)
167
- launchy
168
- rails (= 3.0.12)
169
- rspec-rails (~> 2.9.0)
170
- shoulda-matchers (~> 1.1.0)
171
- sqlite3
172
- timecop
164
+ cucumber-rails (= 1.1.1)
165
+ database_cleaner (= 0.8.0)
166
+ factory_girl_rails (= 3.5.0)
167
+ rails (= 3.0.15)
168
+ rspec-rails (= 2.11.0)
169
+ shoulda-matchers (= 1.2.0)
170
+ sqlite3 (= 1.3.6)
171
+ timecop (= 0.3.5)