devise_invitable 1.7.4 → 2.0.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_invitable might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/{CHANGELOG → CHANGELOG.md} +54 -19
- data/README.rdoc +98 -111
- data/app/controllers/devise/invitations_controller.rb +41 -41
- data/app/controllers/devise_invitable/registrations_controller.rb +11 -11
- data/app/views/devise/invitations/edit.html.erb +14 -8
- data/app/views/devise/invitations/new.html.erb +11 -7
- data/app/views/devise/mailer/invitation_instructions.html.erb +2 -2
- data/app/views/devise/mailer/invitation_instructions.text.erb +2 -2
- data/config/locales/ar.yml +23 -0
- data/config/locales/da.yml +41 -0
- data/config/locales/de.yml +31 -0
- data/config/locales/en.yml +1 -1
- data/config/locales/es.yml +31 -0
- data/config/locales/et.yml +23 -0
- data/config/locales/fa.yml +31 -0
- data/config/locales/fr.yml +34 -0
- data/config/locales/it.yml +31 -0
- data/config/locales/ja.yml +32 -0
- data/config/locales/ko.yml +24 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/no.yml +17 -0
- data/config/locales/pl.yml +31 -0
- data/config/locales/pt-BR.yml +23 -0
- data/config/locales/pt.yml +23 -0
- data/config/locales/ru.yml +23 -0
- data/config/locales/tr.yml +24 -0
- data/config/locales/ua.yml +31 -0
- data/config/locales/vi.yml +25 -0
- data/config/locales/zh-HK.yml +31 -0
- data/config/locales/zh-TW.yml +31 -0
- data/lib/devise_invitable.rb +5 -4
- data/lib/devise_invitable/controllers/helpers.rb +3 -4
- data/lib/devise_invitable/inviter.rb +4 -3
- data/lib/devise_invitable/mailer.rb +1 -1
- data/lib/devise_invitable/mapping.rb +6 -5
- data/lib/devise_invitable/models.rb +48 -32
- data/lib/devise_invitable/parameter_sanitizer.rb +18 -18
- data/lib/devise_invitable/routes.rb +5 -5
- data/lib/devise_invitable/version.rb +1 -1
- data/lib/generators/active_record/devise_invitable_generator.rb +3 -3
- data/lib/generators/active_record/templates/migration.rb +0 -1
- data/lib/generators/devise_invitable/devise_invitable_generator.rb +4 -8
- data/lib/generators/devise_invitable/install_generator.rb +11 -14
- data/lib/generators/devise_invitable/templates/simple_form_for/invitations/edit.html.erb +10 -6
- data/lib/generators/devise_invitable/templates/simple_form_for/invitations/new.html.erb +10 -6
- data/lib/generators/devise_invitable/views_generator.rb +6 -6
- data/test/functional/registrations_controller_test.rb +24 -25
- data/test/generators/views_generator_test.rb +7 -6
- data/test/generators_test.rb +3 -2
- data/test/integration/invitation_remove_test.rb +8 -8
- data/test/integration/invitation_test.rb +46 -46
- data/test/integration_tests_helper.rb +8 -9
- data/test/model_tests_helper.rb +5 -5
- data/test/models/invitable_test.rb +123 -108
- data/test/models_test.rb +3 -3
- data/test/orm/active_record.rb +5 -1
- data/test/orm/mongoid.rb +2 -2
- data/test/rails_app/app/controllers/admins_controller.rb +4 -3
- data/test/rails_app/app/controllers/application_controller.rb +11 -10
- data/test/rails_app/app/controllers/free_invitations_controller.rb +12 -9
- data/test/rails_app/app/controllers/users_controller.rb +2 -2
- data/test/rails_app/app/models/admin.rb +7 -10
- data/test/rails_app/app/models/octopussy.rb +4 -4
- data/test/rails_app/app/models/user.rb +20 -20
- data/test/rails_app/app/views/admins/new.html.erb +9 -5
- data/test/rails_app/app/views/devise/sessions/new.html.erb +14 -6
- data/test/rails_app/app/views/free_invitations/new.html.erb +9 -5
- data/test/rails_app/app/views/layouts/application.html.erb +3 -4
- data/test/rails_app/app/views/users/invitations/new.html.erb +15 -9
- data/test/rails_app/config/application.rb +7 -6
- data/test/rails_app/config/boot.rb +2 -2
- data/test/rails_app/config/credentials.yml.enc +1 -0
- data/test/rails_app/config/initializers/devise.rb +4 -3
- data/test/rails_app/config/initializers/secret_token.rb +3 -1
- data/test/rails_app/config/initializers/session_store.rb +1 -1
- data/test/rails_app/config/initializers/wrap_parameters.rb +1 -1
- data/test/rails_app/config/master.key +1 -0
- data/test/rails_app/config/routes.rb +3 -3
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -2
- data/test/routes_test.rb +4 -4
- data/test/test_helper.rb +6 -19
- metadata +48 -23
@@ -1,10 +1,11 @@
|
|
1
1
|
module DeviseInvitable
|
2
2
|
module Mapping
|
3
3
|
private
|
4
|
-
|
5
|
-
options
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
|
5
|
+
def default_controllers(options)
|
6
|
+
options[:controllers] ||= {}
|
7
|
+
options[:controllers][:registrations] ||= 'devise_invitable/registrations'
|
8
|
+
super
|
9
|
+
end
|
9
10
|
end
|
10
11
|
end
|
@@ -10,15 +10,15 @@ module Devise
|
|
10
10
|
#
|
11
11
|
# Configuration:
|
12
12
|
#
|
13
|
-
# invite_for: The period the generated invitation token is valid
|
14
|
-
# this period, the invited resource won't be able to accept the invitation.
|
13
|
+
# invite_for: The period the generated invitation token is valid.
|
14
|
+
# After this period, the invited resource won't be able to accept the invitation.
|
15
15
|
# When invite_for is 0 (the default), the invitation won't expire.
|
16
16
|
#
|
17
17
|
# Examples:
|
18
18
|
#
|
19
19
|
# User.find(1).invited_to_sign_up? # => true/false
|
20
|
-
# User.invite!(:
|
21
|
-
# User.accept_invitation!(:
|
20
|
+
# User.invite!(email: 'someone@example.com') # => send invitation
|
21
|
+
# User.accept_invitation!(invitation_token: '...') # => accept invitation with a token
|
22
22
|
# User.find(1).accept_invitation! # => accept invitation
|
23
23
|
# User.find(1).invite! # => reset invitation status and send invitation again
|
24
24
|
module Invitable
|
@@ -31,34 +31,34 @@ module Devise
|
|
31
31
|
included do
|
32
32
|
include ::DeviseInvitable::Inviter
|
33
33
|
belongs_to_options = if Devise.invited_by_class_name
|
34
|
-
{:
|
34
|
+
{ class_name: Devise.invited_by_class_name }
|
35
35
|
else
|
36
|
-
{:
|
36
|
+
{ polymorphic: true }
|
37
37
|
end
|
38
38
|
if fk = Devise.invited_by_foreign_key
|
39
39
|
belongs_to_options[:foreign_key] = fk
|
40
40
|
end
|
41
41
|
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && self < ActiveRecord::Base
|
42
42
|
counter_cache = Devise.invited_by_counter_cache
|
43
|
-
belongs_to_options.merge! :
|
44
|
-
belongs_to_options.merge! :
|
43
|
+
belongs_to_options.merge! counter_cache: counter_cache if counter_cache
|
44
|
+
belongs_to_options.merge! optional: true if ActiveRecord::VERSION::MAJOR >= 5
|
45
45
|
elsif defined?(Mongoid) && defined?(Mongoid::Document) && self < Mongoid::Document && Mongoid::VERSION >= '6.0.0'
|
46
|
-
belongs_to_options.merge! :
|
46
|
+
belongs_to_options.merge! optional: true
|
47
47
|
end
|
48
|
-
belongs_to :invited_by, belongs_to_options
|
48
|
+
belongs_to :invited_by, **belongs_to_options
|
49
49
|
|
50
50
|
extend ActiveModel::Callbacks
|
51
51
|
define_model_callbacks :invitation_created
|
52
52
|
define_model_callbacks :invitation_accepted
|
53
53
|
|
54
|
-
scope :no_active_invitation, lambda { where(:
|
54
|
+
scope :no_active_invitation, lambda { where(invitation_token: nil) }
|
55
55
|
if defined?(Mongoid) && defined?(Mongoid::Document) && self < Mongoid::Document
|
56
56
|
scope :created_by_invite, lambda { where(:invitation_created_at.ne => nil) }
|
57
|
-
scope :invitation_not_accepted, lambda { where(:
|
57
|
+
scope :invitation_not_accepted, lambda { where(invitation_accepted_at: nil, :invitation_token.ne => nil) }
|
58
58
|
scope :invitation_accepted, lambda { where(:invitation_accepted_at.ne => nil) }
|
59
59
|
else
|
60
60
|
scope :created_by_invite, lambda { where(arel_table[:invitation_created_at].not_eq(nil)) }
|
61
|
-
scope :invitation_not_accepted, lambda { where(arel_table[:invitation_token].not_eq(nil)).where(:
|
61
|
+
scope :invitation_not_accepted, lambda { where(arel_table[:invitation_token].not_eq(nil)).where(invitation_accepted_at: nil) }
|
62
62
|
scope :invitation_accepted, lambda { where(arel_table[:invitation_accepted_at].not_eq(nil)) }
|
63
63
|
|
64
64
|
callbacks = [
|
@@ -95,12 +95,21 @@ module Devise
|
|
95
95
|
@accepting_invitation = true
|
96
96
|
run_callbacks :invitation_accepted do
|
97
97
|
self.accept_invitation
|
98
|
-
self.confirmed_at
|
98
|
+
self.confirmed_at ||= self.invitation_accepted_at if self.respond_to?(:confirmed_at=)
|
99
99
|
self.save
|
100
|
-
end.tap
|
100
|
+
end.tap do |saved|
|
101
|
+
self.rollback_accepted_invitation if !saved
|
102
|
+
@accepting_invitation = false
|
103
|
+
end
|
101
104
|
end
|
102
105
|
end
|
103
106
|
|
107
|
+
def rollback_accepted_invitation
|
108
|
+
self.invitation_token = self.invitation_token_was
|
109
|
+
self.invitation_accepted_at = nil
|
110
|
+
self.confirmed_at = nil if self.respond_to?(:confirmed_at=)
|
111
|
+
end
|
112
|
+
|
104
113
|
# Verify wheather a user is created by invitation, irrespective to invitation status
|
105
114
|
def created_by_invite?
|
106
115
|
invitation_created_at.present?
|
@@ -149,7 +158,7 @@ module Devise
|
|
149
158
|
self.downcase_keys if new_record_and_responds_to?(:downcase_keys)
|
150
159
|
self.strip_whitespace if new_record_and_responds_to?(:strip_whitespace)
|
151
160
|
|
152
|
-
if save(:
|
161
|
+
if save(validate: false)
|
153
162
|
self.invited_by.decrement_invitation_limit! if !was_invited and self.invited_by.present?
|
154
163
|
deliver_invitation(options) unless skip_invitation
|
155
164
|
end
|
@@ -218,6 +227,14 @@ module Devise
|
|
218
227
|
time + self.class.invite_for
|
219
228
|
end
|
220
229
|
|
230
|
+
def add_taken_error(key)
|
231
|
+
errors.add(key, :taken)
|
232
|
+
end
|
233
|
+
|
234
|
+
def invitation_taken?
|
235
|
+
!invited_to_sign_up?
|
236
|
+
end
|
237
|
+
|
221
238
|
protected
|
222
239
|
|
223
240
|
def block_from_invitation?
|
@@ -257,7 +274,7 @@ module Devise
|
|
257
274
|
end
|
258
275
|
|
259
276
|
def generate_invitation_token!
|
260
|
-
generate_invitation_token && save(:
|
277
|
+
generate_invitation_token && save(validate: false)
|
261
278
|
end
|
262
279
|
|
263
280
|
def new_record_and_responds_to?(method)
|
@@ -281,7 +298,7 @@ module Devise
|
|
281
298
|
# email is resent unless resend_invitation is set to false.
|
282
299
|
# Attributes must contain the user's email, other attributes will be
|
283
300
|
# set in the record
|
284
|
-
def _invite(attributes={}, invited_by=nil, options = {}, &block)
|
301
|
+
def _invite(attributes = {}, invited_by = nil, options = {}, &block)
|
285
302
|
invite_key_array = invite_key_fields
|
286
303
|
attributes_hash = {}
|
287
304
|
invite_key_array.each do |k,v|
|
@@ -300,9 +317,9 @@ module Devise
|
|
300
317
|
invitable.valid? if self.validate_on_invite
|
301
318
|
if invitable.new_record?
|
302
319
|
invitable.clear_errors_on_valid_keys if !self.validate_on_invite
|
303
|
-
elsif
|
320
|
+
elsif invitable.invitation_taken? || !self.resend_invitation
|
304
321
|
invite_key_array.each do |key|
|
305
|
-
invitable.
|
322
|
+
invitable.add_taken_error(key)
|
306
323
|
end
|
307
324
|
end
|
308
325
|
|
@@ -311,12 +328,12 @@ module Devise
|
|
311
328
|
[invitable, mail]
|
312
329
|
end
|
313
330
|
|
314
|
-
def invite!(attributes={}, invited_by=nil, options = {}, &block)
|
331
|
+
def invite!(attributes = {}, invited_by = nil, options = {}, &block)
|
315
332
|
attr_hash = ActiveSupport::HashWithIndifferentAccess.new(attributes.to_h)
|
316
333
|
_invite(attr_hash, invited_by, options, &block).first
|
317
334
|
end
|
318
335
|
|
319
|
-
def invite_mail!(attributes={}, invited_by=nil, options = {}, &block)
|
336
|
+
def invite_mail!(attributes = {}, invited_by = nil, options = {}, &block)
|
320
337
|
_invite(attributes, invited_by, options, &block).last
|
321
338
|
end
|
322
339
|
|
@@ -325,7 +342,7 @@ module Devise
|
|
325
342
|
# the record. If not user is found, returns a new user containing an
|
326
343
|
# error in invitation_token attribute.
|
327
344
|
# Attributes must contain invitation_token, password and confirmation
|
328
|
-
def accept_invitation!(attributes={})
|
345
|
+
def accept_invitation!(attributes = {})
|
329
346
|
original_token = attributes.delete(:invitation_token)
|
330
347
|
invitable = find_by_invitation_token(original_token, false)
|
331
348
|
if invitable.errors.empty?
|
@@ -374,15 +391,14 @@ module Devise
|
|
374
391
|
|
375
392
|
private
|
376
393
|
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
394
|
+
# The random password, as set after an invitation, must conform
|
395
|
+
# to any password format validation rules of the application.
|
396
|
+
# This default fixes the most common scenarios: Passwords must contain
|
397
|
+
# lower + upper case, a digit and a symbol.
|
398
|
+
# For more unusual rules, this method can be overridden.
|
399
|
+
def random_password
|
400
|
+
'aA1!' + Devise.friendly_token[0, 20]
|
401
|
+
end
|
386
402
|
end
|
387
403
|
end
|
388
404
|
end
|
@@ -12,27 +12,27 @@ module DeviseInvitable
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
if defined?(Devise::BaseSanitizer)
|
16
|
+
def permit(keys)
|
17
|
+
default_params.permit(*Array(keys))
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
def attributes_for(kind)
|
21
|
+
case kind
|
22
|
+
when :invite
|
23
|
+
resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields : []
|
24
|
+
when :accept_invitation
|
25
|
+
[:password, :password_confirmation, :invitation_token]
|
26
|
+
else
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
else
|
31
|
+
def initialize(resource_class, resource_name, params)
|
27
32
|
super
|
33
|
+
permit(:invite, keys: (resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields : []) )
|
34
|
+
permit(:accept_invitation, keys: [:password, :password_confirmation, :invitation_token] )
|
28
35
|
end
|
29
36
|
end
|
30
|
-
else
|
31
|
-
def initialize(resource_class, resource_name, params)
|
32
|
-
super
|
33
|
-
permit(:invite, keys: (resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields : []) )
|
34
|
-
permit(:accept_invitation, keys: [:password, :password_confirmation, :invitation_token] )
|
35
|
-
end
|
36
|
-
end
|
37
37
|
end
|
38
38
|
end
|
@@ -2,13 +2,13 @@ module ActionDispatch::Routing
|
|
2
2
|
class Mapper
|
3
3
|
|
4
4
|
protected
|
5
|
+
|
5
6
|
def devise_invitation(mapping, controllers)
|
6
|
-
resource :invitation, :
|
7
|
-
:
|
8
|
-
get :edit, :
|
9
|
-
get :destroy, :
|
7
|
+
resource :invitation, only: [:new, :create, :update],
|
8
|
+
path: mapping.path_names[:invitation], controller: controllers[:invitations] do
|
9
|
+
get :edit, path: mapping.path_names[:accept], as: :accept
|
10
|
+
get :destroy, path: mapping.path_names[:remove], as: :remove
|
10
11
|
end
|
11
12
|
end
|
12
|
-
|
13
13
|
end
|
14
14
|
end
|
@@ -3,14 +3,14 @@ require 'rails/generators/active_record'
|
|
3
3
|
module ActiveRecord
|
4
4
|
module Generators
|
5
5
|
class DeviseInvitableGenerator < ActiveRecord::Generators::Base
|
6
|
-
source_root File.expand_path(
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
7
|
|
8
8
|
def copy_devise_migration
|
9
|
-
migration_template
|
9
|
+
migration_template 'migration.rb', "db/migrate/devise_invitable_add_to_#{table_name}.rb", migration_version: migration_version
|
10
10
|
end
|
11
11
|
|
12
12
|
def migration_version
|
13
|
-
if Rails
|
13
|
+
if Rails::VERSION::MAJOR >= 5
|
14
14
|
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
15
15
|
end
|
16
16
|
end
|
@@ -8,7 +8,6 @@ class DeviseInvitableAddTo<%= table_name.camelize %> < ActiveRecord::Migration<%
|
|
8
8
|
t.integer :invitation_limit
|
9
9
|
t.references :invited_by, polymorphic: true
|
10
10
|
t.integer :invitations_count, default: 0
|
11
|
-
t.index :invitations_count
|
12
11
|
t.index :invitation_token, unique: true # for invitable
|
13
12
|
t.index :invited_by_id
|
14
13
|
end
|
@@ -1,17 +1,13 @@
|
|
1
1
|
module DeviseInvitable
|
2
2
|
module Generators
|
3
3
|
class DeviseInvitableGenerator < Rails::Generators::NamedBase
|
4
|
-
namespace
|
4
|
+
namespace 'devise_invitable'
|
5
5
|
|
6
|
-
desc
|
7
|
-
|
8
|
-
# def devise_generate_model
|
9
|
-
# invoke "devise", [name]
|
10
|
-
# end
|
6
|
+
desc 'Add :invitable directive in the given model. Also generate migration for ActiveRecord'
|
11
7
|
|
12
8
|
def inject_devise_invitable_content
|
13
|
-
path = File.join(
|
14
|
-
inject_into_file(path,
|
9
|
+
path = File.join('app', 'models', "#{file_path}.rb")
|
10
|
+
inject_into_file(path, 'invitable, :', after: 'devise :') if File.exists?(path)
|
15
11
|
end
|
16
12
|
|
17
13
|
hook_for :orm
|
@@ -1,26 +1,22 @@
|
|
1
1
|
module DeviseInvitable
|
2
2
|
module Generators
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
|
-
source_root File.expand_path(
|
5
|
-
desc
|
6
|
-
|
7
|
-
# def devise_install
|
8
|
-
# invoke "devise:install"
|
9
|
-
# end
|
4
|
+
source_root File.expand_path('../../templates', __FILE__)
|
5
|
+
desc 'Add DeviseInvitable config variables to the Devise initializer and copy DeviseInvitable locale files to your application.'
|
10
6
|
|
11
7
|
def add_config_options_to_initializer
|
12
|
-
devise_initializer_path =
|
8
|
+
devise_initializer_path = 'config/initializers/devise.rb'
|
13
9
|
if File.exist?(devise_initializer_path)
|
14
10
|
old_content = File.read(devise_initializer_path)
|
15
11
|
|
16
12
|
if old_content.match(Regexp.new(/^\s# ==> Configuration for :invitable\n/))
|
17
13
|
false
|
18
14
|
else
|
19
|
-
inject_into_file(devise_initializer_path, :
|
15
|
+
inject_into_file(devise_initializer_path, before: " # ==> Configuration for :confirmable\n") do
|
20
16
|
<<-CONTENT
|
21
17
|
# ==> Configuration for :invitable
|
22
|
-
# The period the generated invitation token is valid
|
23
|
-
# this period, the invited resource won't be able to accept the invitation.
|
18
|
+
# The period the generated invitation token is valid.
|
19
|
+
# After this period, the invited resource won't be able to accept the invitation.
|
24
20
|
# When invite_for is 0 (the default), the invitation won't expire.
|
25
21
|
# config.invite_for = 2.weeks
|
26
22
|
|
@@ -36,10 +32,11 @@ module DeviseInvitable
|
|
36
32
|
|
37
33
|
# The key to be used to check existing users when sending an invitation
|
38
34
|
# and the regexp used to test it when validate_on_invite is not set.
|
39
|
-
# config.invite_key = {:
|
40
|
-
# config.invite_key = {:
|
35
|
+
# config.invite_key = { email: /\\A[^@]+@[^@]+\\z/ }
|
36
|
+
# config.invite_key = { email: /\\A[^@]+@[^@]+\\z/, username: nil }
|
41
37
|
|
42
|
-
#
|
38
|
+
# Ensure that invited record is valid.
|
39
|
+
# The invitation won't be sent if this check fails.
|
43
40
|
# Default: false
|
44
41
|
# config.validate_on_invite = true
|
45
42
|
|
@@ -73,7 +70,7 @@ CONTENT
|
|
73
70
|
end
|
74
71
|
|
75
72
|
def copy_locale
|
76
|
-
copy_file
|
73
|
+
copy_file '../../../config/locales/en.yml', 'config/locales/devise_invitable.en.yml'
|
77
74
|
end
|
78
75
|
|
79
76
|
end
|
@@ -1,11 +1,15 @@
|
|
1
|
-
<h2><%= t
|
1
|
+
<h2><%= t "devise.invitations.edit.header" %></h2>
|
2
2
|
|
3
|
-
<%= simple_form_for
|
4
|
-
<%=
|
3
|
+
<%= simple_form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :put }) do |f| %>
|
4
|
+
<%= f.error_notification %>
|
5
5
|
<%= f.hidden_field :invitation_token %>
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
<div class="form-inputs">
|
8
|
+
<%= f.input :password %>
|
9
|
+
<%= f.input :password_confirmation %>
|
10
|
+
</div>
|
9
11
|
|
10
|
-
|
12
|
+
<div class="form-actions">
|
13
|
+
<%= f.button :submit, t("devise.invitations.edit.submit_button") %>
|
14
|
+
</div>
|
11
15
|
<% end %>
|
@@ -1,11 +1,15 @@
|
|
1
1
|
<h2><%= t "devise.invitations.new.header" %></h2>
|
2
2
|
|
3
|
-
<%= simple_form_for
|
4
|
-
<%=
|
3
|
+
<%= simple_form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post }) do |f| %>
|
4
|
+
<%= f.error_notification %>
|
5
5
|
|
6
|
-
<% resource.class.invite_key_fields.each do |field| -%>
|
7
|
-
|
8
|
-
|
6
|
+
<% resource.class.invite_key_fields.each do |field| -%>
|
7
|
+
<div class="form-inputs">
|
8
|
+
<%= f.input field %>
|
9
|
+
</div>
|
10
|
+
<% end -%>
|
9
11
|
|
10
|
-
|
12
|
+
<div class="form-actions">
|
13
|
+
<%= f.button :submit, t("devise.invitations.new.submit_button") %>
|
14
|
+
</div>
|
11
15
|
<% end %>
|
@@ -11,17 +11,17 @@ module DeviseInvitable
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class SimpleFormForGenerator < InvitationViewsGenerator
|
14
|
-
source_root File.expand_path(
|
14
|
+
source_root File.expand_path('../templates/simple_form_for', __FILE__)
|
15
15
|
end
|
16
16
|
|
17
17
|
class FormForGenerator < InvitationViewsGenerator
|
18
|
-
source_root File.expand_path(
|
18
|
+
source_root File.expand_path('../../../../app/views/devise', __FILE__)
|
19
19
|
end
|
20
20
|
|
21
21
|
class MailerViewsGenerator < Rails::Generators::Base
|
22
22
|
include ::Devise::Generators::ViewPathTemplates
|
23
|
-
source_root File.expand_path(
|
24
|
-
desc
|
23
|
+
source_root File.expand_path('../../../../app/views/devise', __FILE__)
|
24
|
+
desc 'Copies Devise mail erb views to your application.'
|
25
25
|
hide!
|
26
26
|
|
27
27
|
def copy_views
|
@@ -31,11 +31,11 @@ module DeviseInvitable
|
|
31
31
|
|
32
32
|
class ViewsGenerator < Rails::Generators::Base
|
33
33
|
desc 'Copies all DeviseInvitable views to your application.'
|
34
|
-
argument :scope, :
|
34
|
+
argument :scope, required: false, default: nil, desc: 'The scope to copy views to'
|
35
35
|
|
36
36
|
invoke MailerViewsGenerator
|
37
37
|
|
38
|
-
hook_for :form_builder, :
|
38
|
+
hook_for :form_builder, aliases: '-b', desc: 'Form builder to be used', default: defined?(SimpleForm) ? 'simple_form_for' : 'form_for'
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|