devise 4.2.0 → 4.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (225) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +27 -5
  3. data/CHANGELOG.md +65 -0
  4. data/CONTRIBUTING.md +68 -28
  5. data/Gemfile +3 -1
  6. data/Gemfile.lock +79 -83
  7. data/ISSUE_TEMPLATE.md +19 -0
  8. data/MIT-LICENSE +1 -1
  9. data/README.md +108 -11
  10. data/Rakefile +1 -0
  11. data/app/controllers/devise/confirmations_controller.rb +2 -0
  12. data/app/controllers/devise/omniauth_callbacks_controller.rb +4 -2
  13. data/app/controllers/devise/passwords_controller.rb +2 -0
  14. data/app/controllers/devise/registrations_controller.rb +6 -3
  15. data/app/controllers/devise/sessions_controller.rb +3 -1
  16. data/app/controllers/devise/unlocks_controller.rb +2 -0
  17. data/app/controllers/devise_controller.rb +2 -0
  18. data/app/helpers/devise_helper.rb +2 -0
  19. data/app/mailers/devise/mailer.rb +6 -0
  20. data/app/views/devise/confirmations/new.html.erb +1 -1
  21. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  22. data/app/views/devise/passwords/new.html.erb +1 -1
  23. data/app/views/devise/registrations/edit.html.erb +1 -1
  24. data/app/views/devise/registrations/new.html.erb +1 -1
  25. data/app/views/devise/sessions/new.html.erb +1 -1
  26. data/app/views/devise/unlocks/new.html.erb +1 -1
  27. data/config/locales/en.yml +2 -0
  28. data/devise.gemspec +3 -1
  29. data/gemfiles/Gemfile.rails-4.1-stable +3 -1
  30. data/gemfiles/Gemfile.rails-4.1-stable.lock +67 -70
  31. data/gemfiles/Gemfile.rails-4.2-stable +3 -1
  32. data/gemfiles/Gemfile.rails-4.2-stable.lock +69 -73
  33. data/gemfiles/Gemfile.rails-5.0-stable +33 -0
  34. data/gemfiles/Gemfile.rails-5.0-stable.lock +192 -0
  35. data/gemfiles/Gemfile.rails-5.2-rc1 +26 -0
  36. data/gemfiles/Gemfile.rails-5.2-rc1.lock +201 -0
  37. data/guides/bug_report_templates/integration_test.rb +2 -0
  38. data/lib/devise/controllers/helpers.rb +2 -0
  39. data/lib/devise/controllers/rememberable.rb +2 -0
  40. data/lib/devise/controllers/scoped_views.rb +2 -0
  41. data/lib/devise/controllers/sign_in_out.rb +6 -1
  42. data/lib/devise/controllers/store_location.rb +25 -7
  43. data/lib/devise/controllers/url_helpers.rb +2 -0
  44. data/lib/devise/delegator.rb +2 -0
  45. data/lib/devise/encryptor.rb +2 -0
  46. data/lib/devise/failure_app.rb +14 -12
  47. data/lib/devise/hooks/activatable.rb +2 -0
  48. data/lib/devise/hooks/csrf_cleaner.rb +2 -0
  49. data/lib/devise/hooks/forgetable.rb +2 -0
  50. data/lib/devise/hooks/lockable.rb +6 -1
  51. data/lib/devise/hooks/proxy.rb +2 -0
  52. data/lib/devise/hooks/rememberable.rb +2 -0
  53. data/lib/devise/hooks/timeoutable.rb +2 -0
  54. data/lib/devise/hooks/trackable.rb +2 -0
  55. data/lib/devise/mailers/helpers.rb +6 -3
  56. data/lib/devise/mapping.rb +2 -0
  57. data/lib/devise/models/authenticatable.rb +4 -2
  58. data/lib/devise/models/confirmable.rb +53 -17
  59. data/lib/devise/models/database_authenticatable.rb +40 -4
  60. data/lib/devise/models/lockable.rb +8 -2
  61. data/lib/devise/models/omniauthable.rb +2 -0
  62. data/lib/devise/models/recoverable.rb +26 -9
  63. data/lib/devise/models/registerable.rb +2 -0
  64. data/lib/devise/models/rememberable.rb +4 -2
  65. data/lib/devise/models/timeoutable.rb +2 -0
  66. data/lib/devise/models/trackable.rb +7 -0
  67. data/lib/devise/models/validatable.rb +10 -3
  68. data/lib/devise/models.rb +3 -1
  69. data/lib/devise/modules.rb +2 -0
  70. data/lib/devise/omniauth/config.rb +2 -0
  71. data/lib/devise/omniauth/url_helpers.rb +2 -0
  72. data/lib/devise/omniauth.rb +2 -0
  73. data/lib/devise/orm/active_record.rb +2 -0
  74. data/lib/devise/orm/mongoid.rb +2 -0
  75. data/lib/devise/parameter_filter.rb +2 -0
  76. data/lib/devise/parameter_sanitizer.rb +2 -0
  77. data/lib/devise/rails/routes.rb +3 -1
  78. data/lib/devise/rails/warden_compat.rb +2 -0
  79. data/lib/devise/rails.rb +3 -5
  80. data/lib/devise/secret_key_finder.rb +25 -0
  81. data/lib/devise/strategies/authenticatable.rb +2 -0
  82. data/lib/devise/strategies/base.rb +2 -0
  83. data/lib/devise/strategies/database_authenticatable.rb +2 -0
  84. data/lib/devise/strategies/rememberable.rb +2 -0
  85. data/lib/devise/test/controller_helpers.rb +4 -1
  86. data/lib/devise/test/integration_helpers.rb +2 -0
  87. data/lib/devise/test_helpers.rb +3 -1
  88. data/lib/devise/time_inflector.rb +2 -0
  89. data/lib/devise/token_generator.rb +2 -0
  90. data/lib/devise/version.rb +3 -1
  91. data/lib/devise.rb +17 -2
  92. data/lib/generators/active_record/devise_generator.rb +15 -2
  93. data/lib/generators/active_record/templates/migration.rb +3 -1
  94. data/lib/generators/active_record/templates/migration_existing.rb +2 -0
  95. data/lib/generators/devise/controllers_generator.rb +2 -0
  96. data/lib/generators/devise/devise_generator.rb +4 -2
  97. data/lib/generators/devise/install_generator.rb +2 -0
  98. data/lib/generators/devise/orm_helpers.rb +7 -1
  99. data/lib/generators/devise/views_generator.rb +7 -8
  100. data/lib/generators/mongoid/devise_generator.rb +2 -0
  101. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  102. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
  103. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  104. data/lib/generators/templates/controllers/registrations_controller.rb +4 -2
  105. data/lib/generators/templates/controllers/sessions_controller.rb +3 -1
  106. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  107. data/lib/generators/templates/devise.rb +10 -1
  108. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  109. data/lib/generators/templates/markerb/password_change.markerb +2 -2
  110. data/test/controllers/custom_registrations_controller_test.rb +2 -0
  111. data/test/controllers/custom_strategy_test.rb +2 -0
  112. data/test/controllers/helper_methods_test.rb +2 -0
  113. data/test/controllers/helpers_test.rb +5 -3
  114. data/test/controllers/inherited_controller_i18n_messages_test.rb +2 -0
  115. data/test/controllers/internal_helpers_test.rb +2 -0
  116. data/test/controllers/load_hooks_controller_test.rb +2 -0
  117. data/test/controllers/passwords_controller_test.rb +2 -0
  118. data/test/controllers/sessions_controller_test.rb +2 -0
  119. data/test/controllers/url_helpers_test.rb +2 -0
  120. data/test/delegator_test.rb +2 -0
  121. data/test/devise_test.rb +2 -0
  122. data/test/failure_app_test.rb +2 -0
  123. data/test/generators/active_record_generator_test.rb +47 -0
  124. data/test/generators/controllers_generator_test.rb +2 -0
  125. data/test/generators/devise_generator_test.rb +2 -0
  126. data/test/generators/install_generator_test.rb +2 -0
  127. data/test/generators/mongoid_generator_test.rb +2 -0
  128. data/test/generators/views_generator_test.rb +2 -0
  129. data/test/helpers/devise_helper_test.rb +2 -0
  130. data/test/integration/authenticatable_test.rb +10 -2
  131. data/test/integration/confirmable_test.rb +2 -0
  132. data/test/integration/database_authenticatable_test.rb +2 -0
  133. data/test/integration/http_authenticatable_test.rb +8 -0
  134. data/test/integration/lockable_test.rb +5 -3
  135. data/test/integration/mounted_engine_test.rb +2 -0
  136. data/test/integration/omniauthable_test.rb +13 -0
  137. data/test/integration/recoverable_test.rb +2 -0
  138. data/test/integration/registerable_test.rb +2 -0
  139. data/test/integration/rememberable_test.rb +9 -1
  140. data/test/integration/timeoutable_test.rb +2 -0
  141. data/test/integration/trackable_test.rb +7 -0
  142. data/test/mailers/confirmation_instructions_test.rb +2 -0
  143. data/test/mailers/email_changed_test.rb +132 -0
  144. data/test/mailers/mailer_test.rb +20 -0
  145. data/test/mailers/reset_password_instructions_test.rb +2 -0
  146. data/test/mailers/unlock_instructions_test.rb +2 -0
  147. data/test/mapping_test.rb +2 -0
  148. data/test/models/authenticatable_test.rb +2 -0
  149. data/test/models/confirmable_test.rb +30 -0
  150. data/test/models/database_authenticatable_test.rb +15 -1
  151. data/test/models/lockable_test.rb +2 -0
  152. data/test/models/omniauthable_test.rb +2 -0
  153. data/test/models/recoverable_test.rb +13 -1
  154. data/test/models/registerable_test.rb +2 -0
  155. data/test/models/rememberable_test.rb +2 -0
  156. data/test/models/serializable_test.rb +6 -0
  157. data/test/models/timeoutable_test.rb +2 -0
  158. data/test/models/trackable_test.rb +21 -0
  159. data/test/models/validatable_test.rb +4 -2
  160. data/test/models_test.rb +2 -0
  161. data/test/omniauth/config_test.rb +11 -7
  162. data/test/omniauth/url_helpers_test.rb +2 -0
  163. data/test/orm/active_record.rb +9 -2
  164. data/test/orm/mongoid.rb +3 -1
  165. data/test/parameter_sanitizer_test.rb +2 -0
  166. data/test/rails_app/app/active_record/admin.rb +2 -0
  167. data/test/rails_app/app/active_record/shim.rb +2 -0
  168. data/test/rails_app/app/active_record/user.rb +14 -1
  169. data/test/rails_app/app/active_record/user_on_engine.rb +2 -0
  170. data/test/rails_app/app/active_record/user_on_main_app.rb +2 -0
  171. data/test/rails_app/app/active_record/user_with_validations.rb +12 -0
  172. data/test/rails_app/app/active_record/user_without_email.rb +2 -0
  173. data/test/rails_app/app/controllers/admins/sessions_controller.rb +2 -0
  174. data/test/rails_app/app/controllers/admins_controller.rb +2 -0
  175. data/test/rails_app/app/controllers/application_controller.rb +2 -0
  176. data/test/rails_app/app/controllers/application_with_fake_engine.rb +2 -0
  177. data/test/rails_app/app/controllers/custom/registrations_controller.rb +2 -0
  178. data/test/rails_app/app/controllers/home_controller.rb +3 -1
  179. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  180. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  181. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +3 -1
  182. data/test/rails_app/app/controllers/users_controller.rb +5 -3
  183. data/test/rails_app/app/helpers/application_helper.rb +2 -0
  184. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +2 -0
  185. data/test/rails_app/app/mailers/users/mailer.rb +2 -0
  186. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +2 -0
  187. data/test/rails_app/app/mongoid/admin.rb +2 -0
  188. data/test/rails_app/app/mongoid/shim.rb +2 -0
  189. data/test/rails_app/app/mongoid/user.rb +11 -0
  190. data/test/rails_app/app/mongoid/user_on_engine.rb +2 -0
  191. data/test/rails_app/app/mongoid/user_on_main_app.rb +2 -0
  192. data/test/rails_app/app/mongoid/user_with_validations.rb +37 -0
  193. data/test/rails_app/app/mongoid/user_without_email.rb +2 -0
  194. data/test/rails_app/config/application.rb +6 -2
  195. data/test/rails_app/config/boot.rb +16 -3
  196. data/test/rails_app/config/environment.rb +2 -0
  197. data/test/rails_app/config/environments/development.rb +2 -0
  198. data/test/rails_app/config/environments/production.rb +2 -0
  199. data/test/rails_app/config/environments/test.rb +2 -0
  200. data/test/rails_app/config/initializers/backtrace_silencers.rb +2 -0
  201. data/test/rails_app/config/initializers/devise.rb +2 -0
  202. data/test/rails_app/config/initializers/inflections.rb +2 -0
  203. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  204. data/test/rails_app/config/initializers/session_store.rb +2 -0
  205. data/test/rails_app/config/routes.rb +2 -0
  206. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +2 -0
  207. data/test/rails_app/db/schema.rb +2 -0
  208. data/test/rails_app/lib/shared_admin.rb +7 -1
  209. data/test/rails_app/lib/shared_user.rb +2 -0
  210. data/test/rails_app/lib/shared_user_without_email.rb +2 -0
  211. data/test/rails_app/lib/shared_user_without_omniauth.rb +2 -0
  212. data/test/rails_test.rb +2 -0
  213. data/test/routes_test.rb +7 -5
  214. data/test/secret_key_finder_test.rb +97 -0
  215. data/test/support/action_controller/record_identifier.rb +2 -0
  216. data/test/support/assertions.rb +2 -0
  217. data/test/support/helpers.rb +6 -0
  218. data/test/support/http_method_compatibility.rb +2 -0
  219. data/test/support/integration.rb +3 -0
  220. data/test/support/webrat/integrations/rails.rb +2 -0
  221. data/test/test/controller_helpers_test.rb +16 -1
  222. data/test/test/integration_helpers_test.rb +2 -0
  223. data/test/test_helper.rb +2 -0
  224. data/test/test_models.rb +2 -0
  225. metadata +23 -5
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TrackableTest < ActiveSupport::TestCase
@@ -38,4 +40,23 @@ class TrackableTest < ActiveSupport::TestCase
38
40
  assert_nil user.last_sign_in_at
39
41
  assert_equal 0, user.sign_in_count
40
42
  end
43
+
44
+ test "update_tracked_fields! should not persist invalid records" do
45
+ user = UserWithValidations.new
46
+ request = mock
47
+ request.stubs(:remote_ip).returns("127.0.0.1")
48
+
49
+ assert_not user.update_tracked_fields!(request)
50
+ assert_not user.persisted?
51
+ end
52
+
53
+ test "update_tracked_fields! should not run model validations" do
54
+ user = User.new
55
+ request = mock
56
+ request.stubs(:remote_ip).returns("127.0.0.1")
57
+
58
+ user.expects(:after_validation_callback).never
59
+
60
+ assert_not user.update_tracked_fields!(request)
61
+ end
41
62
  end
@@ -1,4 +1,6 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
2
4
  require 'test_helper'
3
5
 
4
6
  class ValidatableTest < ActiveSupport::TestCase
@@ -31,7 +33,7 @@ class ValidatableTest < ActiveSupport::TestCase
31
33
 
32
34
  %w{invalid_email_format 123 $$$ () ☃}.each do |email|
33
35
  user.email = email
34
- assert user.invalid?, 'should be invalid with email ' << email
36
+ assert user.invalid?, "should be invalid with email #{email}"
35
37
  assert_equal 'is invalid', user.errors[:email].join
36
38
  end
37
39
 
@@ -42,7 +44,7 @@ class ValidatableTest < ActiveSupport::TestCase
42
44
  test 'should accept valid emails' do
43
45
  %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
44
46
  user = new_user(email: email)
45
- assert user.valid?, 'should be valid with email ' << email
47
+ assert user.valid?, "should be valid with email #{email}"
46
48
  assert_blank user.errors[:email]
47
49
  end
48
50
  end
data/test/models_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'test_models'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class OmniAuthConfigTest < ActiveSupport::TestCase
@@ -25,19 +27,21 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
25
27
  assert_equal OmniAuth::Strategies::Facebook, config.strategy_class
26
28
  end
27
29
 
28
- test "finds the strategy in OmniAuth's list by name" do
29
- NamedTestStrategy = Class.new
30
- NamedTestStrategy.send :include, OmniAuth::Strategy
31
- NamedTestStrategy.option :name, :the_one
30
+ class NamedTestStrategy
31
+ include OmniAuth::Strategy
32
+ option :name, :the_one
33
+ end
32
34
 
35
+ test "finds the strategy in OmniAuth's list by name" do
33
36
  config = Devise::OmniAuth::Config.new :the_one, [{}]
34
37
  assert_equal NamedTestStrategy, config.strategy_class
35
38
  end
36
39
 
37
- test "finds the strategy in OmniAuth's list by class name" do
38
- UnNamedTestStrategy = Class.new
39
- UnNamedTestStrategy.send :include, OmniAuth::Strategy
40
+ class UnNamedTestStrategy
41
+ include OmniAuth::Strategy
42
+ end
40
43
 
44
+ test "finds the strategy in OmniAuth's list by class name" do
41
45
  config = Devise::OmniAuth::Config.new :un_named_test_strategy, [{}]
42
46
  assert_equal UnNamedTestStrategy, config.strategy_class
43
47
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class OmniAuthRoutesTest < ActionController::TestCase
@@ -1,11 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Migration.verbose = false
2
4
  ActiveRecord::Base.logger = Logger.new(nil)
3
5
  ActiveRecord::Base.include_root_in_json = true
4
6
 
5
- ActiveRecord::Migrator.migrate(File.expand_path("../../rails_app/db/migrate/", __FILE__))
7
+ migrate_path = File.expand_path("../../rails_app/db/migrate/", __FILE__)
8
+ if Devise::Test.rails52?
9
+ ActiveRecord::MigrationContext.new(migrate_path).migrate
10
+ else
11
+ ActiveRecord::Migrator.migrate(migrate_path)
12
+ end
6
13
 
7
14
  class ActiveSupport::TestCase
8
- if Devise.rails5?
15
+ if Devise::Test.rails5?
9
16
  self.use_transactional_tests = true
10
17
  else
11
18
  # Let `after_commit` work with transactional fixtures, however this is not needed for Rails 5.
data/test/orm/mongoid.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mongoid/version'
2
4
 
3
5
  Mongoid.configure do |config|
@@ -8,6 +10,6 @@ end
8
10
 
9
11
  class ActiveSupport::TestCase
10
12
  setup do
11
- Mongoid.purge!
13
+ Mongoid.default_session.drop
12
14
  end
13
15
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'devise/parameter_sanitizer'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_admin'
2
4
 
3
5
  class Admin < ActiveRecord::Base
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Shim
2
4
  end
@@ -1,7 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user'
2
4
 
3
5
  class User < ActiveRecord::Base
4
6
  include Shim
5
7
  include SharedUser
6
- include ActiveModel::Serializers::Xml if Devise.rails5?
8
+ include ActiveModel::Serializers::Xml if Devise::Test.rails5?
9
+
10
+ validates :sign_in_count, presence: true
11
+
12
+ cattr_accessor :validations_performed
13
+
14
+ after_validation :after_validation_callback
15
+
16
+ def after_validation_callback
17
+ # used to check in our test if the validations were called
18
+ @@validations_performed = true
19
+ end
7
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user_without_omniauth'
2
4
 
3
5
  class UserOnEngine < ActiveRecord::Base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user_without_omniauth'
2
4
 
3
5
  class UserOnMainApp < ActiveRecord::Base
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shared_user'
4
+
5
+ class UserWithValidations < ActiveRecord::Base
6
+ self.table_name = 'users'
7
+ include Shim
8
+ include SharedUser
9
+
10
+ validates :email, presence: true
11
+ end
12
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "shared_user_without_email"
2
4
 
3
5
  class UserWithoutEmail < ActiveRecord::Base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admins::SessionsController < Devise::SessionsController
2
4
  def new
3
5
  flash[:special] = "Welcome to #{controller_path.inspect} controller!"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AdminsController < ApplicationController
2
4
  before_action :authenticate_admin!
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Filters added to this controller apply to all controllers in the application.
2
4
  # Likewise, all the methods added will be available for all controllers.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ApplicationWithFakeEngine < ApplicationController
2
4
  private
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Custom::RegistrationsController < Devise::RegistrationsController
2
4
  def new
3
5
  super do |resource|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HomeController < ApplicationController
2
4
  def index
3
5
  end
@@ -20,7 +22,7 @@ class HomeController < ApplicationController
20
22
  end
21
23
 
22
24
  def unauthenticated
23
- if Devise.rails5?
25
+ if Devise::Test.rails5?
24
26
  render body: "unauthenticated", status: :unauthorized
25
27
  else
26
28
  render text: "unauthenticated", status: :unauthorized
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Publisher::RegistrationsController < ApplicationController
2
4
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Publisher::SessionsController < ApplicationController
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2
4
  def facebook
3
5
  data = request.respond_to?(:get_header) ? request.get_header("omniauth.auth") : request.env["omniauth.auth"]
@@ -9,6 +11,6 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
9
11
  user = User.to_adapter.find_first(email: 'user@test.com')
10
12
  user.remember_me = true
11
13
  sign_in user
12
- render (Devise.rails5? ? :body : :text) => ""
14
+ render (Devise::Test.rails5? ? :body : :text) => ""
13
15
  end
14
16
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UsersController < ApplicationController
2
4
  prepend_before_action :current_user, only: :exhibit
3
5
  before_action :authenticate_user!, except: [:accept, :exhibit]
@@ -13,7 +15,7 @@ class UsersController < ApplicationController
13
15
  end
14
16
 
15
17
  def update_form
16
- render (Devise.rails5? ? :body : :text) => 'Update'
18
+ render (Devise::Test.rails5? ? :body : :text) => 'Update'
17
19
  end
18
20
 
19
21
  def accept
@@ -21,11 +23,11 @@ class UsersController < ApplicationController
21
23
  end
22
24
 
23
25
  def exhibit
24
- render (Devise.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
26
+ render (Devise::Test.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
25
27
  end
26
28
 
27
29
  def expire
28
30
  user_session['last_request_at'] = 31.minutes.ago.utc
29
- render (Devise.rails5? ? :body : :text) => 'User will be expired on next request'
31
+ render (Devise::Test.rails5? ? :body : :text) => 'User will be expired on next request'
30
32
  end
31
33
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Methods added to this helper will be available to all templates in the application.
2
4
  module ApplicationHelper
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Users::FromProcMailer < Devise::Mailer
2
4
  default from: proc { 'custom@example.com' }
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Users::Mailer < Devise::Mailer
2
4
  default from: 'custom@example.com'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Users::ReplyToMailer < Devise::Mailer
2
4
  default from: 'custom@example.com'
3
5
  default reply_to: 'custom_reply_to@example.com'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_admin'
2
4
 
3
5
  class Admin
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Shim
2
4
  extend ::ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user'
2
4
 
3
5
  class User
@@ -36,4 +38,13 @@ class User
36
38
  field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
37
39
  field :unlock_token, type: String # Only if unlock strategy is :email or :both
38
40
  field :locked_at, type: Time
41
+
42
+ cattr_accessor :validations_performed
43
+
44
+ after_validation :after_validation_callback
45
+
46
+ def after_validation_callback
47
+ # used to check in our test if the validations were called
48
+ @@validations_performed = true
49
+ end
39
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user_without_omniauth'
2
4
 
3
5
  class UserOnEngine
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user_without_omniauth'
2
4
 
3
5
  class UserOnMainApp
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "shared_user"
4
+
5
+ class UserWithValidations
6
+ include Mongoid::Document
7
+ include Shim
8
+ include SharedUser
9
+
10
+ field :username, type: String
11
+ field :facebook_token, type: String
12
+
13
+ ## Database authenticatable
14
+ field :email, type: String, default: ""
15
+ field :encrypted_password, type: String, default: ""
16
+
17
+ ## Recoverable
18
+ field :reset_password_token, type: String
19
+ field :reset_password_sent_at, type: Time
20
+
21
+ ## Rememberable
22
+ field :remember_created_at, type: Time
23
+
24
+ ## Trackable
25
+ field :sign_in_count, type: Integer, default: 0
26
+ field :current_sign_in_at, type: Time
27
+ field :last_sign_in_at, type: Time
28
+ field :current_sign_in_ip, type: String
29
+ field :last_sign_in_ip, type: String
30
+
31
+ ## Lockable
32
+ field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
33
+ field :unlock_token, type: String # Only if unlock strategy is :email or :both
34
+ field :locked_at, type: Time
35
+
36
+ validates :email, presence: true
37
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "shared_user_without_email"
2
4
 
3
5
  class UserWithoutEmail
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../boot', __FILE__)
2
4
 
3
5
  require "action_controller/railtie"
@@ -31,8 +33,10 @@ module RailsApp
31
33
  # config.assets.enabled = false
32
34
 
33
35
  config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
34
-
35
- if DEVISE_ORM == :active_record && (Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR >= 2)
36
+ rails_version = Gem::Version.new(Rails.version)
37
+ if DEVISE_ORM == :active_record &&
38
+ rails_version >= Gem::Version.new('4.2.0') &&
39
+ rails_version < Gem::Version.new('5.1.0')
36
40
  config.active_record.raise_in_transactional_callbacks = true
37
41
  end
38
42
 
@@ -1,11 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  unless defined?(DEVISE_ORM)
2
4
  DEVISE_ORM = (ENV["DEVISE_ORM"] || :active_record).to_sym
3
5
  end
4
6
 
5
7
  module Devise
6
- # Detection for minor differences between Rails 4 and 5 in tests.
7
- def self.rails5?
8
- Rails.version.start_with? '5'
8
+ module Test
9
+ # Detection for minor differences between Rails 4 and 5, 5.1, and 5.2 in tests.
10
+
11
+ def self.rails52?
12
+ Rails.version.start_with? '5.2'
13
+ end
14
+
15
+ def self.rails51?
16
+ Rails.version.start_with? '5.1'
17
+ end
18
+
19
+ def self.rails5?
20
+ Rails.version.start_with? '5'
21
+ end
9
22
  end
10
23
  end
11
24
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Load the rails application.
2
4
  require File.expand_path('../application', __FILE__)
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RailsApp::Application.configure do
2
4
  # Settings specified here will take precedence over those in config/application.rb.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RailsApp::Application.configure do
2
4
  # Settings specified here will take precedence over those in config/application.rb.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RailsApp::Application.configure do
2
4
  # Settings specified here will take precedence over those in config/application.rb.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Be sure to restart your server when you modify this file.
2
4
 
3
5
  # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "omniauth-facebook"
2
4
  require "omniauth-openid"
3
5
 
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveSupport::Inflector.inflections do |inflect|
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  config = Rails.application.config
2
4
 
3
5
  config.secret_key_base = 'd588e99efff13a86461fd6ab82327823ad2f8feb5dc217ce652cdd9f0dfc5eb4b5a62a92d24d2574d7d51dfb1ea8dd453ea54e00cf672159a13104a135422a10'
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RailsApp::Application.config.session_store :cookie_store, key: '_rails_app_session'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
2
4
  # Resources for testing
3
5
  resources :users, only: [:index] do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  superclass = ActiveRecord::Migration
2
4
  # TODO: Inherit from the 5.0 Migration class directly when we drop support for Rails 4.
3
5
  superclass = ActiveRecord::Migration[5.0] if superclass.respond_to?(:[])
@@ -1,4 +1,6 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is auto-generated from the current state of the database. Instead
3
5
  # of editing this file, please use the migrations feature of Active Record to
4
6
  # incrementally modify your database, and then regenerate this schema definition.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SharedAdmin
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -8,7 +10,11 @@ module SharedAdmin
8
10
  allow_unconfirmed_access_for: 2.weeks, reconfirmable: true
9
11
 
10
12
  validates_length_of :reset_password_token, minimum: 3, allow_blank: true
11
- validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
13
+ if Devise::Test.rails51?
14
+ validates_uniqueness_of :email, allow_blank: true, if: :will_save_change_to_email?
15
+ else
16
+ validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
17
+ end
12
18
  end
13
19
 
14
20
  def raw_confirmation_token
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SharedUser
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SharedUserWithoutEmail
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SharedUserWithoutOmniauth
2
4
  extend ActiveSupport::Concern
3
5
 
data/test/rails_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class RailsTest < ActiveSupport::TestCase