draft_generators 0.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.
Files changed (67) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +6 -0
  3. data/.document +5 -0
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +637 -0
  6. data/Gemfile +16 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.markdown +24 -0
  9. data/Rakefile +51 -0
  10. data/VERSION +1 -0
  11. data/draft_generators.gemspec +120 -0
  12. data/lib/devise_customization_service.rb +95 -0
  13. data/lib/draft_generators.rb +8 -0
  14. data/lib/generators/draft/devise/devise_generator.rb +92 -0
  15. data/lib/generators/draft/devise/views/templates/confirmations/new.html.erb +49 -0
  16. data/lib/generators/draft/devise/views/templates/mailer/confirmation_instructions.html.erb +5 -0
  17. data/lib/generators/draft/devise/views/templates/mailer/email_changed.html.erb +7 -0
  18. data/lib/generators/draft/devise/views/templates/mailer/password_change.html.erb +3 -0
  19. data/lib/generators/draft/devise/views/templates/mailer/reset_password_instructions.html.erb +8 -0
  20. data/lib/generators/draft/devise/views/templates/mailer/unlock_instructions.html.erb +7 -0
  21. data/lib/generators/draft/devise/views/templates/passwords/edit.html.erb +83 -0
  22. data/lib/generators/draft/devise/views/templates/passwords/new.html.erb +49 -0
  23. data/lib/generators/draft/devise/views/templates/registrations/edit.html.erb +159 -0
  24. data/lib/generators/draft/devise/views/templates/registrations/new.html.erb +113 -0
  25. data/lib/generators/draft/devise/views/templates/registrations_with_sentinels/edit.html.erb +160 -0
  26. data/lib/generators/draft/devise/views/templates/registrations_with_sentinels/new.html.erb +102 -0
  27. data/lib/generators/draft/devise/views/templates/sessions/new.html.erb +51 -0
  28. data/lib/generators/draft/devise/views/templates/shared/_links.html.erb +25 -0
  29. data/lib/generators/draft/devise/views/templates/unlocks/new.html.erb +49 -0
  30. data/lib/generators/draft/devise/views/views_generator.rb +41 -0
  31. data/lib/generators/draft/layout/USAGE +49 -0
  32. data/lib/generators/draft/layout/layout_generator.rb +66 -0
  33. data/lib/generators/draft/layout/templates/_bootstrapcdn_assets.html.erb +10 -0
  34. data/lib/generators/draft/layout/templates/_flashes.html.erb +23 -0
  35. data/lib/generators/draft/layout/templates/_navbar.html.erb +75 -0
  36. data/lib/generators/draft/layout/templates/layout.html.erb +40 -0
  37. data/lib/generators/draft/model/USAGE +14 -0
  38. data/lib/generators/draft/model/model_generator.rb +42 -0
  39. data/lib/generators/draft/resource/USAGE +11 -0
  40. data/lib/generators/draft/resource/resource_generator.rb +172 -0
  41. data/lib/generators/draft/resource/templates/controllers/controller.rb +97 -0
  42. data/lib/generators/draft/resource/templates/controllers/read_only_controller.rb +13 -0
  43. data/lib/generators/draft/resource/templates/specs/crud_spec.rb +300 -0
  44. data/lib/generators/draft/resource/templates/specs/factories.rb +32 -0
  45. data/lib/generators/draft/resource/templates/views/association_new_form.html.erb +67 -0
  46. data/lib/generators/draft/resource/templates/views/create_row.html.erb +13 -0
  47. data/lib/generators/draft/resource/templates/views/destroy_row.html.erb +13 -0
  48. data/lib/generators/draft/resource/templates/views/edit_form.html.erb +72 -0
  49. data/lib/generators/draft/resource/templates/views/edit_form_with_errors.html.erb +85 -0
  50. data/lib/generators/draft/resource/templates/views/index.html.erb +102 -0
  51. data/lib/generators/draft/resource/templates/views/new_form.html.erb +73 -0
  52. data/lib/generators/draft/resource/templates/views/new_form_with_errors.html.erb +86 -0
  53. data/lib/generators/draft/resource/templates/views/show.html.erb +90 -0
  54. data/lib/generators/draft/resource/templates/views/update_row.html.erb +9 -0
  55. data/lib/generators/draft/scaffold/scaffold_controller_generator.rb +16 -0
  56. data/lib/generators/draft/scaffold/scaffold_erb_generator.rb +25 -0
  57. data/lib/generators/draft/scaffold/scaffold_generator.rb +15 -0
  58. data/lib/generators/draft/scaffold/templates/_card.html.erb +37 -0
  59. data/lib/generators/draft/scaffold/templates/_form.html.erb +44 -0
  60. data/lib/generators/draft/scaffold/templates/_list_item.html.erb +13 -0
  61. data/lib/generators/draft/scaffold/templates/_table_row.html.erb +23 -0
  62. data/lib/generators/draft/scaffold/templates/edit.html.erb +17 -0
  63. data/lib/generators/draft/scaffold/templates/index.html.erb +71 -0
  64. data/lib/generators/draft/scaffold/templates/new.html.erb +17 -0
  65. data/lib/generators/draft/scaffold/templates/show.html.erb +5 -0
  66. data/lib/rails_tag_service.rb +47 -0
  67. metadata +197 -0
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "https://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 3.5.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.0"
12
+ gem "juwelier", "~> 2.1.0"
13
+ gem "simplecov", ">= 0"
14
+ end
15
+
16
+ gem 'devise'
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2017 Raghu Betina
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,24 @@
1
+ # draft_generators
2
+
3
+ This is a set of generators that help beginners learn to program. Primarily, they generate code that is more explicit and verbose and less idiomatic and “magical” than the built-in scaffold generator. It is meant to be helpful for beginners while they are still learning how things are wired together.
4
+
5
+ ## Contributing to draft_generators
6
+
7
+ - Check out the latest master to make sure the feature hasn't been
8
+ implemented or the bug hasn't been fixed yet.
9
+ - Check out the issue tracker to make sure someone already hasn't
10
+ requested it and/or contributed it.
11
+ - Fork the project.
12
+ Start a feature/bugfix branch.
13
+ Commit and push until you are happy with your contribution.
14
+ Make sure to add tests for it. This is important so I don't break it
15
+ in a future version unintentionally.
16
+ - Please try not to mess with the Rakefile, version, or history. If
17
+ you want to have your own version, or is otherwise necessary, that
18
+ is fine, but please isolate to its own commit so I can cherry-pick
19
+ around it.
20
+
21
+ ## Copyright
22
+
23
+ Copyright (c) 2017 Raghu Betina. See
24
+ LICENSE.txt for further details.
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'juwelier'
15
+ Juwelier::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "draft_generators"
18
+ gem.homepage = "http://github.com/raghubetina/draft_generators"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Generators that help beginners learn to program.}
21
+ gem.description = %Q{This is a set of generators that help beginners learn to program. Primarily, they generate code that is more explicit and verbose and less idiomatic and “magical” than the built-in scaffold generator, which is helpful for beginners while they are learning how exactly things are wired together.}
22
+ gem.email = "raghu@firstdraft.com"
23
+ gem.authors = ["Raghu Betina"]
24
+
25
+ # dependencies defined in Gemfile
26
+ end
27
+ Juwelier::RubygemsDotOrgTasks.new
28
+
29
+ require 'rspec/core'
30
+ require 'rspec/core/rake_task'
31
+ RSpec::Core::RakeTask.new(:spec) do |spec|
32
+ spec.pattern = FileList['spec/**/*_spec.rb']
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['spec'].execute
39
+ end
40
+
41
+ task :default => :spec
42
+
43
+ require 'rdoc/task'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "draft_generators #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,120 @@
1
+ # Generated by juwelier
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: draft_generators 0.0.3 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "draft_generators".freeze
9
+ s.version = "0.0.3"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Raghu Betina".freeze]
14
+ s.date = "2019-05-01"
15
+ s.description = "This is a set of generators that help beginners learn to program. Primarily, they generate code that is more explicit and verbose and less idiomatic and \u201Cmagical\u201D than the built-in scaffold generator, which is helpful for beginners while they are learning how exactly things are wired together.".freeze
16
+ s.email = "raghu@firstdraft.com".freeze
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.markdown"
20
+ ]
21
+ s.files = [
22
+ ".codeclimate.yml",
23
+ ".document",
24
+ ".rspec",
25
+ ".rubocop.yml",
26
+ "Gemfile",
27
+ "LICENSE.txt",
28
+ "README.markdown",
29
+ "Rakefile",
30
+ "VERSION",
31
+ "draft_generators.gemspec",
32
+ "lib/devise_customization_service.rb",
33
+ "lib/draft_generators.rb",
34
+ "lib/generators/draft/devise/devise_generator.rb",
35
+ "lib/generators/draft/devise/views/templates/confirmations/new.html.erb",
36
+ "lib/generators/draft/devise/views/templates/mailer/confirmation_instructions.html.erb",
37
+ "lib/generators/draft/devise/views/templates/mailer/email_changed.html.erb",
38
+ "lib/generators/draft/devise/views/templates/mailer/password_change.html.erb",
39
+ "lib/generators/draft/devise/views/templates/mailer/reset_password_instructions.html.erb",
40
+ "lib/generators/draft/devise/views/templates/mailer/unlock_instructions.html.erb",
41
+ "lib/generators/draft/devise/views/templates/passwords/edit.html.erb",
42
+ "lib/generators/draft/devise/views/templates/passwords/new.html.erb",
43
+ "lib/generators/draft/devise/views/templates/registrations/edit.html.erb",
44
+ "lib/generators/draft/devise/views/templates/registrations/new.html.erb",
45
+ "lib/generators/draft/devise/views/templates/registrations_with_sentinels/edit.html.erb",
46
+ "lib/generators/draft/devise/views/templates/registrations_with_sentinels/new.html.erb",
47
+ "lib/generators/draft/devise/views/templates/sessions/new.html.erb",
48
+ "lib/generators/draft/devise/views/templates/shared/_links.html.erb",
49
+ "lib/generators/draft/devise/views/templates/unlocks/new.html.erb",
50
+ "lib/generators/draft/devise/views/views_generator.rb",
51
+ "lib/generators/draft/layout/USAGE",
52
+ "lib/generators/draft/layout/layout_generator.rb",
53
+ "lib/generators/draft/layout/templates/_bootstrapcdn_assets.html.erb",
54
+ "lib/generators/draft/layout/templates/_flashes.html.erb",
55
+ "lib/generators/draft/layout/templates/_navbar.html.erb",
56
+ "lib/generators/draft/layout/templates/layout.html.erb",
57
+ "lib/generators/draft/model/USAGE",
58
+ "lib/generators/draft/model/model_generator.rb",
59
+ "lib/generators/draft/resource/USAGE",
60
+ "lib/generators/draft/resource/resource_generator.rb",
61
+ "lib/generators/draft/resource/templates/controllers/controller.rb",
62
+ "lib/generators/draft/resource/templates/controllers/read_only_controller.rb",
63
+ "lib/generators/draft/resource/templates/specs/crud_spec.rb",
64
+ "lib/generators/draft/resource/templates/specs/factories.rb",
65
+ "lib/generators/draft/resource/templates/views/association_new_form.html.erb",
66
+ "lib/generators/draft/resource/templates/views/create_row.html.erb",
67
+ "lib/generators/draft/resource/templates/views/destroy_row.html.erb",
68
+ "lib/generators/draft/resource/templates/views/edit_form.html.erb",
69
+ "lib/generators/draft/resource/templates/views/edit_form_with_errors.html.erb",
70
+ "lib/generators/draft/resource/templates/views/index.html.erb",
71
+ "lib/generators/draft/resource/templates/views/new_form.html.erb",
72
+ "lib/generators/draft/resource/templates/views/new_form_with_errors.html.erb",
73
+ "lib/generators/draft/resource/templates/views/show.html.erb",
74
+ "lib/generators/draft/resource/templates/views/update_row.html.erb",
75
+ "lib/generators/draft/scaffold/scaffold_controller_generator.rb",
76
+ "lib/generators/draft/scaffold/scaffold_erb_generator.rb",
77
+ "lib/generators/draft/scaffold/scaffold_generator.rb",
78
+ "lib/generators/draft/scaffold/templates/_card.html.erb",
79
+ "lib/generators/draft/scaffold/templates/_form.html.erb",
80
+ "lib/generators/draft/scaffold/templates/_list_item.html.erb",
81
+ "lib/generators/draft/scaffold/templates/_table_row.html.erb",
82
+ "lib/generators/draft/scaffold/templates/edit.html.erb",
83
+ "lib/generators/draft/scaffold/templates/index.html.erb",
84
+ "lib/generators/draft/scaffold/templates/new.html.erb",
85
+ "lib/generators/draft/scaffold/templates/show.html.erb",
86
+ "lib/rails_tag_service.rb"
87
+ ]
88
+ s.homepage = "http://github.com/raghubetina/draft_generators".freeze
89
+ s.licenses = ["MIT".freeze]
90
+ s.rubygems_version = "2.7.8".freeze
91
+ s.summary = "Generators that help beginners learn to program.".freeze
92
+
93
+ if s.respond_to? :specification_version then
94
+ s.specification_version = 4
95
+
96
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
97
+ s.add_runtime_dependency(%q<devise>.freeze, [">= 0"])
98
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
99
+ s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
100
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
101
+ s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
102
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
103
+ else
104
+ s.add_dependency(%q<devise>.freeze, [">= 0"])
105
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
106
+ s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
107
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
108
+ s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
109
+ s.add_dependency(%q<simplecov>.freeze, [">= 0"])
110
+ end
111
+ else
112
+ s.add_dependency(%q<devise>.freeze, [">= 0"])
113
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
114
+ s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
115
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
116
+ s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
117
+ s.add_dependency(%q<simplecov>.freeze, [">= 0"])
118
+ end
119
+ end
120
+
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DraftGenerators
4
+ class DeviseCustomizationService
5
+ def initialize(attributes)
6
+ @attributes = attributes
7
+ end
8
+
9
+ def form_fields_to_add
10
+ form_fields = ""
11
+ columns.each do |column|
12
+ form_fields += input_field_block(column)
13
+ end
14
+ form_fields
15
+ end
16
+
17
+ def input_field_block(column)
18
+ column_name = column.name
19
+ %{
20
+ <!-- Devise Input for #{column_name} start -->
21
+ <div class="form-group">
22
+ <% #{column_name}_was_invalid = resource.errors.include?(:#{column_name}) %>
23
+
24
+ <% #{column_name}_class = "form-control" %>
25
+
26
+ <% if was_validated %>
27
+ <% if #{column_name}_was_invalid %>
28
+ <% #{column_name}_class << " is-invalid" %>
29
+ <% else %>
30
+ <% #{column_name}_class << " is-valid" %>
31
+ <% end %>
32
+ <% end %>
33
+
34
+ <%= f.label :#{column_name} %>
35
+
36
+ #{DraftGenerators::RailsTagService.input_tag(column)}
37
+
38
+ <% if #{column_name}_was_invalid %>
39
+ <% resource.errors.full_messages_for(:#{column_name}).each do |message| %>
40
+ <div class="invalid-feedback d-flex">
41
+ <%= message %>
42
+ </div>
43
+ <% end %>
44
+ <% end %>
45
+ </div>
46
+ <!-- Devise Input for #{column_name} end -->
47
+ }
48
+ end
49
+
50
+ def security_field_block
51
+ return "" if eligible_attributes.empty?
52
+ "
53
+
54
+ before_action :configure_permitted_parameters, if: :devise_controller?
55
+
56
+ protected
57
+
58
+ def configure_permitted_parameters
59
+ devise_parameter_sanitizer.permit(:sign_up, :keys => [#{column_names_string}])
60
+
61
+ devise_parameter_sanitizer.permit(:account_update, :keys => [#{column_names_string}])
62
+ end"
63
+ end
64
+
65
+ def update_resource_button_block
66
+ %{ <%= f.submit "Update", class: "btn btn-block btn-outline-primary" %>}
67
+ end
68
+
69
+ def sign_in_resource_button_block
70
+ %{ <%= f.button class: "btn btn-outline-primary btn-block" %>}
71
+ end
72
+
73
+ def column_names
74
+ columns.map(&:name)
75
+ end
76
+
77
+ def column_names_string
78
+ ":" + column_names.join(", :").to_s
79
+ end
80
+
81
+ def protect_from_forgery_code
82
+ "protect_from_forgery with: :exception"
83
+ end
84
+
85
+ def columns
86
+ @_columns ||= eligible_attributes
87
+ end
88
+
89
+ def eligible_attributes
90
+ @attributes.reject do |attribute|
91
+ %w(id created_at updated_at email password).include?(attribute.name)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "devise_customization_service"
4
+ require "rails_tag_service"
5
+ require "devise"
6
+
7
+ module DraftGenerators
8
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/generators/named_base"
4
+
5
+ module Draft
6
+ class DeviseGenerator < Rails::Generators::NamedBase
7
+ argument :attributes, type: :array, default: [],
8
+ banner: "field:type field:type"
9
+ class_option :with_sentinels, type: :boolean, default: false, desc: "Skip adding comments to generated files"
10
+ class_option :views, aliases: "-v", type: :array, desc: "Select specific view directories to generate (confirmations, passwords, registrations, sessions, unlocks, mailer)"
11
+
12
+ include Rails::Generators::ResourceHelpers
13
+
14
+ def check_for_existing_devise_model
15
+ return if behavior != :invoke
16
+ if model_exists?
17
+ say "\nYou already have a model called #{class_name}! Halting generator.\n"
18
+ abort
19
+ end
20
+ end
21
+
22
+ def devise_install
23
+ unless initializer_exists?
24
+ invoke "devise:install"
25
+ end
26
+ end
27
+
28
+ def enable_scoped_views
29
+ path = "config/initializers/devise.rb"
30
+ uncomment_lines(path, /.*config.scoped_views = false/)
31
+ code_to_replace = "config.scoped_views = false"
32
+ replace_with = "config.scoped_views = true"
33
+ gsub_file(path, code_to_replace, replace_with)
34
+ end
35
+
36
+ def generate_devise_model
37
+ invoke "devise"
38
+ end
39
+
40
+ def generate_devise_views
41
+ invoke "draft:devise:views"
42
+ devise_service = ::DraftGenerators::DeviseCustomizationService.new(attributes)
43
+ add_additional_views_through_security(devise_service)
44
+ add_additional_fields_for_registration(devise_service)
45
+ end
46
+
47
+ private
48
+
49
+ def add_additional_views_through_security(devise_service)
50
+ inject_into_file("app/controllers/application_controller.rb",
51
+ devise_service.security_field_block,
52
+ after: devise_service.protect_from_forgery_code)
53
+ end
54
+
55
+ def add_additional_fields_for_registration(devise_service)
56
+ scope = name.underscore.pluralize
57
+ form_fields_to_add = devise_service.form_fields_to_add
58
+
59
+ if File.exist?("app/views/#{scope}/registrations/new.html.erb")
60
+ inject_into_file("app/views/#{scope}/registrations/new.html.erb",
61
+ form_fields_to_add,
62
+ before: devise_service.sign_in_resource_button_block)
63
+ end
64
+
65
+ if File.exist?("app/views/#{scope}/registrations/edit.html.erb")
66
+ inject_into_file("app/views/#{scope}/registrations/edit.html.erb",
67
+ form_fields_to_add,
68
+ before: devise_service.update_resource_button_block)
69
+ end
70
+ end
71
+
72
+ def with_sentinels?
73
+ options[:with_sentinels]
74
+ end
75
+
76
+ def model_exists?
77
+ File.exist?(File.join(destination_root, model_path))
78
+ end
79
+
80
+ def model_path
81
+ @model_path ||= File.join("app", "models", "#{file_path}.rb")
82
+ end
83
+
84
+ def initializer_exists?
85
+ File.exist?(File.join(destination_root, initializer_path))
86
+ end
87
+
88
+ def initializer_path
89
+ @initializer_path ||= File.join("config", "initializers", "devise.rb")
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,49 @@
1
+ <div class="row">
2
+ <div class="offset-md-3 col-md-6">
3
+ <div class="card mb-3">
4
+ <h5 class="card-header">
5
+ Resend confirmation instructions
6
+ </h5>
7
+
8
+ <div class="card-body">
9
+ <% was_validated = resource.errors.any? %>
10
+
11
+ <% form_html_options = { method: :post, novalidate: true, class: "mb-3" } %>
12
+
13
+ <%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: form_html_options) do |f| %>
14
+ <div class="form-group">
15
+ <% email_was_invalid = resource.errors.include?(:email) %>
16
+
17
+ <% email_class = "form-control" %>
18
+
19
+ <% if was_validated %>
20
+ <% if email_was_invalid %>
21
+ <% email_class << " is-invalid" %>
22
+ <% else %>
23
+ <% email_class << " is-valid" %>
24
+ <% end %>
25
+ <% end %>
26
+
27
+ <%= f.label :email %>
28
+
29
+ <%= f.email_field :email, class: email_class, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
30
+
31
+ <% if email_was_invalid %>
32
+ <% resource.errors.full_messages_for(:email).each do |message| %>
33
+ <div class="invalid-feedback d-flex">
34
+ <%= message %>
35
+ </div>
36
+ <% end %>
37
+ <% end %>
38
+ </div>
39
+
40
+ <%= f.submit "Resend confirmation instructions", class: "btn btn-outline-primary btn-block" %>
41
+ <% end %>
42
+
43
+ <hr>
44
+
45
+ <%= render "devise/shared/links" %>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </div>