devise_invitable 1.7.4 → 2.0.3

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.

Files changed (83) hide show
  1. checksums.yaml +5 -5
  2. data/{CHANGELOG → CHANGELOG.md} +54 -19
  3. data/README.rdoc +98 -111
  4. data/app/controllers/devise/invitations_controller.rb +41 -41
  5. data/app/controllers/devise_invitable/registrations_controller.rb +11 -11
  6. data/app/views/devise/invitations/edit.html.erb +14 -8
  7. data/app/views/devise/invitations/new.html.erb +11 -7
  8. data/app/views/devise/mailer/invitation_instructions.html.erb +2 -2
  9. data/app/views/devise/mailer/invitation_instructions.text.erb +2 -2
  10. data/config/locales/ar.yml +23 -0
  11. data/config/locales/da.yml +41 -0
  12. data/config/locales/de.yml +31 -0
  13. data/config/locales/en.yml +1 -1
  14. data/config/locales/es.yml +31 -0
  15. data/config/locales/et.yml +23 -0
  16. data/config/locales/fa.yml +31 -0
  17. data/config/locales/fr.yml +34 -0
  18. data/config/locales/it.yml +31 -0
  19. data/config/locales/ja.yml +32 -0
  20. data/config/locales/ko.yml +24 -0
  21. data/config/locales/nl.yml +32 -0
  22. data/config/locales/no.yml +17 -0
  23. data/config/locales/pl.yml +31 -0
  24. data/config/locales/pt-BR.yml +23 -0
  25. data/config/locales/pt.yml +23 -0
  26. data/config/locales/ru.yml +23 -0
  27. data/config/locales/tr.yml +24 -0
  28. data/config/locales/ua.yml +31 -0
  29. data/config/locales/vi.yml +25 -0
  30. data/config/locales/zh-HK.yml +31 -0
  31. data/config/locales/zh-TW.yml +31 -0
  32. data/lib/devise_invitable.rb +5 -4
  33. data/lib/devise_invitable/controllers/helpers.rb +3 -4
  34. data/lib/devise_invitable/inviter.rb +4 -3
  35. data/lib/devise_invitable/mailer.rb +1 -1
  36. data/lib/devise_invitable/mapping.rb +6 -5
  37. data/lib/devise_invitable/models.rb +48 -32
  38. data/lib/devise_invitable/parameter_sanitizer.rb +18 -18
  39. data/lib/devise_invitable/routes.rb +5 -5
  40. data/lib/devise_invitable/version.rb +1 -1
  41. data/lib/generators/active_record/devise_invitable_generator.rb +3 -3
  42. data/lib/generators/active_record/templates/migration.rb +0 -1
  43. data/lib/generators/devise_invitable/devise_invitable_generator.rb +4 -8
  44. data/lib/generators/devise_invitable/install_generator.rb +11 -14
  45. data/lib/generators/devise_invitable/templates/simple_form_for/invitations/edit.html.erb +10 -6
  46. data/lib/generators/devise_invitable/templates/simple_form_for/invitations/new.html.erb +10 -6
  47. data/lib/generators/devise_invitable/views_generator.rb +6 -6
  48. data/test/functional/registrations_controller_test.rb +24 -25
  49. data/test/generators/views_generator_test.rb +7 -6
  50. data/test/generators_test.rb +3 -2
  51. data/test/integration/invitation_remove_test.rb +8 -8
  52. data/test/integration/invitation_test.rb +46 -46
  53. data/test/integration_tests_helper.rb +8 -9
  54. data/test/model_tests_helper.rb +5 -5
  55. data/test/models/invitable_test.rb +123 -108
  56. data/test/models_test.rb +3 -3
  57. data/test/orm/active_record.rb +5 -1
  58. data/test/orm/mongoid.rb +2 -2
  59. data/test/rails_app/app/controllers/admins_controller.rb +4 -3
  60. data/test/rails_app/app/controllers/application_controller.rb +11 -10
  61. data/test/rails_app/app/controllers/free_invitations_controller.rb +12 -9
  62. data/test/rails_app/app/controllers/users_controller.rb +2 -2
  63. data/test/rails_app/app/models/admin.rb +7 -10
  64. data/test/rails_app/app/models/octopussy.rb +4 -4
  65. data/test/rails_app/app/models/user.rb +20 -20
  66. data/test/rails_app/app/views/admins/new.html.erb +9 -5
  67. data/test/rails_app/app/views/devise/sessions/new.html.erb +14 -6
  68. data/test/rails_app/app/views/free_invitations/new.html.erb +9 -5
  69. data/test/rails_app/app/views/layouts/application.html.erb +3 -4
  70. data/test/rails_app/app/views/users/invitations/new.html.erb +15 -9
  71. data/test/rails_app/config/application.rb +7 -6
  72. data/test/rails_app/config/boot.rb +2 -2
  73. data/test/rails_app/config/credentials.yml.enc +1 -0
  74. data/test/rails_app/config/initializers/devise.rb +4 -3
  75. data/test/rails_app/config/initializers/secret_token.rb +3 -1
  76. data/test/rails_app/config/initializers/session_store.rb +1 -1
  77. data/test/rails_app/config/initializers/wrap_parameters.rb +1 -1
  78. data/test/rails_app/config/master.key +1 -0
  79. data/test/rails_app/config/routes.rb +3 -3
  80. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -2
  81. data/test/routes_test.rb +4 -4
  82. data/test/test_helper.rb +6 -19
  83. metadata +48 -23
@@ -4,7 +4,7 @@ module DeviseInvitable
4
4
  module Mailer
5
5
 
6
6
  # Deliver an invitation email
7
- def invitation_instructions(record, token, opts={})
7
+ def invitation_instructions(record, token, opts = {})
8
8
  @token = token
9
9
  devise_mail(record, :invitation_instructions, opts)
10
10
  end
@@ -1,10 +1,11 @@
1
1
  module DeviseInvitable
2
2
  module Mapping
3
3
  private
4
- def default_controllers(options)
5
- options[:controllers] ||= {}
6
- options[:controllers][:registrations] ||= "devise_invitable/registrations"
7
- super
8
- end
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, after
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!(:email => 'someone@example.com') # => send invitation
21
- # User.accept_invitation!(:invitation_token => '...') # => accept invitation with a token
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
- {:class_name => Devise.invited_by_class_name}
34
+ { class_name: Devise.invited_by_class_name }
35
35
  else
36
- {:polymorphic => true}
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! :counter_cache => counter_cache if counter_cache
44
- belongs_to_options.merge! :optional => true if ActiveRecord::VERSION::MAJOR >= 5
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! :optional => true
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(:invitation_token => nil) }
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(:invitation_accepted_at => nil, :invitation_token.ne => nil) }
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(:invitation_accepted_at => nil) }
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 = self.invitation_accepted_at if self.respond_to?(:confirmed_at)
98
+ self.confirmed_at ||= self.invitation_accepted_at if self.respond_to?(:confirmed_at=)
99
99
  self.save
100
- end.tap { @accepting_invitation = false }
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(:validate => false)
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(:validate => false)
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 !invitable.invited_to_sign_up? || !self.resend_invitation
320
+ elsif invitable.invitation_taken? || !self.resend_invitation
304
321
  invite_key_array.each do |key|
305
- invitable.errors.add(key, :taken)
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
- # The random password, as set after an invitation, must conform
378
- # to any password format validation rules of the application.
379
- # This default fixes the most common scenarios: Passwords must contain
380
- # lower + upper case, a digit and a symbol.
381
- # For more unusual rules, this method can be overridden.
382
- def random_password
383
- "aA1!" + Devise.friendly_token[0, 20]
384
- end
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
- if defined?(Devise::BaseSanitizer)
16
- def permit(keys)
17
- default_params.permit(*Array(keys))
18
- end
15
+ if defined?(Devise::BaseSanitizer)
16
+ def permit(keys)
17
+ default_params.permit(*Array(keys))
18
+ end
19
19
 
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
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, :only => [:new, :create, :update],
7
- :path => mapping.path_names[:invitation], :controller => controllers[:invitations] do
8
- get :edit, :path => mapping.path_names[:accept], :as => :accept
9
- get :destroy, :path => mapping.path_names[:remove], :as => :remove
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
@@ -1,3 +1,3 @@
1
1
  module DeviseInvitable
2
- VERSION = '1.7.4'
2
+ VERSION = '2.0.3'.freeze
3
3
  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("../templates", __FILE__)
6
+ source_root File.expand_path('../templates', __FILE__)
7
7
 
8
8
  def copy_devise_migration
9
- migration_template "migration.rb", "db/migrate/devise_invitable_add_to_#{table_name}.rb", migration_version: migration_version
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.version.start_with? '5.'
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 "devise_invitable"
4
+ namespace 'devise_invitable'
5
5
 
6
- desc "Add :invitable directive in the given model. Also generate migration for ActiveRecord"
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("app", "models", "#{file_path}.rb")
14
- inject_into_file(path, "invitable, :", :after => "devise :") if File.exists?(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("../../templates", __FILE__)
5
- desc "Add DeviseInvitable config variables to the Devise initializer and copy DeviseInvitable locale files to your application."
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 = "config/initializers/devise.rb"
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, :before => " # ==> Configuration for :confirmable\n") do
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, after
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 = {:email => /\\A[^@]+@[^@]+\\z/}
40
- # config.invite_key = {:email => /\\A[^@]+@[^@]+\\z/, :username => nil}
35
+ # config.invite_key = { email: /\\A[^@]+@[^@]+\\z/ }
36
+ # config.invite_key = { email: /\\A[^@]+@[^@]+\\z/, username: nil }
41
37
 
42
- # Flag that force a record to be valid before being actually invited
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 "../../../config/locales/en.yml", "config/locales/devise_invitable.en.yml"
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 'devise.invitations.edit.header' %></h2>
1
+ <h2><%= t "devise.invitations.edit.header" %></h2>
2
2
 
3
- <%= simple_form_for resource, as: resource_name, url: invitation_path(resource_name), html: { method: :put } do |f| %>
4
- <%= devise_error_messages! %>
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
- <%= f.input :password %>
8
- <%= f.input :password_confirmation %>
7
+ <div class="form-inputs">
8
+ <%= f.input :password %>
9
+ <%= f.input :password_confirmation %>
10
+ </div>
9
11
 
10
- <%= f.button :submit, t("devise.invitations.edit.submit_button") %>
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 resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post} do |f| %>
4
- <%= devise_error_messages! %>
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
- <%= f.input field %>
8
- <% end -%>
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
- <%= f.button :submit, t("devise.invitations.new.submit_button") %>
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("../templates/simple_form_for", __FILE__)
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("../../../../app/views/devise", __FILE__)
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("../../../../app/views/devise", __FILE__)
24
- desc "Copies Devise mail erb views to your application."
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, :required => false, :default => nil, :desc => "The scope to copy views to"
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, :aliases => "-b", :desc => "Form builder to be used", :default => defined?(SimpleForm) ? "simple_form_for" : "form_for"
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