draft_generators 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +6 -0
- data/.document +5 -0
- data/.rspec +1 -0
- data/.rubocop.yml +637 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +24 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/draft_generators.gemspec +120 -0
- data/lib/devise_customization_service.rb +95 -0
- data/lib/draft_generators.rb +8 -0
- data/lib/generators/draft/devise/devise_generator.rb +92 -0
- data/lib/generators/draft/devise/views/templates/confirmations/new.html.erb +49 -0
- data/lib/generators/draft/devise/views/templates/mailer/confirmation_instructions.html.erb +5 -0
- data/lib/generators/draft/devise/views/templates/mailer/email_changed.html.erb +7 -0
- data/lib/generators/draft/devise/views/templates/mailer/password_change.html.erb +3 -0
- data/lib/generators/draft/devise/views/templates/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/generators/draft/devise/views/templates/mailer/unlock_instructions.html.erb +7 -0
- data/lib/generators/draft/devise/views/templates/passwords/edit.html.erb +83 -0
- data/lib/generators/draft/devise/views/templates/passwords/new.html.erb +49 -0
- data/lib/generators/draft/devise/views/templates/registrations/edit.html.erb +159 -0
- data/lib/generators/draft/devise/views/templates/registrations/new.html.erb +113 -0
- data/lib/generators/draft/devise/views/templates/registrations_with_sentinels/edit.html.erb +160 -0
- data/lib/generators/draft/devise/views/templates/registrations_with_sentinels/new.html.erb +102 -0
- data/lib/generators/draft/devise/views/templates/sessions/new.html.erb +51 -0
- data/lib/generators/draft/devise/views/templates/shared/_links.html.erb +25 -0
- data/lib/generators/draft/devise/views/templates/unlocks/new.html.erb +49 -0
- data/lib/generators/draft/devise/views/views_generator.rb +41 -0
- data/lib/generators/draft/layout/USAGE +49 -0
- data/lib/generators/draft/layout/layout_generator.rb +66 -0
- data/lib/generators/draft/layout/templates/_bootstrapcdn_assets.html.erb +10 -0
- data/lib/generators/draft/layout/templates/_flashes.html.erb +23 -0
- data/lib/generators/draft/layout/templates/_navbar.html.erb +75 -0
- data/lib/generators/draft/layout/templates/layout.html.erb +40 -0
- data/lib/generators/draft/model/USAGE +14 -0
- data/lib/generators/draft/model/model_generator.rb +42 -0
- data/lib/generators/draft/resource/USAGE +11 -0
- data/lib/generators/draft/resource/resource_generator.rb +172 -0
- data/lib/generators/draft/resource/templates/controllers/controller.rb +97 -0
- data/lib/generators/draft/resource/templates/controllers/read_only_controller.rb +13 -0
- data/lib/generators/draft/resource/templates/specs/crud_spec.rb +300 -0
- data/lib/generators/draft/resource/templates/specs/factories.rb +32 -0
- data/lib/generators/draft/resource/templates/views/association_new_form.html.erb +67 -0
- data/lib/generators/draft/resource/templates/views/create_row.html.erb +13 -0
- data/lib/generators/draft/resource/templates/views/destroy_row.html.erb +13 -0
- data/lib/generators/draft/resource/templates/views/edit_form.html.erb +72 -0
- data/lib/generators/draft/resource/templates/views/edit_form_with_errors.html.erb +85 -0
- data/lib/generators/draft/resource/templates/views/index.html.erb +102 -0
- data/lib/generators/draft/resource/templates/views/new_form.html.erb +73 -0
- data/lib/generators/draft/resource/templates/views/new_form_with_errors.html.erb +86 -0
- data/lib/generators/draft/resource/templates/views/show.html.erb +90 -0
- data/lib/generators/draft/resource/templates/views/update_row.html.erb +9 -0
- data/lib/generators/draft/scaffold/scaffold_controller_generator.rb +16 -0
- data/lib/generators/draft/scaffold/scaffold_erb_generator.rb +25 -0
- data/lib/generators/draft/scaffold/scaffold_generator.rb +15 -0
- data/lib/generators/draft/scaffold/templates/_card.html.erb +37 -0
- data/lib/generators/draft/scaffold/templates/_form.html.erb +44 -0
- data/lib/generators/draft/scaffold/templates/_list_item.html.erb +13 -0
- data/lib/generators/draft/scaffold/templates/_table_row.html.erb +23 -0
- data/lib/generators/draft/scaffold/templates/edit.html.erb +17 -0
- data/lib/generators/draft/scaffold/templates/index.html.erb +71 -0
- data/lib/generators/draft/scaffold/templates/new.html.erb +17 -0
- data/lib/generators/draft/scaffold/templates/show.html.erb +5 -0
- data/lib/rails_tag_service.rb +47 -0
- 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,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>
|