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.
- data/.gitignore +1 -0
- data/.travis.yml +0 -2
- data/Appraisals +2 -2
- data/CONTRIBUTING.md +10 -19
- data/Gemfile +1 -1
- data/Gemfile.lock +81 -82
- data/NEWS.md +17 -4
- data/README.md +176 -113
- data/app/controllers/clearance/passwords_controller.rb +44 -31
- data/app/controllers/clearance/sessions_controller.rb +11 -10
- data/app/controllers/clearance/users_controller.rb +8 -12
- data/app/mailers/clearance_mailer.rb +4 -5
- data/app/views/clearance_mailer/change_password.html.erb +2 -4
- data/app/views/layouts/application.html.erb +7 -5
- data/app/views/passwords/edit.html.erb +8 -7
- data/app/views/passwords/new.html.erb +6 -5
- data/app/views/sessions/_form.html.erb +7 -5
- data/app/views/sessions/new.html.erb +3 -2
- data/app/views/users/_form.html.erb +4 -3
- data/clearance.gemspec +29 -27
- data/config/routes.rb +10 -13
- data/db/migrate/20110111224543_create_clearance_users.rb +18 -0
- data/db/schema.rb +4 -5
- data/features/engine/visitor_resets_password.feature +0 -7
- data/features/engine/visitor_signs_in.feature +7 -0
- data/features/engine/visitor_signs_up.feature +2 -2
- data/features/integration.feature +0 -1
- data/features/integration_with_test_unit.feature +43 -0
- data/features/step_definitions/configuration_steps.rb +8 -15
- data/features/step_definitions/engine/clearance_steps.rb +38 -38
- data/features/support/clearance.rb +1 -1
- data/features/support/env.rb +4 -21
- data/gemfiles/{3.0.12.gemfile → 3.0.15.gemfile} +1 -1
- data/gemfiles/{3.0.12.gemfile.lock → 3.0.15.gemfile.lock} +75 -76
- data/gemfiles/{3.2.3.gemfile → 3.1.6.gemfile} +1 -1
- data/gemfiles/{3.1.4.gemfile.lock → 3.1.6.gemfile.lock} +79 -80
- data/gemfiles/{3.1.4.gemfile → 3.2.6.gemfile} +1 -1
- data/gemfiles/{3.2.3.gemfile.lock → 3.2.6.gemfile.lock} +80 -81
- data/lib/clearance.rb +1 -0
- data/lib/clearance/authentication.rb +37 -69
- data/lib/clearance/configuration.rb +3 -18
- data/lib/clearance/constraints.rb +2 -0
- data/lib/clearance/constraints/signed_in.rb +28 -0
- data/lib/clearance/constraints/signed_out.rb +9 -0
- data/lib/clearance/engine.rb +4 -4
- data/lib/clearance/password_strategies.rb +5 -1
- data/lib/clearance/password_strategies/bcrypt.rb +27 -0
- data/lib/clearance/password_strategies/bcrypt_migration_from_sha1.rb +52 -0
- data/lib/clearance/password_strategies/blowfish.rb +11 -15
- data/lib/clearance/password_strategies/fake.rb +23 -0
- data/lib/clearance/password_strategies/sha1.rb +15 -21
- data/lib/clearance/session.rb +28 -20
- data/lib/clearance/testing.rb +8 -3
- data/lib/clearance/testing/assertion_error.rb +2 -7
- data/lib/clearance/testing/deny_access_matcher.rb +27 -32
- data/lib/clearance/testing/helpers.rb +7 -8
- data/lib/clearance/user.rb +26 -92
- data/lib/clearance/version.rb +1 -1
- data/lib/generators/clearance/install/templates/db/migrate/upgrade_clearance_to_diesel.rb +24 -26
- data/spec/clearance/constraints/signed_in_spec.rb +51 -0
- data/spec/clearance/constraints/signed_out_spec.rb +15 -0
- data/spec/clearance/rack_session_spec.rb +8 -7
- data/spec/clearance/session_spec.rb +28 -27
- data/spec/configuration_spec.rb +7 -6
- data/spec/controllers/denies_controller_spec.rb +11 -10
- data/spec/controllers/flashes_controller_spec.rb +5 -5
- data/spec/controllers/forgeries_controller_spec.rb +9 -9
- data/spec/controllers/passwords_controller_spec.rb +42 -55
- data/spec/controllers/sessions_controller_spec.rb +26 -33
- data/spec/controllers/users_controller_spec.rb +16 -14
- data/spec/factories.rb +1 -3
- data/spec/mailers/clearance_mailer_spec.rb +4 -4
- data/spec/models/bcrypt_migration_from_sha1_spec.rb +71 -0
- data/spec/models/bcrypt_spec.rb +40 -0
- data/spec/models/blowfish_spec.rb +14 -13
- data/spec/models/{clearance_user_spec.rb → password_strategies_spec.rb} +5 -5
- data/spec/models/sha1_spec.rb +18 -13
- data/spec/models/user_spec.rb +58 -73
- data/spec/spec_helper.rb +5 -6
- data/spec/support/clearance.rb +0 -4
- data/spec/support/cookies.rb +25 -27
- data/spec/support/request_with_remember_token.rb +19 -0
- metadata +95 -90
- data/db/migrate/20110111224543_create_diesel_clearance_users.rb +0 -19
- 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
|
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
|
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 =
|
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 =
|
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,
|
19
|
+
File.open(path, 'w') { |file| file.write(contents) }
|
18
20
|
end
|
19
|
-
|
21
|
+
|
22
|
+
write_file('app/controllers/home_controller.rb', <<-CONTROLLER)
|
20
23
|
class HomeController < ApplicationController
|
21
24
|
def show
|
22
|
-
render :text =>
|
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
|
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
|
22
|
-
|
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
|
45
|
-
|
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
|
52
|
-
visit
|
53
|
-
click_link
|
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
|
-
|
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(
|
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
|
64
|
+
email.to == [user.email] &&
|
74
65
|
email.subject =~ /password/i &&
|
75
|
-
email.body
|
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
|
93
|
-
click_button
|
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(
|
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
|
-
|
103
|
-
|
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
|
107
|
-
page.should have_content(
|
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
|
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
|
122
|
+
visit '/'
|
123
|
+
page.should have_content 'Sign in'
|
124
124
|
end
|
data/features/support/env.rb
CHANGED
@@ -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[
|
7
|
+
ENV['RAILS_ENV'] ||= 'test'
|
8
8
|
|
9
|
-
PROJECT_ROOT = File.expand_path(
|
10
|
-
$LOAD_PATH << File.join(PROJECT_ROOT,
|
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
|
37
|
+
raise 'You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it.'
|
55
38
|
end
|
@@ -1,20 +1,21 @@
|
|
1
1
|
PATH
|
2
|
-
remote: /home/mike/clearance
|
2
|
+
remote: /home/mike/thoughtbot/clearance
|
3
3
|
specs:
|
4
|
-
clearance (0.
|
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.
|
13
|
-
actionpack (= 3.0.
|
13
|
+
actionmailer (3.0.15)
|
14
|
+
actionpack (= 3.0.15)
|
14
15
|
mail (~> 2.2.19)
|
15
|
-
actionpack (3.0.
|
16
|
-
activemodel (= 3.0.
|
17
|
-
activesupport (= 3.0.
|
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.
|
26
|
-
activesupport (= 3.0.
|
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.
|
30
|
-
activemodel (= 3.0.
|
31
|
-
activesupport (= 3.0.
|
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.
|
35
|
-
activemodel (= 3.0.
|
36
|
-
activesupport (= 3.0.
|
37
|
-
activesupport (3.0.
|
38
|
-
addressable (2.
|
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.
|
59
|
-
ffi (~> 1.0.6)
|
60
|
-
cucumber (1.1
|
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.
|
63
|
-
gherkin (~> 2.
|
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.
|
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.
|
77
|
+
factory_girl (3.5.0)
|
77
78
|
activesupport (>= 3.0.0)
|
78
|
-
factory_girl_rails (3.
|
79
|
-
factory_girl (~> 3.
|
79
|
+
factory_girl_rails (3.5.0)
|
80
|
+
factory_girl (~> 3.5.0)
|
80
81
|
railties (>= 3.0.0)
|
81
|
-
ffi (1.0
|
82
|
-
gherkin (2.
|
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.
|
86
|
-
|
87
|
-
addressable
|
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.
|
95
|
+
mime-types (1.19)
|
95
96
|
mocha (0.10.5)
|
96
97
|
metaclass (~> 0.0.1)
|
97
|
-
multi_json (1.
|
98
|
-
nokogiri (1.5.
|
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.
|
106
|
-
actionmailer (= 3.0.
|
107
|
-
actionpack (= 3.0.
|
108
|
-
activerecord (= 3.0.
|
109
|
-
activeresource (= 3.0.
|
110
|
-
activesupport (= 3.0.
|
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.
|
113
|
-
railties (3.0.
|
114
|
-
actionpack (= 3.0.
|
115
|
-
activesupport (= 3.0.
|
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.
|
123
|
-
rspec-core (~> 2.
|
124
|
-
rspec-expectations (~> 2.
|
125
|
-
rspec-mocks (~> 2.
|
126
|
-
rspec-core (2.
|
127
|
-
rspec-expectations (2.
|
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.
|
130
|
-
rspec-rails (2.
|
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.
|
135
|
-
rubyzip (0.9.
|
136
|
-
selenium-webdriver (2.
|
135
|
+
rspec (~> 2.11.0)
|
136
|
+
rubyzip (0.9.9)
|
137
|
+
selenium-webdriver (2.25.0)
|
137
138
|
childprocess (>= 0.2.5)
|
138
|
-
|
139
|
+
libwebsocket (~> 0.1.3)
|
139
140
|
multi_json (~> 1.0)
|
140
141
|
rubyzip
|
141
|
-
shoulda-matchers (1.
|
142
|
+
shoulda-matchers (1.2.0)
|
142
143
|
activesupport (>= 3.0.0)
|
143
|
-
sqlite3 (1.3.
|
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.
|
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 (
|
159
|
-
aruba (
|
160
|
-
bourne (
|
161
|
-
bundler (
|
162
|
-
capybara (
|
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 (
|
165
|
-
database_cleaner
|
166
|
-
factory_girl_rails (
|
167
|
-
|
168
|
-
rails (=
|
169
|
-
|
170
|
-
|
171
|
-
|
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)
|