suspenders 1.56.1 → 20240516.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +83 -172
  3. data/Rakefile +13 -0
  4. data/lib/generators/suspenders/accessibility_generator.rb +24 -0
  5. data/lib/generators/suspenders/advisories_generator.rb +32 -0
  6. data/lib/generators/suspenders/ci_generator.rb +57 -0
  7. data/lib/generators/suspenders/email_generator.rb +56 -0
  8. data/lib/generators/suspenders/environments/development_generator.rb +50 -0
  9. data/lib/generators/suspenders/environments/production_generator.rb +27 -0
  10. data/lib/generators/suspenders/environments/test_generator.rb +39 -0
  11. data/lib/generators/suspenders/factories_generator.rb +64 -0
  12. data/lib/generators/suspenders/inline_svg_generator.rb +24 -0
  13. data/lib/generators/suspenders/install/web_generator.rb +71 -0
  14. data/lib/generators/suspenders/jobs_generator.rb +34 -0
  15. data/lib/generators/suspenders/lint_generator.rb +94 -0
  16. data/lib/generators/suspenders/prerequisites_generator.rb +19 -0
  17. data/lib/generators/suspenders/rake_generator.rb +25 -0
  18. data/lib/generators/suspenders/setup_generator.rb +14 -0
  19. data/lib/generators/suspenders/styles_generator.rb +84 -0
  20. data/lib/generators/suspenders/tasks_generator.rb +20 -0
  21. data/lib/generators/suspenders/testing_generator.rb +113 -0
  22. data/lib/generators/suspenders/views_generator.rb +38 -0
  23. data/lib/generators/templates/ci/ci.yml.tt +148 -0
  24. data/lib/generators/templates/ci/dependabot.yml +7 -0
  25. data/lib/generators/templates/email/email_interceptor.rb +11 -0
  26. data/lib/generators/templates/factories/factories_spec.rb +7 -0
  27. data/lib/generators/templates/factories/factories_test.rb +9 -0
  28. data/lib/generators/templates/install/web/CONTRIBUTING.md +94 -0
  29. data/lib/generators/templates/lint/config_better_html.yml +2 -0
  30. data/lib/generators/templates/lint/config_initializers_better_html.rb +9 -0
  31. data/lib/generators/templates/lint/erb-lint.yml +63 -0
  32. data/lib/generators/templates/lint/erblint.rake +47 -0
  33. data/lib/generators/templates/lint/eslintrc.json +7 -0
  34. data/lib/generators/templates/lint/package.json +4 -0
  35. data/lib/generators/templates/lint/prettierignore +1 -0
  36. data/lib/generators/templates/lint/prettierrc +11 -0
  37. data/lib/generators/templates/lint/rubocop.yml.tt +7 -0
  38. data/lib/generators/templates/prerequisites/node-version.tt +1 -0
  39. data/lib/generators/templates/setup/bin_setup.rb +39 -0
  40. data/lib/generators/templates/styles/postcss.config.js +11 -0
  41. data/lib/generators/templates/testing/driver.rb +5 -0
  42. data/lib/generators/templates/views/flashes.html.erb +7 -0
  43. data/lib/install/web.rb +54 -0
  44. data/lib/suspenders/cleanup/generate_readme.rb +165 -0
  45. data/lib/suspenders/cleanup/organize_gemfile.rb +134 -0
  46. data/lib/suspenders/engine.rb +5 -0
  47. data/lib/suspenders/generators.rb +126 -0
  48. data/lib/suspenders/railtie.rb +4 -0
  49. data/lib/suspenders/version.rb +4 -6
  50. data/lib/suspenders.rb +9 -32
  51. data/lib/tasks/suspenders.rake +37 -0
  52. metadata +85 -187
  53. data/.ruby-version +0 -1
  54. data/CONTRIBUTING.md +0 -59
  55. data/GOALS.md +0 -65
  56. data/LICENSE +0 -21
  57. data/NEWS.md +0 -725
  58. data/RELEASING.md +0 -18
  59. data/bin/suspenders +0 -50
  60. data/docs/heroku_deploy.md +0 -19
  61. data/lib/suspenders/actions/strip_comments_action.rb +0 -254
  62. data/lib/suspenders/actions.rb +0 -85
  63. data/lib/suspenders/adapters/heroku.rb +0 -136
  64. data/lib/suspenders/app_builder.rb +0 -254
  65. data/lib/suspenders/exit_on_failure.rb +0 -19
  66. data/lib/suspenders/generators/advisories_generator.rb +0 -15
  67. data/lib/suspenders/generators/analytics_generator.rb +0 -24
  68. data/lib/suspenders/generators/app_generator.rb +0 -216
  69. data/lib/suspenders/generators/base.rb +0 -60
  70. data/lib/suspenders/generators/ci_generator.rb +0 -32
  71. data/lib/suspenders/generators/db_optimizations_generator.rb +0 -18
  72. data/lib/suspenders/generators/factories_generator.rb +0 -22
  73. data/lib/suspenders/generators/forms_generator.rb +0 -18
  74. data/lib/suspenders/generators/inline_svg_generator.rb +0 -14
  75. data/lib/suspenders/generators/jobs_generator.rb +0 -38
  76. data/lib/suspenders/generators/js_driver_generator.rb +0 -18
  77. data/lib/suspenders/generators/json_generator.rb +0 -14
  78. data/lib/suspenders/generators/lint_generator.rb +0 -14
  79. data/lib/suspenders/generators/production/compression_generator.rb +0 -14
  80. data/lib/suspenders/generators/production/deployment_generator.rb +0 -16
  81. data/lib/suspenders/generators/production/email_generator.rb +0 -34
  82. data/lib/suspenders/generators/production/force_tls_generator.rb +0 -11
  83. data/lib/suspenders/generators/production/manifest_generator.rb +0 -25
  84. data/lib/suspenders/generators/production/single_redirect.rb +0 -15
  85. data/lib/suspenders/generators/production/timeout_generator.rb +0 -22
  86. data/lib/suspenders/generators/profiler_generator.rb +0 -35
  87. data/lib/suspenders/generators/runner_generator.rb +0 -48
  88. data/lib/suspenders/generators/staging/pull_requests_generator.rb +0 -25
  89. data/lib/suspenders/generators/static_generator.rb +0 -14
  90. data/lib/suspenders/generators/stylelint_generator.rb +0 -71
  91. data/lib/suspenders/generators/stylesheet_base_generator.rb +0 -30
  92. data/lib/suspenders/generators/testing_generator.rb +0 -43
  93. data/lib/suspenders/generators/views_generator.rb +0 -30
  94. data/templates/Gemfile.erb +0 -45
  95. data/templates/Procfile +0 -2
  96. data/templates/README.md.erb +0 -28
  97. data/templates/_analytics.html.erb +0 -8
  98. data/templates/_css_overrides.html.erb +0 -7
  99. data/templates/_flashes.html.erb +0 -7
  100. data/templates/_javascript.html.erb +0 -3
  101. data/templates/active_job.rb +0 -13
  102. data/templates/application.scss +0 -7
  103. data/templates/bin_auto_migrate +0 -5
  104. data/templates/bin_deploy +0 -10
  105. data/templates/bin_setup +0 -28
  106. data/templates/bin_setup_review_app.erb +0 -21
  107. data/templates/bundler_audit.rake +0 -4
  108. data/templates/capybara_silence_puma.rb +0 -1
  109. data/templates/chromedriver.rb +0 -27
  110. data/templates/circle.yml.erb +0 -6
  111. data/templates/config_locales_en.yml.erb +0 -19
  112. data/templates/descriptions/advisories.md +0 -5
  113. data/templates/descriptions/analytics.md +0 -4
  114. data/templates/descriptions/ci.md +0 -4
  115. data/templates/descriptions/compression.md +0 -4
  116. data/templates/descriptions/db_optimizations.md +0 -2
  117. data/templates/descriptions/deployment.md +0 -5
  118. data/templates/descriptions/email.md +0 -9
  119. data/templates/descriptions/factories.md +0 -12
  120. data/templates/descriptions/force_tls.md +0 -1
  121. data/templates/descriptions/forms.md +0 -1
  122. data/templates/descriptions/inline_svg.md +0 -2
  123. data/templates/descriptions/jobs.md +0 -3
  124. data/templates/descriptions/js_driver.md +0 -4
  125. data/templates/descriptions/json.md +0 -1
  126. data/templates/descriptions/lint.md +0 -3
  127. data/templates/descriptions/manifest.md +0 -2
  128. data/templates/descriptions/profiler.md +0 -7
  129. data/templates/descriptions/pull_requests.md +0 -4
  130. data/templates/descriptions/runner.md +0 -10
  131. data/templates/descriptions/single_redirect.md +0 -1
  132. data/templates/descriptions/static.md +0 -5
  133. data/templates/descriptions/stylelint.md +0 -3
  134. data/templates/descriptions/stylesheet_base.md +0 -4
  135. data/templates/descriptions/testing.md +0 -9
  136. data/templates/descriptions/timeout.md +0 -4
  137. data/templates/descriptions/views.md +0 -8
  138. data/templates/email.rb +0 -3
  139. data/templates/errors.rb +0 -35
  140. data/templates/flashes_helper.rb +0 -5
  141. data/templates/hound.yml +0 -15
  142. data/templates/json_encoding.rb +0 -1
  143. data/templates/oj.rb +0 -3
  144. data/templates/partials/ci_simplecov.rb +0 -14
  145. data/templates/partials/db_optimizations_configuration.rb +0 -7
  146. data/templates/partials/deployment_readme.md +0 -8
  147. data/templates/partials/email_smtp.rb +0 -2
  148. data/templates/partials/profiler_readme.md +0 -8
  149. data/templates/partials/pull_requests_config.rb +0 -5
  150. data/templates/partials/runner_readme.md +0 -31
  151. data/templates/partials/runner_setup.rb +0 -2
  152. data/templates/postgresql_database.yml.erb +0 -20
  153. data/templates/rack_mini_profiler.rb +0 -7
  154. data/templates/rails_helper.rb +0 -25
  155. data/templates/sample_env +0 -11
  156. data/templates/secrets.yml +0 -8
  157. data/templates/smtp.rb +0 -9
  158. data/templates/spec_helper.rb +0 -25
  159. data/templates/suspenders_gitignore +0 -18
  160. data/templates/suspenders_layout.html.erb.erb +0 -21
  161. /data/{templates → lib/generators/templates/factories}/factories.rb +0 -0
  162. /data/{templates → lib/generators/templates/factories}/factory_bot_rspec.rb +0 -0
  163. /data/{templates → lib/generators/templates/inline_svg}/inline_svg.rb +0 -0
  164. /data/{templates → lib/generators/templates/lint}/stylelintrc.json +0 -0
  165. /data/{templates → lib/generators/templates/tasks}/dev.rake +0 -0
  166. /data/{templates → lib/generators/templates/testing}/action_mailer.rb +0 -0
  167. /data/{templates → lib/generators/templates/testing}/i18n.rb +0 -0
  168. /data/{templates/shoulda_matchers_config_rspec.rb → lib/generators/templates/testing/shoulda_matchers.rb} +0 -0
@@ -1,254 +0,0 @@
1
- require "forwardable"
2
-
3
- module Suspenders
4
- class AppBuilder < Rails::AppBuilder
5
- include Suspenders::Actions
6
- extend Forwardable
7
-
8
- def_delegators(
9
- :heroku_adapter,
10
- :create_heroku_pipeline,
11
- :create_production_heroku_app,
12
- :create_staging_heroku_app,
13
- :set_heroku_application_host,
14
- :set_heroku_backup_schedule,
15
- :set_heroku_honeybadger_env,
16
- :set_heroku_rails_secrets,
17
- :set_heroku_remotes,
18
- :set_heroku_buildpacks
19
- )
20
-
21
- def readme
22
- template "README.md.erb", "README.md"
23
- end
24
-
25
- def gitignore
26
- copy_file "suspenders_gitignore", ".gitignore"
27
- end
28
-
29
- def gemfile
30
- template "Gemfile.erb", "Gemfile"
31
- end
32
-
33
- def setup_rack_mini_profiler
34
- copy_file(
35
- "rack_mini_profiler.rb",
36
- "config/initializers/rack_mini_profiler.rb"
37
- )
38
- end
39
-
40
- def raise_on_missing_assets_in_test
41
- configure_environment "test", "config.assets.raise_runtime_errors = true"
42
- end
43
-
44
- def raise_on_delivery_errors
45
- replace_in_file "config/environments/development.rb",
46
- "raise_delivery_errors = false", "raise_delivery_errors = true"
47
- end
48
-
49
- def set_test_delivery_method
50
- inject_into_file(
51
- "config/environments/development.rb",
52
- "\n config.action_mailer.delivery_method = :file",
53
- after: "config.action_mailer.raise_delivery_errors = true"
54
- )
55
- end
56
-
57
- def raise_on_unpermitted_parameters
58
- config = <<-RUBY
59
- config.action_controller.action_on_unpermitted_parameters = :raise
60
- RUBY
61
-
62
- inject_into_class "config/application.rb", "Application", config
63
- end
64
-
65
- def configure_quiet_assets
66
- config = <<-RUBY
67
- config.assets.quiet = true
68
- RUBY
69
-
70
- inject_into_class "config/application.rb", "Application", config
71
- end
72
-
73
- def provide_setup_script
74
- template "bin_setup", "bin/setup", force: true
75
- run "chmod a+x bin/setup"
76
- end
77
-
78
- def configure_generators
79
- config = <<-RUBY
80
-
81
- config.generators do |generate|
82
- generate.helper false
83
- generate.javascripts false
84
- generate.controller_specs false
85
- generate.request_specs true
86
- generate.routing_specs false
87
- generate.stylesheets false
88
- generate.test_framework :rspec
89
- generate.view_specs false
90
- end
91
-
92
- RUBY
93
-
94
- inject_into_class "config/application.rb", "Application", config
95
- end
96
-
97
- def configure_local_mail
98
- copy_file "email.rb", "config/initializers/email.rb"
99
- end
100
-
101
- def setup_asset_host
102
- replace_in_file "config/environments/production.rb",
103
- "# config.action_controller.asset_host = 'http://assets.example.com'",
104
- 'config.action_controller.asset_host = ENV.fetch("ASSET_HOST", ENV.fetch("APPLICATION_HOST"))'
105
-
106
- if File.exist?("config/initializers/assets.rb")
107
- replace_in_file "config/initializers/assets.rb",
108
- "config.assets.version = '1.0'",
109
- 'config.assets.version = (ENV["ASSETS_VERSION"] || "1.0")'
110
- end
111
-
112
- config = <<~EOD
113
- config.public_file_server.headers = {
114
- "Cache-Control" => "public, max-age=31557600",
115
- }
116
- EOD
117
-
118
- configure_environment("production", config)
119
- end
120
-
121
- def setup_secret_token
122
- template "secrets.yml", "config/secrets.yml", force: true
123
- end
124
-
125
- def disallow_wrapping_parameters
126
- remove_file "config/initializers/wrap_parameters.rb"
127
- end
128
-
129
- def use_postgres_config_template
130
- template "postgresql_database.yml.erb", "config/database.yml",
131
- force: true
132
- end
133
-
134
- def create_database
135
- bundle_command "exec rails db:create db:migrate"
136
- end
137
-
138
- def run_database_migrations
139
- bundle_command "exec rails db:migrate"
140
- end
141
-
142
- def replace_gemfile(path)
143
- template "Gemfile.erb", "Gemfile", force: true do |content|
144
- if path
145
- content.gsub(%r{gem .suspenders.}) { |s| %(#{s}, path: "#{path}") }
146
- else
147
- content
148
- end
149
- end
150
- end
151
-
152
- def ruby_version
153
- create_file ".ruby-version", "#{Suspenders::RUBY_VERSION}\n"
154
- end
155
-
156
- def configure_i18n_for_missing_translations
157
- raise_on_missing_translations_in("development")
158
- raise_on_missing_translations_in("test")
159
- end
160
-
161
- def configure_action_mailer_in_specs
162
- copy_file "action_mailer.rb", "spec/support/action_mailer.rb"
163
- end
164
-
165
- def configure_time_formats
166
- remove_file "config/locales/en.yml"
167
- template "config_locales_en.yml.erb", "config/locales/en.yml"
168
- end
169
-
170
- def configure_action_mailer
171
- action_mailer_host "development", %("localhost:3000")
172
- action_mailer_asset_host "development", %("http://localhost:3000")
173
- action_mailer_host "test", %("www.example.com")
174
- action_mailer_asset_host "test", %("http://www.example.com")
175
- action_mailer_host "production", %{ENV.fetch("APPLICATION_HOST")}
176
- # rubocop:disable Lint/InterpolationCheck
177
- action_mailer_asset_host(
178
- "production",
179
- %q{"https://#{ENV.fetch("ASSET_HOST", ENV.fetch("APPLICATION_HOST"))}"}
180
- )
181
- # rubocop:enable Lint/InterpolationCheck
182
- end
183
-
184
- def create_heroku_apps(flags)
185
- create_staging_heroku_app(flags)
186
- create_production_heroku_app(flags)
187
- end
188
-
189
- def configure_automatic_deployment
190
- append_file "Procfile", "release: bin/auto_migrate\n"
191
- copy_file "bin_auto_migrate", "bin/auto_migrate"
192
- end
193
-
194
- def create_github_repo(repo_name)
195
- run "hub create #{repo_name}"
196
- end
197
-
198
- def copy_miscellaneous_files
199
- copy_file "errors.rb", "config/initializers/errors.rb"
200
- copy_file "json_encoding.rb", "config/initializers/json_encoding.rb"
201
- end
202
-
203
- def remove_config_comment_lines
204
- config_files = [
205
- "application.rb",
206
- "environment.rb",
207
- "environments/development.rb",
208
- "environments/production.rb",
209
- "environments/test.rb"
210
- ]
211
-
212
- config_files.each do |config_file|
213
- path = Pathname(destination_root).join("config", config_file)
214
- source = Actions::StripCommentsAction.call(path.read)
215
-
216
- path.write(source)
217
- end
218
- end
219
-
220
- def remove_routes_comment_lines
221
- replace_in_file "config/routes.rb",
222
- /Rails\.application\.routes\.draw do.*end/m,
223
- "Rails.application.routes.draw do\nend"
224
- end
225
-
226
- def setup_default_rake_task
227
- append_file "Rakefile" do
228
- <<~EOS
229
- task(:default).clear
230
- task default: [:spec]
231
-
232
- if defined? RSpec
233
- task(:spec).clear
234
- RSpec::Core::RakeTask.new(:spec) do |t|
235
- t.verbose = false
236
- end
237
- end
238
- EOS
239
- end
240
- end
241
-
242
- private
243
-
244
- def raise_on_missing_translations_in(environment)
245
- config = "config.action_view.raise_on_missing_translations = true"
246
-
247
- uncomment_lines("config/environments/#{environment}.rb", config)
248
- end
249
-
250
- def heroku_adapter
251
- @heroku_adapter ||= Adapters::Heroku.new(self)
252
- end
253
- end
254
- end
@@ -1,19 +0,0 @@
1
- require "active_support/concern"
2
- require "English"
3
-
4
- module Suspenders
5
- module ExitOnFailure
6
- extend ActiveSupport::Concern
7
-
8
- def bundle_command(*)
9
- super
10
- exit(false) if $CHILD_STATUS.exitstatus.nonzero?
11
- end
12
-
13
- module ClassMethods
14
- def exit_on_failure?
15
- true
16
- end
17
- end
18
- end
19
- end
@@ -1,15 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class AdvisoriesGenerator < Generators::Base
5
- def bundler_audit_gem
6
- gem "bundler-audit", ">= 0.7.0", require: false, group: %i[development test]
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def rake_task
11
- copy_file "bundler_audit.rake", "lib/tasks/bundler_audit.rake"
12
- append_file "Rakefile", %(\ntask default: "bundle:audit"\n)
13
- end
14
- end
15
- end
@@ -1,24 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class AnalyticsGenerator < Generators::Base
5
- def install_partial
6
- copy_file "_analytics.html.erb",
7
- "app/views/application/_analytics.html.erb"
8
- end
9
-
10
- def render_partial
11
- if File.exist?(js_partial)
12
- inject_into_file js_partial,
13
- %(\n\n<%= render "analytics" %>),
14
- after: "<%= yield :javascript %>"
15
- end
16
- end
17
-
18
- private
19
-
20
- def js_partial
21
- "app/views/application/_javascript.html.erb"
22
- end
23
- end
24
- end
@@ -1,216 +0,0 @@
1
- require "rails/generators"
2
- require "rails/generators/rails/app/app_generator"
3
-
4
- module Suspenders
5
- class AppGenerator < Rails::Generators::AppGenerator
6
- include ExitOnFailure
7
-
8
- hide!
9
-
10
- class_option :database, type: :string, aliases: "-d", default: "postgresql",
11
- desc: "Configure for selected database (options: #{DATABASES.join("/")})"
12
-
13
- class_option :heroku, type: :boolean, aliases: "-H", default: false,
14
- desc: "Create staging and production Heroku apps"
15
-
16
- class_option :heroku_flags, type: :string, default: "",
17
- desc: "Set extra Heroku flags"
18
-
19
- class_option :github, type: :string, default: nil,
20
- desc: "Create Github repository and add remote origin pointed to repo"
21
-
22
- class_option :version, type: :boolean, aliases: "-v", group: :suspenders,
23
- desc: "Show Suspenders version number and quit"
24
-
25
- class_option :help, type: :boolean, aliases: "-h", group: :suspenders,
26
- desc: "Show this help message and quit"
27
-
28
- class_option :path, type: :string, default: nil,
29
- desc: "Path to the gem"
30
-
31
- class_option :skip_test, type: :boolean, default: true,
32
- desc: "Skip Test Unit"
33
-
34
- class_option :skip_system_test,
35
- type: :boolean, default: true, desc: "Skip system test files"
36
-
37
- class_option :skip_turbolinks,
38
- type: :boolean, default: true, desc: "Skip turbolinks gem"
39
-
40
- class_option :skip_spring, type: :boolean, default: true,
41
- desc: class_options[:skip_spring].description
42
-
43
- def finish_template
44
- invoke :suspenders_customization
45
- super
46
- end
47
-
48
- def suspenders_customization
49
- invoke :customize_gemfile
50
- invoke :setup_development_environment
51
- invoke :setup_production_environment
52
- invoke :setup_secret_token
53
- invoke :configure_app
54
- invoke :copy_miscellaneous_files
55
- invoke :setup_database
56
- invoke :create_github_repo
57
- invoke :generate_default
58
- invoke :create_heroku_apps
59
- invoke :generate_deployment_default
60
- invoke :remove_config_comment_lines
61
- invoke :remove_routes_comment_lines
62
- invoke :run_database_migrations
63
- invoke :outro
64
- end
65
-
66
- def customize_gemfile
67
- build :replace_gemfile, options[:path]
68
- bundle_command "install"
69
- end
70
-
71
- def setup_database
72
- say "Setting up database"
73
-
74
- if options[:database] == "postgresql"
75
- build :use_postgres_config_template
76
- end
77
-
78
- build :create_database
79
- end
80
-
81
- def setup_development_environment
82
- say "Setting up the development environment"
83
- build :configure_local_mail
84
- build :raise_on_missing_assets_in_test
85
- build :raise_on_delivery_errors
86
- build :set_test_delivery_method
87
- build :raise_on_unpermitted_parameters
88
- build :provide_setup_script
89
- build :configure_generators
90
- build :configure_i18n_for_missing_translations
91
- build :configure_quiet_assets
92
- end
93
-
94
- def setup_production_environment
95
- say "Setting up the production environment"
96
- build :setup_asset_host
97
- end
98
-
99
- def setup_secret_token
100
- say "Moving secret token out of version control"
101
- build :setup_secret_token
102
- end
103
-
104
- def configure_app
105
- say "Configuring app"
106
- build :configure_action_mailer
107
- build :configure_time_formats
108
- build :setup_default_rake_task
109
- end
110
-
111
- def create_heroku_apps
112
- if options[:heroku]
113
- say "Creating Heroku apps"
114
- build :create_heroku_apps, options[:heroku_flags]
115
- build :set_heroku_remotes
116
- build :set_heroku_rails_secrets
117
- build :set_heroku_application_host
118
- build :set_heroku_honeybadger_env
119
- build :set_heroku_backup_schedule
120
- build :set_heroku_buildpacks
121
- build :create_heroku_pipeline
122
- build :configure_automatic_deployment
123
- end
124
- end
125
-
126
- def create_github_repo
127
- if !options[:skip_git] && options[:github]
128
- say "Creating Github repo"
129
- build :create_github_repo, options[:github]
130
- end
131
- end
132
-
133
- def copy_miscellaneous_files
134
- say "Copying miscellaneous support files"
135
- build :copy_miscellaneous_files
136
- end
137
-
138
- def remove_config_comment_lines
139
- build :remove_config_comment_lines
140
- end
141
-
142
- def remove_routes_comment_lines
143
- build :remove_routes_comment_lines
144
- end
145
-
146
- def run_database_migrations
147
- build :run_database_migrations
148
- end
149
-
150
- def generate_default
151
- run("spring stop > /dev/null 2>&1 || true")
152
- generate("suspenders:runner")
153
- generate("suspenders:profiler")
154
- generate("suspenders:json")
155
- generate("suspenders:static")
156
- generate("suspenders:stylesheet_base") unless options[:api]
157
- generate("suspenders:testing")
158
- generate("suspenders:ci")
159
- generate("suspenders:js_driver")
160
- generate("suspenders:forms") unless options[:api]
161
- generate("suspenders:db_optimizations")
162
- generate("suspenders:factories")
163
- generate("suspenders:lint")
164
- generate("suspenders:jobs")
165
- generate("suspenders:analytics")
166
- generate("suspenders:inline_svg")
167
- generate("suspenders:advisories")
168
- end
169
-
170
- def generate_deployment_default
171
- generate("suspenders:staging:pull_requests")
172
- generate("suspenders:production:single_redirect")
173
- generate("suspenders:production:compression")
174
- generate("suspenders:production:force_tls")
175
- generate("suspenders:production:email")
176
- generate("suspenders:production:timeout")
177
- generate("suspenders:production:deployment")
178
- generate("suspenders:production:manifest")
179
- end
180
-
181
- def generate_views
182
- generate("suspenders:views")
183
- end
184
-
185
- def outro
186
- say "Congratulations! You just pulled our suspenders."
187
- say honeybadger_outro
188
- end
189
-
190
- def self.banner
191
- "suspenders #{arguments.map(&:usage).join(" ")} [options]"
192
- end
193
-
194
- protected
195
-
196
- def get_builder_class
197
- Suspenders::AppBuilder
198
- end
199
-
200
- def using_active_record?
201
- !options[:skip_active_record]
202
- end
203
-
204
- private
205
-
206
- def honeybadger_outro
207
- "Run 'bundle exec honeybadger heroku install' with your API key#{honeybadger_message_suffix}."
208
- end
209
-
210
- def honeybadger_message_suffix
211
- if options[:heroku]
212
- " unless you're using the Heroku Honeybadger add-on"
213
- end
214
- end
215
- end
216
- end
@@ -1,60 +0,0 @@
1
- require "rails/generators"
2
- require_relative "../actions"
3
-
4
- module Suspenders
5
- module Generators
6
- class Base < Rails::Generators::Base
7
- include Suspenders::Actions
8
- include ExitOnFailure
9
-
10
- def self.default_source_root
11
- File.expand_path(File.join("..", "..", "..", "templates"), __dir__)
12
- end
13
-
14
- def self.inherited(subclass)
15
- super
16
-
17
- description_file = File.expand_path(
18
- File.join(
19
- default_source_root,
20
- "descriptions",
21
- "#{subclass.generator_name}.md"
22
- )
23
- )
24
-
25
- subclass.desc File.read(description_file)
26
- rescue Errno::ENOENT
27
- end
28
-
29
- private
30
-
31
- def app_name
32
- Rails.app_class.module_parent_name.demodulize.underscore.dasherize
33
- end
34
-
35
- def empty_directory_with_keep_file(destination)
36
- empty_directory(destination, {})
37
- keep_file(destination)
38
- end
39
-
40
- def keep_file(destination)
41
- create_file(File.join(destination, ".keep"))
42
- end
43
-
44
- def append_template_to_file(destination, source, *args)
45
- partial = File.expand_path(find_in_source_paths(source))
46
- append_to_file(destination, File.read(partial, *args))
47
- end
48
-
49
- def prepend_template_to_file(destination, source, *args)
50
- partial = File.expand_path(find_in_source_paths(source))
51
- prepend_to_file(destination, File.read(partial, *args))
52
- end
53
-
54
- def inject_template_into_file(destination, source, *args)
55
- partial = File.expand_path(find_in_source_paths(source))
56
- inject_into_file(destination, File.read(partial), *args)
57
- end
58
- end
59
- end
60
- end
@@ -1,32 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class CiGenerator < Generators::Base
5
- def simplecov_gem
6
- gem "simplecov", require: false, group: [:test]
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def simplecov_test_integration
11
- prepend_template_to_file(test_helper_file, "partials/ci_simplecov.rb")
12
- end
13
-
14
- def configure_ci
15
- template "circle.yml.erb", "circle.yml"
16
- end
17
-
18
- private
19
-
20
- def test_helper_file
21
- if using_rspec?
22
- "spec/spec_helper.rb"
23
- else
24
- "test/test_helper.rb"
25
- end
26
- end
27
-
28
- def using_rspec?
29
- File.exist?("spec/spec_helper.rb")
30
- end
31
- end
32
- end
@@ -1,18 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class DbOptimizationsGenerator < Generators::Base
5
- def add_bullet
6
- gem "bullet", group: %i[development test]
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def configure_bullet
11
- inject_template_into_file(
12
- "config/environments/development.rb",
13
- "partials/db_optimizations_configuration.rb",
14
- after: /config.action_mailer.raise_delivery_errors = .*/
15
- )
16
- end
17
- end
18
- end
@@ -1,22 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class FactoriesGenerator < Generators::Base
5
- def add_factory_bot
6
- gem "factory_bot_rails", group: %i[development test]
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def set_up_factory_bot_for_rspec
11
- copy_file "factory_bot_rspec.rb", "spec/support/factory_bot.rb"
12
- end
13
-
14
- def generate_empty_factories_file
15
- copy_file "factories.rb", "spec/factories.rb"
16
- end
17
-
18
- def provide_dev_prime_task
19
- copy_file "dev.rake", "lib/tasks/dev.rake"
20
- end
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class FormsGenerator < Generators::Base
5
- def add_simple_form
6
- gem "simple_form"
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def configure_simple_form
11
- create_file "config/initializers/simple_form.rb" do
12
- "SimpleForm.setup {|config|}"
13
- end
14
-
15
- generate "simple_form:install", "--force"
16
- end
17
- end
18
- end
@@ -1,14 +0,0 @@
1
- require_relative "base"
2
-
3
- module Suspenders
4
- class InlineSvgGenerator < Generators::Base
5
- def add_inline_svg
6
- gem "inline_svg"
7
- Bundler.with_unbundled_env { run "bundle install" }
8
- end
9
-
10
- def configure_inline_svg
11
- copy_file "inline_svg.rb", "config/initializers/inline_svg.rb"
12
- end
13
- end
14
- end