devise_invitable 1.3.1 → 1.3.2
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.
- data/README.rdoc +6 -6
- data/app/controllers/devise_invitable/registrations_controller.rb +1 -0
- data/lib/devise_invitable.rb +1 -2
- data/lib/devise_invitable/model.rb +5 -6
- data/lib/devise_invitable/parameter_sanitizer.rb +6 -2
- data/lib/devise_invitable/rails.rb +0 -2
- data/lib/devise_invitable/version.rb +1 -1
- data/test/functional/registrations_controller_test.rb +9 -0
- metadata +71 -55
- checksums.yaml +0 -7
- data/lib/devise_invitable/controllers/url_helpers.rb +0 -24
data/README.rdoc
CHANGED
@@ -63,7 +63,7 @@ or for a model that already exists, define a migration to add DeviseInvitable to
|
|
63
63
|
def change
|
64
64
|
add_column :users, :invitation_token, :string
|
65
65
|
add_column :users, :invitation_created_at, :datetime
|
66
|
-
add_column :users, :invitation_sent_at, :datetime
|
66
|
+
add_column :users, :invitation_sent_at, :datetime
|
67
67
|
add_column :users, :invitation_accepted_at, :datetime
|
68
68
|
add_column :users, :invitation_limit, :integer
|
69
69
|
add_column :users, :invited_by_id, :integer
|
@@ -81,7 +81,7 @@ If you previously used devise_invitable with a :limit on :invitation_token, remo
|
|
81
81
|
def up
|
82
82
|
change_column :users, :invitation_token, :string, :limit => nil
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
def down
|
86
86
|
change_column :users, :invitation_token, :string, :limit => 60
|
87
87
|
end
|
@@ -196,8 +196,8 @@ Here is an example of what your application controller might need to include in
|
|
196
196
|
:invitation_token)
|
197
197
|
end
|
198
198
|
end
|
199
|
-
|
200
|
-
|
199
|
+
|
200
|
+
|
201
201
|
== Usage
|
202
202
|
|
203
203
|
=== Send an invitation
|
@@ -214,7 +214,7 @@ If you want to create the invitation but not send it, you can set <tt>skip_invit
|
|
214
214
|
end
|
215
215
|
# => the record will be created, but the invitation email will not be sent
|
216
216
|
|
217
|
-
When skip_invitation is used, you must also then set the invitation_sent_at field when the user is sent their
|
217
|
+
When skip_invitation is used, you must also then set the invitation_sent_at field when the user is sent their
|
218
218
|
token. Failure to do so will yield "Invalid invitation token" errors when the user attempts to accept the invite.
|
219
219
|
You can set it like so:
|
220
220
|
|
@@ -374,4 +374,4 @@ Special thanks to rymai[http://github.com/rymai] for the Rails 3 support, his fo
|
|
374
374
|
|
375
375
|
== Copyright
|
376
376
|
|
377
|
-
Copyright (c)
|
377
|
+
Copyright (c) 2014 Sergio Cambra. See LICENSE for details.
|
@@ -7,6 +7,7 @@ class DeviseInvitable::RegistrationsController < Devise::RegistrationsController
|
|
7
7
|
self.resource = resource_class.where(:email => hash[:email], :encrypted_password => '').first
|
8
8
|
if self.resource
|
9
9
|
self.resource.attributes = hash
|
10
|
+
self.resource.send_confirmation_instructions if self.resource.confirmation_required_for_invited?
|
10
11
|
self.resource.accept_invitation
|
11
12
|
end
|
12
13
|
end
|
data/lib/devise_invitable.rb
CHANGED
@@ -4,7 +4,6 @@ module DeviseInvitable
|
|
4
4
|
autoload :Mapping, 'devise_invitable/mapping'
|
5
5
|
autoload :ParameterSanitizer, 'devise_invitable/parameter_sanitizer'
|
6
6
|
module Controllers
|
7
|
-
autoload :UrlHelpers, 'devise_invitable/controllers/url_helpers'
|
8
7
|
autoload :Registrations, 'devise_invitable/controllers/registrations'
|
9
8
|
autoload :Helpers, 'devise_invitable/controllers/helpers'
|
10
9
|
end
|
@@ -64,4 +63,4 @@ module Devise
|
|
64
63
|
@@invited_by_class_name = nil
|
65
64
|
end
|
66
65
|
|
67
|
-
Devise.add_module :invitable, :controller => :invitations, :model => 'devise_invitable/model', :route => :invitation
|
66
|
+
Devise.add_module :invitable, :controller => :invitations, :model => 'devise_invitable/model', :route => {:invitation => [nil, :new, :accept]}
|
@@ -37,8 +37,6 @@ module Devise
|
|
37
37
|
|
38
38
|
include ActiveSupport::Callbacks
|
39
39
|
define_callbacks :invitation_accepted
|
40
|
-
before_update :generate_confirmation_token, :if => :confirmation_required_for_invited?
|
41
|
-
after_update :send_on_create_confirmation_instructions, :if => :confirmation_required_for_invited?
|
42
40
|
|
43
41
|
attr_writer :skip_password
|
44
42
|
|
@@ -164,16 +162,17 @@ module Devise
|
|
164
162
|
self.invitation_token
|
165
163
|
end
|
166
164
|
|
165
|
+
def confirmation_required_for_invited?
|
166
|
+
respond_to?(:confirmation_required?, true) && confirmation_required?
|
167
|
+
end
|
168
|
+
|
167
169
|
protected
|
168
170
|
# Overriding the method in Devise's :validatable module so password is not required on inviting
|
169
171
|
def password_required?
|
170
172
|
!@skip_password && super
|
171
173
|
end
|
172
174
|
|
173
|
-
|
174
|
-
respond_to?(:confirmation_required?, true) && confirmation_required? && invitation_accepted?
|
175
|
-
end
|
176
|
-
|
175
|
+
|
177
176
|
# Checks if the invitation for the user is within the limit time.
|
178
177
|
# We do this by calculating if the difference between today and the
|
179
178
|
# invitation sent date does not exceed the invite for time configured.
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module DeviseInvitable
|
2
2
|
module ParameterSanitizer
|
3
3
|
def invite
|
4
|
-
|
4
|
+
permit self.for(:invite)
|
5
5
|
end
|
6
6
|
|
7
7
|
def accept_invitation
|
8
|
-
|
8
|
+
permit self.for(:accept_invitation)
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.included(base)
|
@@ -13,6 +13,10 @@ module DeviseInvitable
|
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
|
+
def permit(keys)
|
17
|
+
default_params.permit(*Array(keys))
|
18
|
+
end
|
19
|
+
|
16
20
|
def attributes_for_with_invitable(kind)
|
17
21
|
case kind
|
18
22
|
when :invite
|
@@ -2,10 +2,8 @@ module DeviseInvitable
|
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
|
4
4
|
ActiveSupport.on_load(:action_controller) do
|
5
|
-
include DeviseInvitable::Controllers::UrlHelpers
|
6
5
|
include DeviseInvitable::Controllers::Helpers
|
7
6
|
end
|
8
|
-
ActiveSupport.on_load(:action_view) { include DeviseInvitable::Controllers::UrlHelpers }
|
9
7
|
|
10
8
|
# We use to_prepare instead of after_initialize here because Devise is a Rails engine; its
|
11
9
|
# mailer is reloaded like the rest of the user's app. Got to make sure that our mailer methods
|
@@ -33,6 +33,15 @@ class DeviseInvitable::RegistrationsControllerTest < ActionController::TestCase
|
|
33
33
|
end
|
34
34
|
|
35
35
|
@invitee = User.where(:email => invitee_email).first
|
36
|
+
|
37
|
+
# do not send emails on model changes
|
38
|
+
assert_difference('ActionMailer::Base.deliveries.size', 0) do
|
39
|
+
@invitee.bio = "I am a robot"
|
40
|
+
@invitee.save!
|
41
|
+
@invitee.bio = "I am a human"
|
42
|
+
@invitee.save!
|
43
|
+
end
|
44
|
+
|
36
45
|
assert_present @invitee.encrypted_password
|
37
46
|
assert_not_nil @invitee.invitation_accepted_at
|
38
47
|
assert_nil @invitee.invitation_token
|
metadata
CHANGED
@@ -1,59 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_invitable
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Sergio Cambra
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2014-01-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
|
17
|
-
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
21
|
version: 1.1.0
|
22
22
|
type: :development
|
23
|
-
version_requirements: *id001
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: actionmailer
|
26
23
|
prerelease: false
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.1.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: actionmailer
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
31
37
|
version: 3.2.6
|
32
38
|
- - <
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5'
|
35
41
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: devise
|
39
42
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.2.6
|
49
|
+
- - <
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '5'
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: devise
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
44
59
|
version: 3.1.0
|
45
60
|
type: :runtime
|
46
|
-
|
47
|
-
|
48
|
-
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 3.1.0
|
68
|
+
description: It adds support for send invitations by email (it requires to be authenticated)
|
69
|
+
and accept the invitation by setting a password.
|
70
|
+
email:
|
49
71
|
- sergio@entrecables.com
|
50
72
|
executables: []
|
51
|
-
|
52
73
|
extensions: []
|
53
|
-
|
54
74
|
extra_rdoc_files: []
|
55
|
-
|
56
|
-
files:
|
75
|
+
files:
|
57
76
|
- app/controllers/devise/invitations_controller.rb
|
58
77
|
- app/controllers/devise_invitable/registrations_controller.rb
|
59
78
|
- app/views/devise/invitations/edit.html.erb
|
@@ -62,7 +81,6 @@ files:
|
|
62
81
|
- config/locales/en.yml
|
63
82
|
- lib/devise_invitable.rb
|
64
83
|
- lib/devise_invitable/controllers/helpers.rb
|
65
|
-
- lib/devise_invitable/controllers/url_helpers.rb
|
66
84
|
- lib/devise_invitable/inviter.rb
|
67
85
|
- lib/devise_invitable/mailer.rb
|
68
86
|
- lib/devise_invitable/mapping.rb
|
@@ -134,35 +152,34 @@ files:
|
|
134
152
|
- test/routes_test.rb
|
135
153
|
- test/test_helper.rb
|
136
154
|
homepage: https://github.com/scambra/devise_invitable
|
137
|
-
licenses:
|
155
|
+
licenses:
|
138
156
|
- MIT
|
139
|
-
metadata: {}
|
140
|
-
|
141
157
|
post_install_message:
|
142
|
-
rdoc_options:
|
158
|
+
rdoc_options:
|
143
159
|
- --main
|
144
160
|
- README.rdoc
|
145
161
|
- --charset=UTF-8
|
146
|
-
require_paths:
|
162
|
+
require_paths:
|
147
163
|
- lib
|
148
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
-
|
150
|
-
|
151
|
-
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
152
169
|
version: 1.8.6
|
153
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
-
|
155
|
-
|
156
|
-
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
157
175
|
version: 1.3.6
|
158
176
|
requirements: []
|
159
|
-
|
160
177
|
rubyforge_project:
|
161
|
-
rubygems_version:
|
178
|
+
rubygems_version: 1.8.23
|
162
179
|
signing_key:
|
163
|
-
specification_version:
|
180
|
+
specification_version: 3
|
164
181
|
summary: An invitation strategy for Devise
|
165
|
-
test_files:
|
182
|
+
test_files:
|
166
183
|
- test/functional/controller_helpers_test.rb
|
167
184
|
- test/functional/registrations_controller_test.rb
|
168
185
|
- test/generators/views_generator_test.rb
|
@@ -214,4 +231,3 @@ test_files:
|
|
214
231
|
- test/rails_app/script/rails
|
215
232
|
- test/routes_test.rb
|
216
233
|
- test/test_helper.rb
|
217
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA512:
|
3
|
-
metadata.gz: f63e9220602bf9934658384637404fdf89b2dfcd4f7b2b7ed77c31cddfbab70e6ca7fa89a2fa2dccf489db7b2e80ff6634cfadf320ee366769b42000da4e9ac5
|
4
|
-
data.tar.gz: d54dfb69ad95bf58f8a69c5c358ba64e9cfdf569536682f6e8614cc2f10550984657cb74353ab64a9fd59e1fed16991b9e8e4e5d120ec3583ad01f36b961bd1c
|
5
|
-
SHA1:
|
6
|
-
metadata.gz: 861482f2cb8845f6335441e94c3da04912511e1b
|
7
|
-
data.tar.gz: 54799f3b072ffc7dcd3080d5f394fa2c62e64990
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module DeviseInvitable
|
2
|
-
module Controllers
|
3
|
-
module UrlHelpers
|
4
|
-
[:path, :url].each do |path_or_url|
|
5
|
-
[nil, :new_, :accept_].each do |action|
|
6
|
-
class_eval <<-URL_HELPERS, __FILE__, __LINE__ + 1
|
7
|
-
def #{action}invitation_#{path_or_url}(resource, *args)
|
8
|
-
resource = case resource
|
9
|
-
when Symbol, String
|
10
|
-
resource
|
11
|
-
when Class
|
12
|
-
resource.name.underscore
|
13
|
-
else
|
14
|
-
resource.class.name.underscore
|
15
|
-
end
|
16
|
-
|
17
|
-
send("#{action}\#{resource}_invitation_#{path_or_url}", *args)
|
18
|
-
end
|
19
|
-
URL_HELPERS
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|