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.

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