devise-authy 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +4 -0
  3. data/Gemfile +29 -13
  4. data/README.md +8 -6
  5. data/VERSION +1 -1
  6. data/app/controllers/devise/devise_authy_controller.rb +3 -3
  7. data/authy-devise-demo/Gemfile +39 -28
  8. data/authy-devise-demo/Gemfile.lock +166 -113
  9. data/authy-devise-demo/README.md +1 -1
  10. data/authy-devise-demo/app/controllers/welcome_controller.rb +2 -2
  11. data/authy-devise-demo/app/models/admin.rb +0 -3
  12. data/authy-devise-demo/app/models/user.rb +0 -3
  13. data/authy-devise-demo/config/application.rb +5 -41
  14. data/authy-devise-demo/config/environments/development.rb +21 -17
  15. data/authy-devise-demo/config/environments/production.rb +45 -33
  16. data/authy-devise-demo/config/environments/test.rb +18 -13
  17. data/authy-devise-demo/config/initializers/session_store.rb +1 -1
  18. data/authy-devise-demo/config/locales/devise.authy.en.yml +4 -4
  19. data/authy-devise-demo/config/secrets.yml +22 -0
  20. data/authy-devise-demo/db/migrate/20160906221739_add_sessions_table.rb +12 -0
  21. data/authy-devise-demo/db/schema.rb +32 -22
  22. data/config/locales/en.yml +4 -4
  23. data/devise-authy.gemspec +44 -47
  24. data/lib/devise-authy/controllers/helpers.rb +1 -1
  25. data/lib/devise-authy/controllers/view_helpers.rb +8 -2
  26. data/lib/devise-authy/mapping.rb +3 -7
  27. data/lib/devise-authy/models/authy_authenticatable.rb +1 -1
  28. data/lib/devise-authy/rails.rb +1 -1
  29. data/lib/generators/devise_authy/install_generator.rb +7 -0
  30. data/spec/controllers/devise_authy_controller_spec.rb +61 -60
  31. data/spec/controllers/passwords_controller_spec.rb +15 -15
  32. data/spec/features/authy_authenticatable_spec.rb +23 -23
  33. data/spec/features/authy_lockable_spec.rb +6 -6
  34. data/spec/generators_spec.rb +11 -9
  35. data/spec/models/authy_authenticatable_spec.rb +3 -3
  36. data/spec/models/authy_lockable_spec.rb +7 -7
  37. data/spec/rails-app/Gemfile +4 -3
  38. data/spec/rails-app/Gemfile.lock +116 -91
  39. data/spec/rails-app/app/controllers/welcome_controller.rb +1 -1
  40. data/spec/rails-app/app/models/user.rb +0 -3
  41. data/spec/rails-app/config/application.rb +15 -34
  42. data/spec/rails-app/config/environments/development.rb +21 -17
  43. data/spec/rails-app/config/environments/production.rb +45 -33
  44. data/spec/rails-app/config/environments/test.rb +18 -13
  45. data/spec/rails-app/config/secrets.yml +22 -0
  46. data/spec/routing/routes_spec.rb +7 -7
  47. data/spec/spec_helper.rb +17 -0
  48. data/spec/support/helpers.rb +3 -1
  49. metadata +34 -59
  50. data/Gemfile.lock +0 -194
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DeviseAuthy::PasswordsController do
4
- include Devise::TestHelpers
3
+ describe DeviseAuthy::PasswordsController, type: :controller do
4
+ include Devise::Test::ControllerHelpers
5
5
 
6
6
  before :each do
7
7
  request.env["devise.mapping"] = Devise.mappings[:user]
@@ -12,16 +12,16 @@ describe DeviseAuthy::PasswordsController do
12
12
  describe "Reset password" do
13
13
  it "Should redirect to verify token view" do
14
14
  user = create_user(:authy_id => 1)
15
- user.reset_password_token = User.reset_password_token
16
- user.reset_password_sent_at = Time.now.utc
17
15
  user.authy_enabled = true
18
16
  user.save
19
17
 
20
- put :update, :user => { :reset_password_token => user.reset_password_token, :password => "password", :password_confirmation => "password" }
18
+ token = user.send_reset_password_instructions
19
+
20
+ put :update, :user => { :reset_password_token => token, :password => "password", :password_confirmation => "password" }
21
21
 
22
22
  user.reload
23
- user.last_sign_in_at.should be_nil
24
- response.should redirect_to(root_url)
23
+ expect(user.last_sign_in_at).to be_nil
24
+ expect(response).to redirect_to(root_url)
25
25
  end
26
26
  end
27
27
  end
@@ -29,20 +29,20 @@ describe DeviseAuthy::PasswordsController do
29
29
  context "when the user don't have 2FA" do
30
30
  describe "Reset password" do
31
31
  it "Should sign in the user" do
32
- user = create_user
33
- user.reset_password_token = User.reset_password_token
34
- user.reset_password_sent_at = Time.now.utc
32
+ user = create_user(:authy_id => 1)
35
33
  user.save
36
34
 
35
+ token = user.send_reset_password_instructions
36
+
37
37
  last_sign_in_at = user.last_sign_in_at
38
38
 
39
- put :update, :user => { :reset_password_token => user.reset_password_token, :password => "password", :password_confirmation => "password" }
40
- response.should redirect_to(root_url)
39
+ put :update, :user => { :reset_password_token => token, :password => "password", :password_confirmation => "password" }
40
+ expect(response).to redirect_to(root_url)
41
41
 
42
42
  user.reload
43
- user.last_sign_in_at.should_not be_nil
44
- flash[:notice].should == "Your password was changed successfully. You are now signed in."
43
+ expect(user.last_sign_in_at).not_to be_nil
44
+ expect(flash[:notice]).to eq("Your password was changed successfully. You are now signed in.")
45
45
  end
46
46
  end
47
47
  end
48
- end
48
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Authy Autnenticatable", :type => :request do
3
+ describe "Authy Authenticatable", :type => :request do
4
4
  describe "If user don't have two factor authentication should login with email - password" do
5
5
  before :each do
6
6
  @user = create_user(:email => 'foo@bar.com')
@@ -8,18 +8,18 @@ describe "Authy Autnenticatable", :type => :request do
8
8
 
9
9
  it "Sign in should succeed" do
10
10
  fill_sign_in_form('foo@bar.com', '12345678')
11
- current_path.should == root_path
12
- page.should have_content('Signed in successfully.')
11
+ expect(current_path).to eq(root_path)
12
+ expect(page).to have_content('Signed in successfully.')
13
13
  end
14
14
 
15
- it "Sign in shouldn't success" do
15
+ it "Sign in shouldn't succeed" do
16
16
  fill_sign_in_form('foo@bar.com', '14567823')
17
- current_path.should == new_user_session_path
18
- page.should_not have_content('Signed in successfully.')
17
+ expect(current_path).to eq(new_user_session_path)
18
+ expect(page).not_to have_content('Signed in successfully.')
19
19
  end
20
20
  end
21
21
 
22
- describe "If user have two factor authentication" do
22
+ describe "If user has two factor authentication" do
23
23
  before :each do
24
24
  @user = create_user(:authy_id => 1)
25
25
  @user.update_attribute(:authy_enabled, true)
@@ -27,31 +27,31 @@ describe "Authy Autnenticatable", :type => :request do
27
27
 
28
28
  it "Sign in should succeed" do
29
29
  fill_sign_in_form(@user.email, '12345678')
30
- current_path.should == user_verify_authy_path
31
- page.should have_content('Please enter your Authy token')
30
+ expect(current_path).to eq(user_verify_authy_path)
31
+ expect(page).to have_content('Please enter your Authy token')
32
32
 
33
33
  within('#devise_authy') do
34
34
  fill_in 'authy-token', :with => '0000000'
35
35
  end
36
36
  click_on 'Check Token'
37
- current_path.should == root_path
38
- page.should have_content(I18n.t('devise.devise_authy.user.signed_in'))
37
+ expect(current_path).to eq(root_path)
38
+ expect(page).to have_content(I18n.t('devise.devise_authy.user.signed_in'))
39
39
  @user.reload
40
- @user.last_sign_in_with_authy.should_not be_nil
40
+ expect(@user.last_sign_in_with_authy).not_to be_nil
41
41
  end
42
42
 
43
43
  it "Sign in shouldn't succeed" do
44
44
  fill_sign_in_form(@user.email, '12345678')
45
- current_path.should == user_verify_authy_path
46
- page.should have_content('Please enter your Authy token')
45
+ expect(current_path).to eq(user_verify_authy_path)
46
+ expect(page).to have_content('Please enter your Authy token')
47
47
 
48
48
  within('#devise_authy') do
49
49
  fill_in 'authy-token', :with => '324567'
50
50
  end
51
51
  click_on 'Check Token'
52
- current_path.should == user_verify_authy_path
52
+ expect(current_path).to eq(user_verify_authy_path)
53
53
  @user.reload
54
- @user.last_sign_in_with_authy.should be_nil
54
+ expect(@user.last_sign_in_with_authy).to be_nil
55
55
  end
56
56
 
57
57
  describe "With cookie['remember_device']" do
@@ -59,16 +59,16 @@ describe "Authy Autnenticatable", :type => :request do
59
59
  cookie_val = sign_cookie("remember_device", Time.now.to_i - 2.month.to_i)
60
60
  page.driver.browser.set_cookie("remember_device=#{cookie_val}")
61
61
  fill_sign_in_form(@user.email, '12345678')
62
- current_path.should == user_verify_authy_path
63
- page.should have_content('Please enter your Authy token')
62
+ expect(current_path).to eq(user_verify_authy_path)
63
+ expect(page).to have_content('Please enter your Authy token')
64
64
  end
65
65
 
66
66
  it "Shouldn't prompt for a token" do
67
67
  cookie_val = sign_cookie("remember_device", Time.now.to_i)
68
68
  page.driver.browser.set_cookie("remember_device=#{cookie_val}")
69
69
  fill_sign_in_form(@user.email, '12345678')
70
- current_path.should == root_path
71
- page.should have_content("Signed in successfully.")
70
+ expect(current_path).to eq(root_path)
71
+ expect(page).to have_content("Signed in successfully.")
72
72
  end
73
73
  end
74
74
 
@@ -77,14 +77,14 @@ describe "Authy Autnenticatable", :type => :request do
77
77
  page.driver.browser.set_cookie('user_password_checked=true')
78
78
 
79
79
  visit user_verify_authy_path
80
- current_path.should == new_user_session_path
81
- page.should have_content('Sign in')
80
+ expect(current_path).to eq(new_user_session_path)
81
+ expect(page).to have_content('Log in')
82
82
  end
83
83
 
84
84
  it "Click link Request sms" do
85
85
  fill_sign_in_form(@user.email, '12345678')
86
86
  click_link 'Request SMS'
87
- page.should have_content("SMS token was sent")
87
+ expect(page).to have_content("token was sent")
88
88
  end
89
89
  end
90
90
  end
@@ -15,19 +15,19 @@ feature 'Authy Lockable' do
15
15
  end
16
16
 
17
17
  scenario 'account locked when user enters invalid code too many times' do
18
- Devise.maximum_attempts.times do |i|
18
+ (LockableUser.maximum_attempts - 1).times do |i|
19
19
  fill_verify_token_form invalid_authy_token
20
20
  assert_at lockable_user_verify_authy_path
21
21
  expect(page).to have_content('Please enter your Authy token')
22
22
  user.reload
23
- assert_account_locked_for user, nil
23
+ assert_account_locked_for user, false
24
24
  expect(user.failed_attempts).to eq(i + 1)
25
25
  end
26
26
 
27
27
  fill_verify_token_form invalid_authy_token
28
28
  user.reload
29
29
  assert_at new_user_session_path
30
- assert_account_locked_for user
30
+ assert_account_locked_for user, true
31
31
  visit root_path
32
32
  assert_at new_user_session_path
33
33
  end
@@ -48,19 +48,19 @@ feature 'Authy Lockable' do
48
48
  fill_in 'authy-cellphone', with: '8001234567'
49
49
  click_on 'Enable'
50
50
 
51
- Devise.maximum_attempts.times do |i|
51
+ (LockableUser.maximum_attempts - 1).times do |i|
52
52
  fill_in_verify_authy_installation_form invalid_authy_token
53
53
  assert_at lockable_user_verify_authy_installation_path
54
54
  expect(page).to have_content('Verify your account')
55
55
  user.reload
56
- assert_account_locked_for user, nil
56
+ assert_account_locked_for user, false
57
57
  expect(user.failed_attempts).to eq(i + 1)
58
58
  end
59
59
 
60
60
  fill_in_verify_authy_installation_form invalid_authy_token
61
61
  user.reload
62
62
  assert_at new_user_session_path
63
- assert_account_locked_for user
63
+ assert_account_locked_for user, true
64
64
  visit root_path
65
65
  assert_at new_user_session_path
66
66
  end
@@ -13,18 +13,20 @@ describe "generators for devise_authy" do
13
13
 
14
14
  it "rails g should include the generators" do
15
15
  @output = rails_command("g")
16
- @output.include?('devise_authy:install').should be_true
17
- @output.include?('active_record:devise_authy').should be_true
16
+ expect(@output.include?('devise_authy:install')).to be_truthy
17
+ expect(@output.include?('active_record:devise_authy')).to be_truthy
18
18
  end
19
19
 
20
20
  it "rails g devise_authy:install" do
21
21
  @output = rails_command("g", "devise_authy:install", "-s")
22
- @output.include?('config/initializers/devise.rb').should be_true
23
- @output.include?('config/locales/devise.authy.en.yml').should be_true
24
- @output.include?('app/views/devise/devise_authy/enable_authy.html.erb').should be_true
25
- @output.include?('app/views/devise/devise_authy/verify_authy.html.erb').should be_true
26
- @output.include?('app/views/devise/devise_authy/verify_authy_installation.html.erb').should be_true
27
- @output.include?('app/assets/stylesheets/devise_authy.css').should be_true
28
- @output.include?('app/assets/javascripts/devise_authy.js').should be_true
22
+
23
+ expect(@output.include?('config/initializers/devise.rb')).to be_truthy
24
+ expect(@output.include?('authy.rb')).to be_truthy
25
+ expect(@output.include?('config/locales/devise.authy.en.yml')).to be_truthy
26
+ expect(@output.include?('app/views/devise/devise_authy/enable_authy.html.erb')).to be_truthy
27
+ expect(@output.include?('app/views/devise/devise_authy/verify_authy.html.erb')).to be_truthy
28
+ expect(@output.include?('app/views/devise/devise_authy/verify_authy_installation.html.erb')).to be_truthy
29
+ expect(@output.include?('app/assets/stylesheets/devise_authy.css')).to be_truthy
30
+ expect(@output.include?('app/assets/javascripts/devise_authy.js')).to be_truthy
29
31
  end
30
32
  end
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Devise::Models::AuthyAuthenticatable do
3
+ describe Devise::Models::AuthyAuthenticatable, type: :model do
4
4
  before(:each) do
5
5
  @user = create_user(:authy_id => '20')
6
6
  end
7
7
 
8
8
  describe "User#find_by_authy_id" do
9
9
  it "Should find the user" do
10
- User.find_by_authy_id('20').should_not be_nil
10
+ expect(User.find_by_authy_id('20')).not_to be_nil
11
11
  end
12
12
 
13
13
  it "Shouldn't find the user" do
14
- User.find_by_authy_id('80').should be_nil
14
+ expect(User.find_by_authy_id('80')).to be_nil
15
15
  end
16
16
  end
17
17
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Devise::Models::AuthyLockable do
3
+ describe Devise::Models::AuthyLockable, type: :controller do
4
4
 
5
5
  context 'model includes Devise::Models::Lockable' do
6
6
 
@@ -9,12 +9,12 @@ describe Devise::Models::AuthyLockable do
9
9
  context '#lockable?' do
10
10
 
11
11
  it 'returns true if lock_strategy is :failed_attempts' do
12
- expect(user.lockable?).to be_true
12
+ expect(user.lockable?).to be_truthy
13
13
  end
14
14
 
15
15
  it 'returns false if lock_strategy is anything other than :failed attempts' do
16
16
  Devise.lock_strategy = :none
17
- expect(user.lockable?).to be_false
17
+ expect(user.lockable?).to be_falsey
18
18
  Devise.lock_strategy = :failed_attempts
19
19
  end
20
20
 
@@ -35,17 +35,17 @@ describe Devise::Models::AuthyLockable do
35
35
 
36
36
  it 'respects the maximum attempts configuration for Devise::Models::Lockable' do
37
37
  4.times { user.invalid_authy_attempt! }
38
- expect(user.send :attempts_exceeded?).to be_true # protected method
39
- expect(user.access_locked?).to be_true
38
+ expect(user.send :attempts_exceeded?).to be_truthy # protected method
39
+ expect(user.access_locked?).to be_truthy
40
40
  end
41
41
 
42
42
  it 'returns true if the account is locked' do
43
43
  3.times { user.invalid_authy_attempt! }
44
- expect(user.invalid_authy_attempt!).to be_true
44
+ expect(user.invalid_authy_attempt!).to be_truthy
45
45
  end
46
46
 
47
47
  it 'returns false if the account is not locked' do
48
- expect(user.invalid_authy_attempt!).to be_false
48
+ expect(user.invalid_authy_attempt!).to be_falsey
49
49
  end
50
50
 
51
51
  end
@@ -1,9 +1,10 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "rails", "~> 3.2.6"
3
+ gem "rails", "~> 4.2.7"
4
+ gem 'json', '>= 1.8.1'
4
5
  gem "sqlite3"
5
6
  gem "rake"
6
7
  gem "authy"
7
- gem "devise"
8
+ gem "devise", '>= 3.0.0'
8
9
  gem "devise-authy", :path => "../.."
9
- gem 'jquery-rails'
10
+ gem 'launchy'
@@ -1,105 +1,126 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- devise-authy (1.5.3)
4
+ devise-authy (1.7.0)
5
5
  authy
6
6
  devise
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionmailer (3.2.13)
12
- actionpack (= 3.2.13)
13
- mail (~> 2.5.3)
14
- actionpack (3.2.13)
15
- activemodel (= 3.2.13)
16
- activesupport (= 3.2.13)
17
- builder (~> 3.0.0)
11
+ actionmailer (4.2.7.1)
12
+ actionpack (= 4.2.7.1)
13
+ actionview (= 4.2.7.1)
14
+ activejob (= 4.2.7.1)
15
+ mail (~> 2.5, >= 2.5.4)
16
+ rails-dom-testing (~> 1.0, >= 1.0.5)
17
+ actionpack (4.2.7.1)
18
+ actionview (= 4.2.7.1)
19
+ activesupport (= 4.2.7.1)
20
+ rack (~> 1.6)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
+ actionview (4.2.7.1)
25
+ activesupport (= 4.2.7.1)
26
+ builder (~> 3.1)
18
27
  erubis (~> 2.7.0)
19
- journey (~> 1.0.4)
20
- rack (~> 1.4.5)
21
- rack-cache (~> 1.2)
22
- rack-test (~> 0.6.1)
23
- sprockets (~> 2.2.1)
24
- activemodel (3.2.13)
25
- activesupport (= 3.2.13)
26
- builder (~> 3.0.0)
27
- activerecord (3.2.13)
28
- activemodel (= 3.2.13)
29
- activesupport (= 3.2.13)
30
- arel (~> 3.0.2)
31
- tzinfo (~> 0.3.29)
32
- activeresource (3.2.13)
33
- activemodel (= 3.2.13)
34
- activesupport (= 3.2.13)
35
- activesupport (3.2.13)
36
- i18n (= 0.6.1)
37
- multi_json (~> 1.0)
38
- arel (3.0.2)
39
- authy (2.0.1)
40
- httpclient (>= 2.2.6)
41
- bcrypt-ruby (3.0.1)
42
- builder (3.0.4)
43
- devise (2.2.3)
44
- bcrypt-ruby (~> 3.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
+ activejob (4.2.7.1)
31
+ activesupport (= 4.2.7.1)
32
+ globalid (>= 0.3.0)
33
+ activemodel (4.2.7.1)
34
+ activesupport (= 4.2.7.1)
35
+ builder (~> 3.1)
36
+ activerecord (4.2.7.1)
37
+ activemodel (= 4.2.7.1)
38
+ activesupport (= 4.2.7.1)
39
+ arel (~> 6.0)
40
+ activesupport (4.2.7.1)
41
+ i18n (~> 0.7)
42
+ json (~> 1.7, >= 1.7.7)
43
+ minitest (~> 5.1)
44
+ thread_safe (~> 0.3, >= 0.3.4)
45
+ tzinfo (~> 1.1)
46
+ addressable (2.4.0)
47
+ arel (6.0.3)
48
+ authy (2.7.1)
49
+ httpclient (>= 2.5.3.3)
50
+ bcrypt (3.1.11)
51
+ builder (3.2.2)
52
+ concurrent-ruby (1.0.2)
53
+ devise (4.2.0)
54
+ bcrypt (~> 3.0)
45
55
  orm_adapter (~> 0.1)
46
- railties (~> 3.1)
47
- warden (~> 1.2.1)
56
+ railties (>= 4.1.0, < 5.1)
57
+ responders
58
+ warden (~> 1.2.3)
48
59
  erubis (2.7.0)
49
- hike (1.2.2)
50
- httpclient (2.3.3)
51
- i18n (0.6.1)
52
- journey (1.0.4)
53
- jquery-rails (3.1.4)
54
- railties (>= 3.0, < 5.0)
55
- thor (>= 0.14, < 2.0)
56
- json (1.7.7)
57
- mail (2.5.3)
58
- i18n (>= 0.4.0)
59
- mime-types (~> 1.16)
60
- treetop (~> 1.4.8)
61
- mime-types (1.22)
62
- multi_json (1.7.2)
63
- orm_adapter (0.4.0)
64
- polyglot (0.3.3)
65
- rack (1.4.5)
66
- rack-cache (1.2)
67
- rack (>= 0.4)
68
- rack-ssl (1.3.3)
69
- rack
70
- rack-test (0.6.2)
60
+ globalid (0.3.7)
61
+ activesupport (>= 4.1.0)
62
+ httpclient (2.8.2.3)
63
+ i18n (0.7.0)
64
+ json (1.8.3)
65
+ launchy (2.4.3)
66
+ addressable (~> 2.3)
67
+ loofah (2.0.3)
68
+ nokogiri (>= 1.5.9)
69
+ mail (2.6.4)
70
+ mime-types (>= 1.16, < 4)
71
+ mime-types (3.1)
72
+ mime-types-data (~> 3.2015)
73
+ mime-types-data (3.2016.0521)
74
+ mini_portile2 (2.1.0)
75
+ minitest (5.9.0)
76
+ nokogiri (1.6.8)
77
+ mini_portile2 (~> 2.1.0)
78
+ pkg-config (~> 1.1.7)
79
+ orm_adapter (0.5.0)
80
+ pkg-config (1.1.7)
81
+ rack (1.6.4)
82
+ rack-test (0.6.3)
71
83
  rack (>= 1.0)
72
- rails (3.2.13)
73
- actionmailer (= 3.2.13)
74
- actionpack (= 3.2.13)
75
- activerecord (= 3.2.13)
76
- activeresource (= 3.2.13)
77
- activesupport (= 3.2.13)
78
- bundler (~> 1.0)
79
- railties (= 3.2.13)
80
- railties (3.2.13)
81
- actionpack (= 3.2.13)
82
- activesupport (= 3.2.13)
83
- rack-ssl (~> 1.3.2)
84
+ rails (4.2.7.1)
85
+ actionmailer (= 4.2.7.1)
86
+ actionpack (= 4.2.7.1)
87
+ actionview (= 4.2.7.1)
88
+ activejob (= 4.2.7.1)
89
+ activemodel (= 4.2.7.1)
90
+ activerecord (= 4.2.7.1)
91
+ activesupport (= 4.2.7.1)
92
+ bundler (>= 1.3.0, < 2.0)
93
+ railties (= 4.2.7.1)
94
+ sprockets-rails
95
+ rails-deprecated_sanitizer (1.0.3)
96
+ activesupport (>= 4.2.0.alpha)
97
+ rails-dom-testing (1.0.7)
98
+ activesupport (>= 4.2.0.beta, < 5.0)
99
+ nokogiri (~> 1.6.0)
100
+ rails-deprecated_sanitizer (>= 1.0.1)
101
+ rails-html-sanitizer (1.0.3)
102
+ loofah (~> 2.0)
103
+ railties (4.2.7.1)
104
+ actionpack (= 4.2.7.1)
105
+ activesupport (= 4.2.7.1)
84
106
  rake (>= 0.8.7)
85
- rdoc (~> 3.4)
86
- thor (>= 0.14.6, < 2.0)
87
- rake (10.0.4)
88
- rdoc (3.12.2)
89
- json (~> 1.4)
90
- sprockets (2.2.2)
91
- hike (~> 1.2)
92
- multi_json (~> 1.0)
93
- rack (~> 1.0)
94
- tilt (~> 1.1, != 1.3.0)
95
- sqlite3 (1.3.7)
96
- thor (0.18.1)
97
- tilt (1.3.7)
98
- treetop (1.4.12)
99
- polyglot
100
- polyglot (>= 0.3.1)
101
- tzinfo (0.3.37)
102
- warden (1.2.1)
107
+ thor (>= 0.18.1, < 2.0)
108
+ rake (11.2.2)
109
+ responders (2.3.0)
110
+ railties (>= 4.2.0, < 5.1)
111
+ sprockets (3.7.0)
112
+ concurrent-ruby (~> 1.0)
113
+ rack (> 1, < 3)
114
+ sprockets-rails (3.2.0)
115
+ actionpack (>= 4.0)
116
+ activesupport (>= 4.0)
117
+ sprockets (>= 3.0.0)
118
+ sqlite3 (1.3.11)
119
+ thor (0.19.1)
120
+ thread_safe (0.3.5)
121
+ tzinfo (1.2.2)
122
+ thread_safe (~> 0.1)
123
+ warden (1.2.6)
103
124
  rack (>= 1.0)
104
125
 
105
126
  PLATFORMS
@@ -107,9 +128,13 @@ PLATFORMS
107
128
 
108
129
  DEPENDENCIES
109
130
  authy
110
- devise
131
+ devise (>= 3.0.0)
111
132
  devise-authy!
112
- jquery-rails
113
- rails (~> 3.2.6)
133
+ json (>= 1.8.1)
134
+ launchy
135
+ rails (~> 4.2.7)
114
136
  rake
115
137
  sqlite3
138
+
139
+ BUNDLED WITH
140
+ 1.11.2