devise_invitable 1.3.5 → 1.3.6
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_invitable might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/lib/devise_invitable/model.rb +3 -2
- data/lib/devise_invitable/rails.rb +6 -4
- data/lib/devise_invitable/version.rb +1 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- data/test/functional/registrations_controller_test.rb +6 -6
- data/test/generators_test.rb +6 -6
- data/test/integration/invitation_test.rb +2 -2
- data/test/integration_tests_helper.rb +2 -2
- data/test/models/invitable_test.rb +54 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA512:
|
3
|
-
metadata.gz: 47b3e5072420f492fdb25c04d955860feae08b9cc8f58b06f67d2cfc00405f46b101f7111c1d7bd40231bf3d5d8db398f9ee4f05d9498014b49be2bea9138c6b
|
4
|
-
data.tar.gz: ee0e6d336eb94aa339bf1396017c599940749826c97482f552a3b43cc83c7aad55394d739f1925b7dbd0759f3f5ac664695d87f35deb15e5ea370812b316ab24
|
5
2
|
SHA1:
|
6
|
-
|
7
|
-
|
3
|
+
data.tar.gz: 9282d045f4e6fc42c754615dbcc9a95fac696ede
|
4
|
+
metadata.gz: 8579c7e08fb78e773bcbfe81d3623c83e7828987
|
5
|
+
SHA512:
|
6
|
+
data.tar.gz: 5042ceb001b324f6ff4e0651bd504e076c67dabd535cae0735fbe1037823da44c30754a1a09b720625f2593c81b976c44376558f83b7664f864814fb8139342f
|
7
|
+
metadata.gz: 30ec1b5af69268d5480d919726b4c6a154a120efa076c47e792fd6c2fbc688486eb740c7a7776da56955ebf3cf1c4284df6985dc418ccf21e31dd7679f9ef9ae
|
@@ -114,7 +114,8 @@ module Devise
|
|
114
114
|
def self.confirmation_required?; false; end
|
115
115
|
end
|
116
116
|
|
117
|
-
|
117
|
+
yield self if block_given?
|
118
|
+
generate_invitation_token if self.invitation_token.nil? || (!@skip_invitation || @raw_invitation_token.nil?)
|
118
119
|
self.invitation_created_at = Time.now.utc
|
119
120
|
self.invitation_sent_at = self.invitation_created_at unless @skip_invitation
|
120
121
|
self.invited_by = invited_by if invited_by
|
@@ -174,7 +175,7 @@ module Devise
|
|
174
175
|
!@skip_password && super
|
175
176
|
end
|
176
177
|
|
177
|
-
|
178
|
+
|
178
179
|
# Checks if the invitation for the user is within the limit time.
|
179
180
|
# We do this by calculating if the difference between today and the
|
180
181
|
# invitation sent date does not exceed the invite for time configured.
|
@@ -7,12 +7,14 @@ module DeviseInvitable
|
|
7
7
|
|
8
8
|
# We use to_prepare instead of after_initialize here because Devise is a Rails engine; its
|
9
9
|
# mailer is reloaded like the rest of the user's app. Got to make sure that our mailer methods
|
10
|
-
# are included each time Devise
|
10
|
+
# are included each time Devise.mailer is (re)loaded.
|
11
11
|
config.to_prepare do
|
12
|
-
|
13
|
-
Devise
|
12
|
+
Devise.mailer.send :include, DeviseInvitable::Mailer
|
13
|
+
unless Devise.mailer.ancestors.include?(Devise::Mailers::Helpers)
|
14
|
+
Devise.mailer.send :include, Devise::Mailers::Helpers
|
15
|
+
end
|
14
16
|
end
|
15
|
-
# extend mapping with after_initialize
|
17
|
+
# extend mapping with after_initialize because it's not reloaded
|
16
18
|
config.after_initialize do
|
17
19
|
Devise::Mapping.send :include, DeviseInvitable::Mapping
|
18
20
|
Devise::ParameterSanitizer.send :include, DeviseInvitable::ParameterSanitizer
|
@@ -25,7 +25,7 @@ class DeviseInvitableAddTo<%= table_name.camelize %> < ActiveRecord::Migration
|
|
25
25
|
t.remove_references :invited_by, :polymorphic => true
|
26
26
|
t.remove :invitations_count, :invitation_limit, :invitation_sent_at, :invitation_accepted_at, :invitation_token, :invitation_created_at
|
27
27
|
end
|
28
|
-
change_column_null
|
28
|
+
change_column_null :<%= table_name %>, :encrypted_password, false
|
29
29
|
<% if class_name.constantize.columns_hash['password_salt'] -%>
|
30
30
|
change_column_null :<%= table_name %>, :password_salt,false
|
31
31
|
<% end -%>
|
@@ -25,7 +25,7 @@ class DeviseInvitable::RegistrationsControllerTest < ActionController::TestCase
|
|
25
25
|
sign_out @issuer
|
26
26
|
|
27
27
|
@invitee = User.where(:email => invitee_email).first
|
28
|
-
|
28
|
+
assert @invitee.encrypted_password.blank?, "the password should be unset"
|
29
29
|
|
30
30
|
# sign_up the invitee
|
31
31
|
assert_difference('ActionMailer::Base.deliveries.size') do
|
@@ -42,13 +42,13 @@ class DeviseInvitable::RegistrationsControllerTest < ActionController::TestCase
|
|
42
42
|
@invitee.save!
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
assert @invitee.encrypted_password.present?
|
46
46
|
assert_not_nil @invitee.invitation_accepted_at
|
47
47
|
assert_nil @invitee.invitation_token
|
48
|
-
|
49
|
-
|
48
|
+
assert @invitee.invited_by_id.present?
|
49
|
+
assert @invitee.invited_by_type.present?
|
50
50
|
assert !@invitee.confirmed?
|
51
|
-
|
51
|
+
assert @invitee.confirmation_token.present?
|
52
52
|
end
|
53
53
|
|
54
54
|
test "not invitable resources can register" do
|
@@ -58,7 +58,7 @@ class DeviseInvitable::RegistrationsControllerTest < ActionController::TestCase
|
|
58
58
|
post :create, :admin => {:email => invitee_email, :password => "1password"}
|
59
59
|
|
60
60
|
@invitee = Admin.where(:email => invitee_email).first
|
61
|
-
|
61
|
+
assert @invitee.encrypted_password.present?
|
62
62
|
end
|
63
63
|
|
64
64
|
test "missing params on a create should not cause an error" do
|
data/test/generators_test.rb
CHANGED
@@ -17,18 +17,18 @@ class GeneratorsTest < ActiveSupport::TestCase
|
|
17
17
|
|
18
18
|
test "rails g devise_invitable:install" do
|
19
19
|
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable:install -p`
|
20
|
-
assert @output.match(%r{(inject|insert)
|
21
|
-
assert @output.match(%r|create
|
20
|
+
assert @output.match(%r{(inject|insert).* config/initializers/devise\.rb\n})
|
21
|
+
assert @output.match(%r|create.* config/locales/devise_invitable\.en\.yml\n|)
|
22
22
|
end
|
23
23
|
|
24
24
|
test "rails g devise_invitable Octopussy" do
|
25
25
|
@output = `cd #{RAILS_APP_PATH} && rails g devise_invitable Octopussy -p`
|
26
|
-
assert @output.match(%r{(inject|insert)
|
27
|
-
assert @output.match(%r|invoke
|
26
|
+
assert @output.match(%r{(inject|insert).* app/models/octopussy\.rb\n})
|
27
|
+
assert @output.match(%r|invoke.* #{DEVISE_ORM}\n|)
|
28
28
|
if DEVISE_ORM == :active_record
|
29
|
-
assert @output.match(%r|create
|
29
|
+
assert @output.match(%r|create.* db/migrate/\d{14}_devise_invitable_add_to_octopussies\.rb\n|)
|
30
30
|
elsif DEVISE_ORM == :mongoid
|
31
|
-
assert !@output.match(%r|create
|
31
|
+
assert !@output.match(%r|create.* db/migrate/\d{14}_devise_invitable_add_to_octopussies\.rb\n|)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -80,7 +80,7 @@ class InvitationTest < ActionDispatch::IntegrationTest
|
|
80
80
|
end
|
81
81
|
assert_equal user_invitation_path, current_path
|
82
82
|
assert page.has_css?('#error_explanation li', :text => /Password .*doesn\'t match/)
|
83
|
-
|
83
|
+
assert user.encrypted_password.blank?
|
84
84
|
end
|
85
85
|
|
86
86
|
test 'not authenticated user with valid data should be able to change his password' do
|
@@ -99,7 +99,7 @@ class InvitationTest < ActionDispatch::IntegrationTest
|
|
99
99
|
end
|
100
100
|
assert_equal user_invitation_path, current_path
|
101
101
|
assert page.has_css?('#error_explanation')
|
102
|
-
|
102
|
+
assert user.encrypted_password.blank?
|
103
103
|
|
104
104
|
set_password :visit => false
|
105
105
|
assert page.has_css?('p#notice', :text => 'Your password was set successfully. You are now signed in.')
|
@@ -28,14 +28,40 @@ class InvitableTest < ActiveSupport::TestCase
|
|
28
28
|
test 'should regenerate invitation token each time' do
|
29
29
|
user = new_user
|
30
30
|
user.invite!
|
31
|
-
|
31
|
+
|
32
32
|
assert_not_nil user.invitation_token
|
33
|
+
assert_not_nil user.raw_invitation_token
|
33
34
|
assert_not_nil user.invitation_created_at
|
35
|
+
|
34
36
|
3.times do
|
35
37
|
user = User.find(user.id)
|
36
|
-
|
37
|
-
|
38
|
-
|
38
|
+
|
39
|
+
assert_not_same user.invitation_token, lambda {
|
40
|
+
user.invite!
|
41
|
+
user.invitation_token
|
42
|
+
}.call
|
43
|
+
assert_not_nil user.raw_invitation_token
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'should regenerate invitation token each time even if "skip_invitation" was true' do
|
48
|
+
user = new_user
|
49
|
+
user.skip_invitation = true
|
50
|
+
user.invite!
|
51
|
+
|
52
|
+
assert_not_nil user.invitation_token
|
53
|
+
assert_not_nil user.invitation_created_at
|
54
|
+
|
55
|
+
3.times do
|
56
|
+
user = User.find(user.id)
|
57
|
+
user.skip_invitation = true
|
58
|
+
|
59
|
+
assert_not_same user.invitation_token, lambda {
|
60
|
+
user.invite!
|
61
|
+
user.invitation_token
|
62
|
+
}.call
|
63
|
+
assert_not_nil user.invitation_token
|
64
|
+
assert_not_nil user.raw_invitation_token
|
39
65
|
end
|
40
66
|
end
|
41
67
|
|
@@ -157,21 +183,21 @@ class InvitableTest < ActiveSupport::TestCase
|
|
157
183
|
|
158
184
|
test 'should clear invitation token and set invitation_accepted_at while accepting the password' do
|
159
185
|
user = User.invite!(:email => "valid@email.com")
|
160
|
-
|
186
|
+
assert user.invitation_token.present?
|
161
187
|
assert_nil user.invitation_accepted_at
|
162
188
|
user.accept_invitation!
|
163
189
|
user.reload
|
164
190
|
assert_nil user.invitation_token
|
165
|
-
|
191
|
+
assert user.invitation_accepted_at.present?
|
166
192
|
end
|
167
193
|
|
168
194
|
test 'should not clear invitation token or set accepted_at if record is invalid' do
|
169
195
|
user = User.invite!(:email => "valid@email.com")
|
170
|
-
|
196
|
+
assert user.invitation_token.present?
|
171
197
|
assert_nil user.invitation_accepted_at
|
172
198
|
User.accept_invitation!(:invitation_token => user.invitation_token, :password => '123456789', :password_confirmation => '987654321')
|
173
199
|
user.reload
|
174
|
-
|
200
|
+
assert user.invitation_token.present?
|
175
201
|
assert_nil user.invitation_accepted_at
|
176
202
|
end
|
177
203
|
|
@@ -182,8 +208,8 @@ class InvitableTest < ActiveSupport::TestCase
|
|
182
208
|
user.reset_password_sent_at = Time.now.utc
|
183
209
|
user.save
|
184
210
|
|
185
|
-
|
186
|
-
|
211
|
+
assert user.reset_password_token.present?
|
212
|
+
assert user.invitation_token.present?
|
187
213
|
User.reset_password_by_token(:reset_password_token => token, :password => '123456789', :password_confirmation => '123456789')
|
188
214
|
assert_nil user.reload.reset_password_token
|
189
215
|
assert_nil user.reload.invitation_token
|
@@ -197,11 +223,11 @@ class InvitableTest < ActiveSupport::TestCase
|
|
197
223
|
user.reset_password_sent_at = Time.now.utc
|
198
224
|
user.save
|
199
225
|
|
200
|
-
|
201
|
-
|
226
|
+
assert user.reset_password_token.present?
|
227
|
+
assert user.invitation_token.present?
|
202
228
|
User.reset_password_by_token(:reset_password_token => token, :password => '123456789', :password_confirmation => '12345678')
|
203
|
-
|
204
|
-
|
229
|
+
assert user.reload.reset_password_token.present?
|
230
|
+
assert user.reload.invitation_token.present?
|
205
231
|
assert user.invited_to_sign_up?
|
206
232
|
end
|
207
233
|
|
@@ -212,7 +238,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
212
238
|
user.reset_password_sent_at = Time.now.utc
|
213
239
|
user.save
|
214
240
|
|
215
|
-
|
241
|
+
assert user.reset_password_token.present?
|
216
242
|
assert_nil user.invitation_token
|
217
243
|
User.reset_password_by_token(:reset_password_token => token, :password => '123456789', :password_confirmation => '123456789')
|
218
244
|
assert_nil user.reload.invitation_token
|
@@ -231,7 +257,7 @@ class InvitableTest < ActiveSupport::TestCase
|
|
231
257
|
test 'should return a record with invitation token and no errors to send invitation by email' do
|
232
258
|
invited_user = User.invite!(:email => "valid@email.com")
|
233
259
|
assert invited_user.errors.blank?
|
234
|
-
|
260
|
+
assert invited_user.invitation_token.present?
|
235
261
|
assert_equal 'valid@email.com', invited_user.email
|
236
262
|
assert invited_user.persisted?
|
237
263
|
end
|
@@ -472,7 +498,18 @@ class InvitableTest < ActiveSupport::TestCase
|
|
472
498
|
assert_no_difference('ActionMailer::Base.deliveries.size') do
|
473
499
|
user.invite!
|
474
500
|
end
|
475
|
-
|
501
|
+
assert user.invitation_created_at.present?
|
502
|
+
assert_nil user.invitation_sent_at
|
503
|
+
end
|
504
|
+
|
505
|
+
test 'user.invite! should not send an invitation if we want to skip the invitation with block' do
|
506
|
+
user = new_user
|
507
|
+
assert_no_difference('ActionMailer::Base.deliveries.size') do
|
508
|
+
user.invite! do |u|
|
509
|
+
u.skip_invitation = true
|
510
|
+
end
|
511
|
+
end
|
512
|
+
assert user.invitation_created_at.present?
|
476
513
|
assert_nil user.invitation_sent_at
|
477
514
|
end
|
478
515
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_invitable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergio Cambra
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-07-21 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|