devise_invitable 2.0.5 → 2.0.8

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

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0517f954240bfc3c1fd255df0d502d5fdbd461d4e695cd0c5ec725854af50dcf
4
- data.tar.gz: 239b887a32e66dbc38fbf1e04625def2f1dea325fcc6d20af0e1befd066dd000
3
+ metadata.gz: 1d79a9c9139872616687b6479929d53572f9634188eeb9a83a7fdb56c9a56de0
4
+ data.tar.gz: dd37eafdb0b8a074c11ab51c25b8faea114992cf640e599edb5b9fefec0eb9a3
5
5
  SHA512:
6
- metadata.gz: 957006ebe6e94715459f941b52004a1002e72005e9344baca46679398bc34e360604e3a8a205d9099a4ff5015be597c1c02a89055137db6c12f10ecf03949db7
7
- data.tar.gz: 17200aa6cf76d5abf07de1e4c0987f197140087a7a3210df0bf948a6098602eeeab05d65983cc69ef2185f2de741813ebc778a28d476a86bc5b1527bbd918f4c
6
+ metadata.gz: a275438d6791f2f3e06d3d7a0b83db15142ce0a24337f928e08ee7c9818aa517efaa070c73e2bfc280a28ef8cf1104a9aa6711c8325479c02a794a1b963ec9d5
7
+ data.tar.gz: cef6663d0ce1f61b87dcc73cf151afa55a4054983c8a580d2a94446887f5018a5ba604eea0a656495e2ae3755bc437457c1d109d1ae8faf775182417c4ca313f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 2.0.8
2
+ - Fix for turbo stream
3
+
4
+ ## 2.0.7
5
+ - Allow customizing invalid_token_path_for, the path to redirect users who try to accept with invalid token
6
+ - Don't override registrations controller in routes if module option is used
7
+ - Fix typo in spanish translation, add Catalan translation ([#857](https://github.com/scambra/devise_invitable/pull/857))
8
+ - Fix for ruby 3.2.0
9
+
10
+ ## 2.0.6
11
+ - Fix submit form failure with turbolinks, fixes ([#865](https://github.com/scambra/devise_invitable/issues/865))
12
+ - Fix obsolete symbols in German translation ([#864](https://github.com/scambra/devise_invitable/pull/864))
13
+ - Allow to provide validate option to the instance method "invite!", default to follow the setting validate_on_invite
14
+
1
15
  ## 2.0.5
2
16
  - Fix NoMethodError in random_password when validatable is not used ([#850](https://github.com/scambra/devise_invitable/pull/850))
3
17
 
data/README.rdoc CHANGED
@@ -1,5 +1,7 @@
1
1
  = DeviseInvitable
2
- {<img src="https://badge.fury.io/rb/devise_invitable.svg"/>}[http://badge.fury.io/rb/devise_invitable] {<img src="https://travis-ci.org/scambra/devise_invitable.svg"/>}[https://travis-ci.org/scambra/devise_invitable] {<img src="https://codeclimate.com/github/scambra/devise_invitable/badges/gpa.svg"/>}[https://codeclimate.com/github/scambra/devise_invitable]
2
+ {<img src="https://badge.fury.io/rb/devise_invitable.svg"/>}[http://badge.fury.io/rb/devise_invitable]
3
+ {<img src="https://github.com/scambra/devise_invitable/actions/workflows/ci.yml/badge.svg"/>}[https://github.com/scambra/devise_invitable/actions/workflows/ci.yml]
4
+ {<img src="https://codeclimate.com/github/scambra/devise_invitable/badges/gpa.svg"/>}[https://codeclimate.com/github/scambra/devise_invitable]
3
5
 
4
6
  It adds support to Devise[https://github.com/plataformatec/devise] for sending invitations by email (it requires to be authenticated) and accept the invitation setting the password.
5
7
 
@@ -35,14 +37,14 @@ Replace MODEL by the class name you want to add DeviseInvitable, like <tt>User</
35
37
 
36
38
  Follow the walkthrough for Devise and after it's done, follow this walkthrough.
37
39
 
38
- == Devise Configuration
40
+ ==== Devise Configuration
39
41
  Add <tt>:invitable</tt> to the <tt>devise</tt> call in your model (we’re assuming here you already have a User model with some Devise modules):
40
42
 
41
43
  class User < ActiveRecord::Base
42
44
  devise :database_authenticatable, :confirmable, :invitable
43
45
  end
44
46
 
45
- == ActiveRecord Migration
47
+ ==== ActiveRecord Migration
46
48
  Add <tt>t.invitable</tt> to your Devise model migration:
47
49
 
48
50
  create_table :users do
@@ -217,6 +219,61 @@ Here is an example of what your application controller might need to include in
217
219
  devise_parameter_sanitizer.permit(:accept_invitation, keys: [:first_name, :last_name, :phone])
218
220
  end
219
221
 
222
+ Here is an example setting a User's first name, last name, and role for a custom invitation:
223
+
224
+ #Configuring the InvitationsController to accept :first_name, :last_name, and :role
225
+
226
+ class Users::InvitationsController < Devise::InvitationsController
227
+ before_action :configure_permitted_parameters
228
+
229
+ protected
230
+
231
+ # Permit the new params here.
232
+ def configure_permitted_parameters
233
+ devise_parameter_sanitizer.permit(:invite, keys: [:first_name, :last_name, :role])
234
+ end
235
+ end
236
+
237
+ #Define your roles in the User model
238
+
239
+ class User < ApplicationRecord
240
+ has_many :models
241
+
242
+ enum role: {Role 1 Name: 0, Role 2 Name: 1, Role 3 Name: 2, etc...}
243
+ end
244
+
245
+ #In the Invitation view
246
+
247
+ <h2><%= t "devise.invitations.new.header" %></h2>
248
+
249
+ <%= form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post }) do |f| %>
250
+ <%= render "devise/shared/error_messages", resource: resource %>
251
+ <% resource.class.invite_key_fields.each do |field| -%>
252
+ <div class="field">
253
+ <%= f.label field %><br />
254
+ <%= f.text_field field %>
255
+ </div>
256
+ <% end %>
257
+
258
+ <div class="field">
259
+ <%= f.label :first_name %>
260
+ <%= f.text_field :first_name %>
261
+ </div>
262
+
263
+ <div class="field">
264
+ <%= f.label :last_name %>
265
+ <%= f.text_field :last_name %>
266
+ </div>
267
+
268
+ <div class="field">
269
+ <%= f.label :role %>
270
+ <%= f.select :role, options_for_select(User.roles.map { |key, value| [key.humanize, key] }), {prompt: "Select Role"} %>
271
+ </div>
272
+
273
+ <div class="actions">
274
+ <%= f.submit t("devise.invitations.new.submit_button") %>
275
+ </div>
276
+ <% end %>
220
277
 
221
278
  == Usage
222
279
 
@@ -284,7 +341,7 @@ To accept an invitation with a token use the <tt>accept_invitation!</tt> class m
284
341
  === Callbacks
285
342
 
286
343
  A callback event is fired before and after an invitation is created (User#invite!) or accepted (User#accept_invitation!). For example, in your resource model you can add:
287
-
344
+ # Note: callbacks should be placed after devise: :invitable is specified.
288
345
  before_invitation_created :email_admins
289
346
  after_invitation_accepted :email_invited_by
290
347
 
@@ -315,7 +372,7 @@ After an invitation is created and sent, the inviter will be redirected to <tt>a
315
372
 
316
373
  After an invitation is accepted, the invitee will be redirected to <tt>after_accept_path_for(resource)</tt>, which is the same path as <tt>signed_in_root_path</tt> by default. If you want to override the path, override invitations controller and define <tt>after_accept_path_for</tt> method. This is useful in the common case that a user is invited to a specific location in your application. More on {Devise's README}[https://github.com/plataformatec/devise], "Controller filters and helpers" section.
317
374
 
318
- The invitation email includes a link to accept the invitation that looks like this: <tt>/users/invitation/accept?invitation_token=abcd123</tt>. When clicked, the invited must set a password in order to accept its invitation. Note that if the <tt>invitation_token</tt> is not present or not valid, the invited is redirected to <tt>after_sign_out_path_for(resource_name)</tt>.
375
+ The invitation email includes a link to accept the invitation that looks like this: <tt>/users/invitation/accept?invitation_token=abcd123</tt>. When clicked, the invited must set a password in order to accept its invitation. Note that if the <tt>invitation_token</tt> is not present or not valid, the invited is redirected to <tt>invalid_token_path_for(resource_name)</tt>, which by default is <tt>after_sign_out_path_for(resource_name)</tt>.
319
376
 
320
377
  The controller sets the <tt>invited_by_id</tt> attribute for the new user to the current user. This will let you easily keep track of who invited whom.
321
378
 
@@ -31,7 +31,7 @@ class Devise::InvitationsController < DeviseController
31
31
  respond_with resource, location: after_invite_path_for(current_inviter, resource)
32
32
  end
33
33
  else
34
- respond_with_navigational(resource) { render :new }
34
+ respond_with(resource)
35
35
  end
36
36
  end
37
37
 
@@ -63,7 +63,7 @@ class Devise::InvitationsController < DeviseController
63
63
  end
64
64
  else
65
65
  resource.invitation_token = raw_invitation_token
66
- respond_with_navigational(resource) { render :edit }
66
+ respond_with(resource)
67
67
  end
68
68
  end
69
69
 
@@ -99,7 +99,7 @@ class Devise::InvitationsController < DeviseController
99
99
  def resource_from_invitation_token
100
100
  unless params[:invitation_token] && self.resource = resource_class.find_by_invitation_token(params[:invitation_token], true)
101
101
  set_flash_message(:alert, :invitation_token_invalid) if is_flashing_format?
102
- redirect_to after_sign_out_path_for(resource_name)
102
+ redirect_to invalid_token_path_for(resource_name)
103
103
  end
104
104
  end
105
105
 
@@ -0,0 +1,32 @@
1
+
2
+ ca:
3
+ devise:
4
+ failure:
5
+ invited: "Tens una invitació pendent, accepta-la per acabar de crear el teu compte."
6
+ invitations:
7
+ send_instructions: "S'ha enviat una invitació a %{email}."
8
+ invitation_token_invalid: "La invitació no es vàlida!"
9
+ updated: "S'ha configurat la seva contrasenya i s'ha ingressat al sistema"
10
+ updated_not_active: "La seva contrasenya s'ha configurat correctament."
11
+ no_invitations_remaining: "No queden invitacions"
12
+ invitation_removed: "S'ha retirat la seva invitació"
13
+ new:
14
+ header: "Enviar Invitació"
15
+ submit_button: "Envia una invitació"
16
+ edit:
17
+ header: "Establir contrasenya"
18
+ submit_button: "Guardar la meva contrasenya"
19
+ mailer:
20
+ invitation_instructions:
21
+ subject: "Instruccions de la invitació"
22
+ hello: "Hola %{email}"
23
+ someone_invited_you: "Has estat invitat a %{url}, pots acceptar-ho seguint el següent enllaç"
24
+ accept: "Aceptar la invitació"
25
+ accept_until: "Aquesta invitació expirarà en %{due_date}."
26
+ ignore: "Si no li interessa aquesta invitació, simplement ignori aquest correu. No es crearà el teu compte fins que accedeixis a l'anterior enllaç i creïs una contrasenya"
27
+ time:
28
+ formats:
29
+ devise:
30
+ mailer:
31
+ invitation_instructions:
32
+ accept_until_format: "%d de %B de %Y, %H:%M"
@@ -1,31 +1,31 @@
1
- de:
2
- devise:
3
- failure:
4
- invited: "Du hast bereits eine Einladung erhalten. Nimm die Einladung an um dein Nutzerkonto zu erstellen."
5
- invitations:
6
- send_instructions: "Eine Einladung wurde an %{email} verschickt."
7
- invitation_token_invalid: "Der Einladungs-Code ist ungültig!"
8
- updated: "Dein Passwort wurde gesetzt. Du bist nun angemeldet."
9
- updated_not_active: "Dein Passwort wurde gesetzt."
10
- no_invitations_remaining: "Es gibt keine weiteren Einladungen"
11
- invitation_removed: "Deine Einladung wurde gelöscht."
12
- new:
13
- header: "Einladung schicken"
14
- submit_button: "Einladung schicken"
15
- edit:
16
- header: "Setze ein Passwort"
17
- submit_button: "Passwort setzen"
18
- mailer:
19
- invitation_instructions:
20
- subject: "Einladung"
21
- hello: "Hallo %{email}"
22
- someone_invited_you: "Jemand hat dich zu %{url} eingeladen. Du kannst die Einladung mit dem Link unten annehmen."
23
- accept: "Einladung annehmen"
24
- accept_until: "Diese Einladung ist gültig bis zum %{due_date}."
25
- ignore: "Wenn du die Einladung nicht annehmen willst, ignoriere diese E-Mail einfach.<br />\nEs wird kein Benutzerkonto erstellt solange du nicht die Einladung mi↪ttels des Links oben annimmst."
26
- time:
27
- formats:
28
- devise:
29
- mailer:
30
- invitation_instructions:
31
- accept_until_format: "%d. %B %Y %H:%M"
1
+ de:
2
+ devise:
3
+ failure:
4
+ invited: "Du hast bereits eine Einladung erhalten. Nimm die Einladung an um dein Nutzerkonto zu erstellen."
5
+ invitations:
6
+ send_instructions: "Eine Einladung wurde an %{email} verschickt."
7
+ invitation_token_invalid: "Der Einladungs-Code ist ungültig!"
8
+ updated: "Dein Passwort wurde gesetzt. Du bist nun angemeldet."
9
+ updated_not_active: "Dein Passwort wurde gesetzt."
10
+ no_invitations_remaining: "Es gibt keine weiteren Einladungen"
11
+ invitation_removed: "Deine Einladung wurde gelöscht."
12
+ new:
13
+ header: "Einladung schicken"
14
+ submit_button: "Einladung schicken"
15
+ edit:
16
+ header: "Setze ein Passwort"
17
+ submit_button: "Passwort setzen"
18
+ mailer:
19
+ invitation_instructions:
20
+ subject: "Einladung"
21
+ hello: "Hallo %{email}"
22
+ someone_invited_you: "Jemand hat dich zu %{url} eingeladen. Du kannst die Einladung mit dem Link unten annehmen."
23
+ accept: "Einladung annehmen"
24
+ accept_until: "Diese Einladung ist gültig bis zum %{due_date}."
25
+ ignore: "Wenn du die Einladung nicht annehmen willst, ignoriere diese E-Mail einfach. Es wird kein Benutzerkonto erstellt solange du nicht die Einladung mittels des Links oben annimmst."
26
+ time:
27
+ formats:
28
+ devise:
29
+ mailer:
30
+ invitation_instructions:
31
+ accept_until_format: "%d. %B %Y %H:%M"
@@ -17,7 +17,7 @@ es:
17
17
  submit_button: "Guardar mi contraseña"
18
18
  mailer:
19
19
  invitation_instructions:
20
- subject: "Instruciones de la invitación"
20
+ subject: "Instrucciones de la invitación"
21
21
  hello: "Hola %{email}"
22
22
  someone_invited_you: "Has sido invitado a %{url}, puedes aceptarlo siguiendo el siguiente enlace"
23
23
  accept: "Aceptar la invitación"
@@ -12,6 +12,10 @@ module DeviseInvitable::Controllers::Helpers
12
12
  signed_in_root_path(resource)
13
13
  end
14
14
 
15
+ def invalid_token_path_for(resource_name)
16
+ after_sign_out_path_for(resource_name)
17
+ end
18
+
15
19
  protected
16
20
 
17
21
  def authenticate_inviter!
@@ -3,8 +3,10 @@ module DeviseInvitable
3
3
  private
4
4
 
5
5
  def default_controllers(options)
6
- options[:controllers] ||= {}
7
- options[:controllers][:registrations] ||= 'devise_invitable/registrations'
6
+ unless options[:module]
7
+ options[:controllers] ||= {}
8
+ options[:controllers][:registrations] ||= 'devise_invitable/registrations'
9
+ end
8
10
  super
9
11
  end
10
12
  end
@@ -158,7 +158,8 @@ module Devise
158
158
  self.downcase_keys if new_record_and_responds_to?(:downcase_keys)
159
159
  self.strip_whitespace if new_record_and_responds_to?(:strip_whitespace)
160
160
 
161
- if save(validate: false)
161
+ validate = options.key?(:validate) ? options[:validate] : self.class.validate_on_invite
162
+ if save(validate: validate)
162
163
  self.invited_by.decrement_invitation_limit! if !was_invited and self.invited_by.present?
163
164
  deliver_invitation(options) unless skip_invitation
164
165
  end
@@ -324,7 +325,7 @@ module Devise
324
325
  end
325
326
 
326
327
  yield invitable if block_given?
327
- mail = invitable.invite!(nil, options) if invitable.errors.empty?
328
+ mail = invitable.invite!(nil, options.merge(validate: false)) if invitable.errors.empty?
328
329
  [invitable, mail]
329
330
  end
330
331
 
@@ -1,3 +1,3 @@
1
1
  module DeviseInvitable
2
- VERSION = '2.0.5'.freeze
2
+ VERSION = '2.0.8'.freeze
3
3
  end
@@ -7,7 +7,7 @@ module DeviseInvitable
7
7
 
8
8
  def inject_devise_invitable_content
9
9
  path = File.join('app', 'models', "#{file_path}.rb")
10
- inject_into_file(path, 'invitable, :', after: 'devise :') if File.exists?(path)
10
+ inject_into_file(path, 'invitable, :', after: 'devise :') if File.exist?(path)
11
11
  end
12
12
 
13
13
  hook_for :orm
@@ -41,4 +41,14 @@ class ControllerHelpersTest < ActionController::TestCase
41
41
  assert Devise::InvitationsController.method_defined? :after_accept_path_for
42
42
  assert !Devise::InvitationsController.instance_methods(false).include?(:after_accept_path_for)
43
43
  end
44
+
45
+ test 'invalid token path defaults to after sign out path' do
46
+ assert_equal @controller.send(:after_sign_out_path_for, :user), @controller.invalid_token_path_for(:user)
47
+ end
48
+
49
+ test 'invalid token path is customizable from application controller' do
50
+ custom_path = 'customized/invalid/token/path'
51
+ @controller.instance_eval "def invalid_token_path_for(resource_name) '#{custom_path}' end"
52
+ assert_equal @controller.invalid_token_path_for(:user), custom_path
53
+ end
44
54
  end
@@ -98,7 +98,7 @@ class InvitationTest < ActionDispatch::IntegrationTest
98
98
  fill_in 'Password confirmation', with: 'other_password'
99
99
  end
100
100
  assert_equal user_invitation_path, current_path
101
- assert page.has_css?('#error_explanation li', text: /Password .*doesn\'t match/)
101
+ assert page.has_css?('#error_explanation li', text: /Password .*doesn['’]t match/)
102
102
  assert !user.confirmed?
103
103
  end
104
104
 
@@ -102,7 +102,7 @@ class InvitationMailTest < ActionMailer::TestCase
102
102
  def initialize(*args); end
103
103
  def deliver; end
104
104
  end
105
- Devise.mailer = CustomMailer
105
+ Devise.mailer = 'InvitationMailTest::CustomMailer'
106
106
 
107
107
  User.invite!({ email: 'valid@email.com' }, nil, { invited_at: Time.now })
108
108
  end
@@ -1,6 +1,6 @@
1
1
  class ActiveSupport::TestCase
2
2
  def setup_mailer
3
- Devise.mailer = Devise::Mailer
3
+ Devise.mailer = 'Devise::Mailer'
4
4
  ActionMailer::Base.deliveries = []
5
5
  end
6
6
 
@@ -89,12 +89,12 @@ class InvitableTest < ActiveSupport::TestCase
89
89
  user.invite!
90
90
  old_invitation_created_at = 3.days.ago
91
91
  old_invitation_sent_at = 3.days.ago
92
- user.update_attributes(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
92
+ user.update(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
93
93
  3.times do
94
94
  user.invite!
95
95
  refute_equal old_invitation_sent_at, user.invitation_sent_at
96
96
  refute_equal old_invitation_created_at, user.invitation_created_at
97
- user.update_attributes(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
97
+ user.update(invitation_sent_at: old_invitation_sent_at, invitation_created_at: old_invitation_created_at)
98
98
  end
99
99
  end
100
100
 
@@ -371,10 +371,10 @@ class InvitableTest < ActiveSupport::TestCase
371
371
  existing_user.save(validate: false)
372
372
  user = User.invite!(email: 'valid@email.com')
373
373
  assert_equal user, existing_user
374
- assert_equal ['has already been taken'], user.errors[:email]
374
+ assert_equal [{error: :taken}], user.errors.details[:email]
375
375
  same_user = User.invite!(email: 'valid@email.com')
376
376
  assert_equal same_user, existing_user
377
- assert_equal ['has already been taken'], same_user.errors[:email]
377
+ assert_equal [{error: :taken}], same_user.errors.details[:email]
378
378
  end
379
379
 
380
380
  test 'should return a record with errors if user with pending invitation was found by e-mail' do
@@ -388,7 +388,7 @@ class InvitableTest < ActiveSupport::TestCase
388
388
 
389
389
  user = User.invite!(email: 'valid@email.com')
390
390
  assert_equal user, existing_user
391
- assert_equal ['has already been taken'], user.errors[:email]
391
+ assert_equal [{error: :taken}], user.errors.details[:email]
392
392
  ensure
393
393
  User.resend_invitation = resend_invitation
394
394
  end
@@ -402,7 +402,7 @@ class InvitableTest < ActiveSupport::TestCase
402
402
  existing_user.save(validate: false)
403
403
  user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
404
404
  assert_equal user, existing_user
405
- assert_equal ['has already been taken'], user.errors[:email]
405
+ assert_equal [{error: :taken}], user.errors.details[:email]
406
406
  refute_empty user.errors[:username]
407
407
  ensure
408
408
  User.validate_on_invite = validate_on_invite
@@ -412,13 +412,13 @@ class InvitableTest < ActiveSupport::TestCase
412
412
  test 'should return a new record with errors if e-mail is blank' do
413
413
  invited_user = User.invite!(email: '')
414
414
  assert invited_user.new_record?
415
- assert_equal ["can't be blank"], invited_user.errors[:email]
415
+ assert_equal [{error: :blank}], invited_user.errors.details[:email]
416
416
  end
417
417
 
418
418
  test 'should return a new record with errors if e-mail is invalid' do
419
419
  invited_user = User.invite!(email: 'invalid_email')
420
420
  assert invited_user.new_record?
421
- assert_equal ['is invalid'], invited_user.errors[:email]
421
+ assert_equal [{error: :invalid}], invited_user.errors.details[:email]
422
422
  end
423
423
 
424
424
  test 'should set all attributes with errors if e-mail is invalid' do
@@ -438,13 +438,13 @@ class InvitableTest < ActiveSupport::TestCase
438
438
  test 'should return a new record with errors if no invitation_token is found' do
439
439
  invited_user = User.accept_invitation!(invitation_token: 'invalid_token')
440
440
  assert invited_user.new_record?
441
- assert_equal ['is invalid'], invited_user.errors[:invitation_token]
441
+ assert_equal [{error: :invalid}], invited_user.errors.details[:invitation_token]
442
442
  end
443
443
 
444
444
  test 'should return a new record with errors if invitation_token is blank' do
445
445
  invited_user = User.accept_invitation!(invitation_token: '')
446
446
  assert invited_user.new_record?
447
- assert_equal ["can't be blank"], invited_user.errors[:invitation_token]
447
+ assert_equal [{error: :blank}], invited_user.errors.details[:invitation_token]
448
448
  end
449
449
 
450
450
  test 'should return record with errors if invitation_token has expired' do
@@ -454,7 +454,7 @@ class InvitableTest < ActiveSupport::TestCase
454
454
  invited_user.save(validate: false)
455
455
  user = User.accept_invitation!(invitation_token: Thread.current[:token])
456
456
  assert_equal user, invited_user
457
- assert_equal ['is invalid'], user.errors[:invitation_token]
457
+ assert_equal [{error: :invalid}], user.errors.details[:invitation_token]
458
458
  end
459
459
 
460
460
  test 'should allow record modification using block' do
@@ -1,7 +1,12 @@
1
1
  ActiveRecord::Migration.verbose = false
2
2
  ActiveRecord::Base.logger = Logger.new(nil)
3
3
 
4
- if defined? ActiveRecord::MigrationContext # rails >= 5.2
4
+ if ActiveRecord::VERSION::MAJOR >= 6
5
+ ActiveRecord::MigrationContext.new(
6
+ File.expand_path('../../rails_app/db/migrate/', __FILE__),
7
+ ActiveRecord::Base.connection.schema_migration
8
+ ).migrate
9
+ elsif defined? ActiveRecord::MigrationContext # rails >= 5.2
5
10
  ActiveRecord::MigrationContext.new(File.expand_path('../../rails_app/db/migrate/', __FILE__)).migrate
6
11
  else
7
12
  ActiveRecord::Migrator.migrate(File.expand_path('../../rails_app/db/migrate/', __FILE__))
data/test/test_helper.rb CHANGED
@@ -7,7 +7,7 @@ require "rails_app/config/environment"
7
7
  require 'rails/test_help'
8
8
  require "orm/#{DEVISE_ORM}"
9
9
  require 'capybara/rails'
10
- require 'mocha/setup'
10
+ require 'mocha/minitest'
11
11
 
12
12
  ActionMailer::Base.delivery_method = :test
13
13
  ActionMailer::Base.perform_deliveries = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_invitable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergio Cambra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-19 00:00:00.000000000 Z
11
+ date: 2023-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -70,6 +70,7 @@ files:
70
70
  - app/views/devise/mailer/invitation_instructions.html.erb
71
71
  - app/views/devise/mailer/invitation_instructions.text.erb
72
72
  - config/locales/ar.yml
73
+ - config/locales/ca.yml
73
74
  - config/locales/da.yml
74
75
  - config/locales/de.yml
75
76
  - config/locales/en.yml
@@ -186,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
187
  - !ruby/object:Gem::Version
187
188
  version: '0'
188
189
  requirements: []
189
- rubygems_version: 3.0.8
190
+ rubygems_version: 3.3.7
190
191
  signing_key:
191
192
  specification_version: 4
192
193
  summary: An invitation strategy for Devise