suspenders 20240516.0 → 20251219.0
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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/CODEOWNERS +9 -0
- data/CONTRIBUTING.md +71 -0
- data/FEATURES.md +177 -0
- data/GOALS.md +65 -0
- data/LICENSE +21 -0
- data/NEWS.md +808 -0
- data/README.md +73 -60
- data/RELEASING.md +18 -0
- data/Rakefile +7 -10
- data/SECURITY.md +19 -0
- data/exe/suspenders +38 -0
- data/lib/suspenders/cli.rb +64 -0
- data/lib/suspenders/version.rb +4 -4
- data/lib/suspenders.rb +5 -6
- data/lib/templates/Procfile +3 -0
- data/lib/templates/Procfile.dev +2 -0
- data/lib/{generators/templates/views/flashes.html.erb → templates/app/views/application/_flashes.html.erb} +4 -2
- data/lib/templates/app/views/application/_form_errors.html.erb +11 -0
- data/lib/templates/config/initializers/sidekiq.rb +14 -0
- data/lib/templates/lib/development/seeder.rb +21 -0
- data/lib/templates/lib/tasks/development.rake +15 -0
- data/lib/templates/spec/support/action_mailer.rb +11 -0
- data/lib/{generators/templates/factories/factory_bot_rspec.rb → templates/spec/support/factory_bot.rb} +0 -2
- data/lib/templates/web.rb +544 -0
- data/sig/suspenders.rbs +4 -0
- metadata +34 -120
- data/lib/generators/suspenders/accessibility_generator.rb +0 -24
- data/lib/generators/suspenders/advisories_generator.rb +0 -32
- data/lib/generators/suspenders/ci_generator.rb +0 -57
- data/lib/generators/suspenders/email_generator.rb +0 -56
- data/lib/generators/suspenders/environments/development_generator.rb +0 -50
- data/lib/generators/suspenders/environments/production_generator.rb +0 -27
- data/lib/generators/suspenders/environments/test_generator.rb +0 -39
- data/lib/generators/suspenders/factories_generator.rb +0 -64
- data/lib/generators/suspenders/inline_svg_generator.rb +0 -24
- data/lib/generators/suspenders/install/web_generator.rb +0 -71
- data/lib/generators/suspenders/jobs_generator.rb +0 -34
- data/lib/generators/suspenders/lint_generator.rb +0 -94
- data/lib/generators/suspenders/prerequisites_generator.rb +0 -19
- data/lib/generators/suspenders/rake_generator.rb +0 -25
- data/lib/generators/suspenders/setup_generator.rb +0 -14
- data/lib/generators/suspenders/styles_generator.rb +0 -84
- data/lib/generators/suspenders/tasks_generator.rb +0 -20
- data/lib/generators/suspenders/testing_generator.rb +0 -113
- data/lib/generators/suspenders/views_generator.rb +0 -38
- data/lib/generators/templates/ci/ci.yml.tt +0 -148
- data/lib/generators/templates/ci/dependabot.yml +0 -7
- data/lib/generators/templates/email/email_interceptor.rb +0 -11
- data/lib/generators/templates/factories/factories.rb +0 -2
- data/lib/generators/templates/factories/factories_test.rb +0 -9
- data/lib/generators/templates/inline_svg/inline_svg.rb +0 -3
- data/lib/generators/templates/install/web/CONTRIBUTING.md +0 -94
- data/lib/generators/templates/lint/config_better_html.yml +0 -2
- data/lib/generators/templates/lint/config_initializers_better_html.rb +0 -9
- data/lib/generators/templates/lint/erb-lint.yml +0 -63
- data/lib/generators/templates/lint/erblint.rake +0 -47
- data/lib/generators/templates/lint/eslintrc.json +0 -7
- data/lib/generators/templates/lint/package.json +0 -4
- data/lib/generators/templates/lint/prettierignore +0 -1
- data/lib/generators/templates/lint/prettierrc +0 -11
- data/lib/generators/templates/lint/rubocop.yml.tt +0 -7
- data/lib/generators/templates/lint/stylelintrc.json +0 -3
- data/lib/generators/templates/prerequisites/node-version.tt +0 -1
- data/lib/generators/templates/setup/bin_setup.rb +0 -39
- data/lib/generators/templates/styles/postcss.config.js +0 -11
- data/lib/generators/templates/tasks/dev.rake +0 -12
- data/lib/generators/templates/testing/action_mailer.rb +0 -5
- data/lib/install/web.rb +0 -54
- data/lib/suspenders/cleanup/generate_readme.rb +0 -165
- data/lib/suspenders/cleanup/organize_gemfile.rb +0 -134
- data/lib/suspenders/engine.rb +0 -5
- data/lib/suspenders/generators.rb +0 -126
- data/lib/suspenders/railtie.rb +0 -4
- data/lib/tasks/suspenders.rake +0 -37
- /data/lib/{generators/templates/factories → templates/spec}/factories_spec.rb +0 -0
- /data/lib/{generators/templates/testing → templates/spec/support}/driver.rb +0 -0
- /data/lib/{generators/templates/testing → templates/spec/support}/i18n.rb +0 -0
- /data/lib/{generators/templates/testing → templates/spec/support}/shoulda_matchers.rb +0 -0
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
module Suspenders
|
|
2
|
-
module Cleanup
|
|
3
|
-
class OrganizeGemfile
|
|
4
|
-
def self.perform(gemfile)
|
|
5
|
-
new(gemfile).perform
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
attr_reader :gemfile, :current_lines, :new_lines, :new_line_markers,
|
|
9
|
-
:current_group, :gem_groups
|
|
10
|
-
|
|
11
|
-
def initialize(gemfile)
|
|
12
|
-
@gemfile = gemfile
|
|
13
|
-
|
|
14
|
-
@current_lines = File.read(gemfile).lines
|
|
15
|
-
@new_lines = []
|
|
16
|
-
@new_line_markers = []
|
|
17
|
-
|
|
18
|
-
@current_group = nil
|
|
19
|
-
@gem_groups = {}
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def perform
|
|
23
|
-
remove_line_breaks
|
|
24
|
-
sort_gems_and_groups
|
|
25
|
-
add_gem_groups_to_gemfile
|
|
26
|
-
add_line_breaks
|
|
27
|
-
cleanup
|
|
28
|
-
|
|
29
|
-
File.open(gemfile, "w+") { _1.write new_lines.join }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def remove_line_breaks
|
|
35
|
-
current_lines.delete("\n")
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def sort_gems_and_groups
|
|
39
|
-
current_lines.each do |line|
|
|
40
|
-
if line.starts_with?(/group/)
|
|
41
|
-
@current_group = line
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Consolidate gem groups
|
|
45
|
-
if current_group
|
|
46
|
-
if line.starts_with?(/end/)
|
|
47
|
-
@current_group = nil
|
|
48
|
-
elsif !line.starts_with?(/group/)
|
|
49
|
-
gem_groups[current_group] ||= []
|
|
50
|
-
gem_groups[current_group] << line
|
|
51
|
-
end
|
|
52
|
-
# Add non-grouped gems
|
|
53
|
-
elsif !line.starts_with?(/\n/)
|
|
54
|
-
new_lines << line
|
|
55
|
-
@current_group = nil
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def add_gem_groups_to_gemfile
|
|
61
|
-
gem_groups.keys.each do |group|
|
|
62
|
-
gems = gem_groups[group]
|
|
63
|
-
|
|
64
|
-
gems.each_with_index do |gem, index|
|
|
65
|
-
if index == 0
|
|
66
|
-
new_lines << group
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
new_lines << gem
|
|
70
|
-
|
|
71
|
-
if gems.size == (index + 1)
|
|
72
|
-
new_lines << "end\n"
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def add_line_breaks
|
|
79
|
-
new_lines.each_with_index do |line, index|
|
|
80
|
-
previous_line = new_lines[index - 1] if index > 0
|
|
81
|
-
next_line = new_lines[index + 1]
|
|
82
|
-
marker = index + 1
|
|
83
|
-
|
|
84
|
-
# Add line break if it's a gem and the next line is commented out
|
|
85
|
-
if (line.starts_with?(/\s*gem/) || line.starts_with?(/\s*\#\s*gem/)) && next_line&.starts_with?(/\s*\#/)
|
|
86
|
-
new_line_markers << marker
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Add line break if it's a commented out gem and the next line is a gem
|
|
90
|
-
if line.starts_with?(/\s*\#\s*gem/) && next_line&.starts_with?(/\s*gem/)
|
|
91
|
-
new_line_markers << marker
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Add line break if it's a gem with a comment and the next line is a gem
|
|
95
|
-
if previous_line&.starts_with?(/\s*\#/) \
|
|
96
|
-
&& line.starts_with?(/\s*gem/) \
|
|
97
|
-
&& next_line&.starts_with?(/\s*gem/) \
|
|
98
|
-
&& !previous_line.starts_with?(/\s*\#\s*gem/)
|
|
99
|
-
new_line_markers << marker
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Add a line break if it's /end/
|
|
103
|
-
if line.starts_with?(/end/)
|
|
104
|
-
new_line_markers << marker
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Add a line break if it's a gem and the next line is a group
|
|
108
|
-
if line.starts_with?(/gem/) && next_line&.starts_with?(/group/)
|
|
109
|
-
new_line_markers << marker
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Add line break if it's /source/ or /ruby/
|
|
113
|
-
if line.starts_with?(/\w/) && !line.starts_with?(/\s*(gem|group|end)/)
|
|
114
|
-
new_line_markers << marker
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
new_line_markers.each_with_index do |marker, index|
|
|
119
|
-
# Each time we insert, the original marker if off by 1
|
|
120
|
-
marker_offset = marker + index
|
|
121
|
-
|
|
122
|
-
new_lines.insert(marker_offset, "\n")
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def cleanup
|
|
127
|
-
# Remove last line
|
|
128
|
-
if /\n/.match?(new_lines.last)
|
|
129
|
-
new_lines.pop
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
data/lib/suspenders/engine.rb
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
require "active_support/concern"
|
|
2
|
-
|
|
3
|
-
module Suspenders
|
|
4
|
-
module Generators
|
|
5
|
-
module Helpers
|
|
6
|
-
def default_test_suite?
|
|
7
|
-
File.exist? Rails.root.join("test")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def rspec_test_suite?
|
|
11
|
-
File.exist? Rails.root.join("spec/spec_helper.rb")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def default_test_helper_present?
|
|
15
|
-
File.exist? Rails.root.join("test/test_helper.rb")
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def rspec_test_helper_present?
|
|
19
|
-
File.exist? Rails.root.join("spec/rails_helper.rb")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def node_version
|
|
23
|
-
ENV["NODE_VERSION"] || `node --version`[/\d+\.\d+\.\d+/]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def node_not_installed?
|
|
27
|
-
!node_version.present?
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def node_version_unsupported?
|
|
31
|
-
node_version < Suspenders::MINIMUM_NODE_VERSION
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
module APIAppUnsupported
|
|
36
|
-
class Error < StandardError
|
|
37
|
-
def message
|
|
38
|
-
"This generator cannot be used on API only applications."
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
extend ActiveSupport::Concern
|
|
43
|
-
|
|
44
|
-
included do
|
|
45
|
-
def raise_if_api_only_app
|
|
46
|
-
if api_only_app?
|
|
47
|
-
raise Suspenders::Generators::APIAppUnsupported::Error
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
private
|
|
53
|
-
|
|
54
|
-
def api_only_app?
|
|
55
|
-
File.read(Rails.root.join("config/application.rb"))
|
|
56
|
-
.match?(/^\s*config\.api_only\s*=\s*true/i)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
module DatabaseUnsupported
|
|
61
|
-
include Helpers
|
|
62
|
-
|
|
63
|
-
class Error < StandardError
|
|
64
|
-
def message
|
|
65
|
-
"This generator requires PostgreSQL"
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
extend ActiveSupport::Concern
|
|
70
|
-
|
|
71
|
-
included do
|
|
72
|
-
def raise_if_database_unsupported
|
|
73
|
-
if database_unsupported?
|
|
74
|
-
raise Suspenders::Generators::DatabaseUnsupported::Error
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
def database_unsupported?
|
|
81
|
-
configuration = File.read(Rails.root.join("config/database.yml"))
|
|
82
|
-
configuration = YAML.safe_load(configuration, aliases: true)
|
|
83
|
-
adapter = configuration["default"]["adapter"]
|
|
84
|
-
|
|
85
|
-
adapter != "postgresql"
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
module NodeNotInstalled
|
|
91
|
-
class Error < StandardError
|
|
92
|
-
def message
|
|
93
|
-
"This generator requires Node"
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
extend ActiveSupport::Concern
|
|
98
|
-
|
|
99
|
-
included do
|
|
100
|
-
def raise_if_node_not_installed
|
|
101
|
-
if node_not_installed?
|
|
102
|
-
raise Suspenders::Generators::NodeNotInstalled::Error
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
module NodeVersionUnsupported
|
|
109
|
-
class Error < StandardError
|
|
110
|
-
def message
|
|
111
|
-
"This generator requires Node >= #{Suspenders::MINIMUM_NODE_VERSION}"
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
extend ActiveSupport::Concern
|
|
116
|
-
|
|
117
|
-
included do
|
|
118
|
-
def raise_if_node_version_unsupported
|
|
119
|
-
if node_version_unsupported?
|
|
120
|
-
raise Suspenders::Generators::NodeVersionUnsupported::Error
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
end
|
data/lib/suspenders/railtie.rb
DELETED
data/lib/tasks/suspenders.rake
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
namespace :suspenders do
|
|
2
|
-
desc "Extend the default Rails Rake task"
|
|
3
|
-
task :rake do
|
|
4
|
-
if Bundler.rubygems.find_name("bundler-audit").any?
|
|
5
|
-
Rake::Task[:"bundle:audit"].invoke
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
if Bundler.rubygems.find_name("standard").any?
|
|
9
|
-
Rake::Task[:standard].invoke
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
desc "Ensure a migration is reversible"
|
|
14
|
-
namespace :db do
|
|
15
|
-
task :migrate do
|
|
16
|
-
Rake::Task["db:migrate"].invoke
|
|
17
|
-
Rake::Task["db:rollback"].invoke
|
|
18
|
-
|
|
19
|
-
Rake::Task["db:migrate"].reenable
|
|
20
|
-
Rake::Task["db:migrate"].invoke
|
|
21
|
-
|
|
22
|
-
Rake::Task["db:test:prepare"].invoke
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
namespace :cleanup do
|
|
27
|
-
desc "Organizes Gemfile"
|
|
28
|
-
task organize_gemfile: :environment do
|
|
29
|
-
Suspenders::Cleanup::OrganizeGemfile.perform(Rails.root.join("Gemfile"))
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
desc "Generate README"
|
|
33
|
-
task :generate_readme do
|
|
34
|
-
Suspenders::Cleanup::GenerateReadme.perform(Rails.root.join("README.md"), Rails.application.class.module_parent_name)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|