suspenders 1.51.0 → 1.55.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +6 -3
  4. data/CONTRIBUTING.md +15 -15
  5. data/GOALS.md +65 -0
  6. data/Gemfile +1 -1
  7. data/NEWS.md +52 -0
  8. data/README.md +5 -4
  9. data/Rakefile +6 -5
  10. data/docs/heroku_deploy.md +19 -0
  11. data/lib/suspenders.rb +7 -0
  12. data/lib/suspenders/actions.rb +2 -2
  13. data/lib/suspenders/adapters/heroku.rb +27 -14
  14. data/lib/suspenders/app_builder.rb +42 -111
  15. data/lib/suspenders/generators/advisories_generator.rb +15 -0
  16. data/lib/suspenders/generators/analytics_generator.rb +1 -1
  17. data/lib/suspenders/generators/app_generator.rb +36 -58
  18. data/lib/suspenders/generators/base.rb +40 -1
  19. data/lib/suspenders/generators/ci_generator.rb +19 -9
  20. data/lib/suspenders/generators/db_optimizations_generator.rb +5 -17
  21. data/lib/suspenders/generators/factories_generator.rb +2 -2
  22. data/lib/suspenders/generators/forms_generator.rb +1 -1
  23. data/lib/suspenders/generators/inline_svg_generator.rb +14 -0
  24. data/lib/suspenders/generators/jobs_generator.rb +4 -4
  25. data/lib/suspenders/generators/js_driver_generator.rb +7 -4
  26. data/lib/suspenders/generators/json_generator.rb +1 -1
  27. data/lib/suspenders/generators/lint_generator.rb +5 -0
  28. data/lib/suspenders/generators/preloader_generator.rb +122 -0
  29. data/lib/suspenders/generators/production/compression_generator.rb +14 -0
  30. data/lib/suspenders/generators/production/deployment_generator.rb +1 -12
  31. data/lib/suspenders/generators/production/email_generator.rb +9 -12
  32. data/lib/suspenders/generators/production/manifest_generator.rb +8 -7
  33. data/lib/suspenders/generators/production/single_redirect.rb +15 -0
  34. data/lib/suspenders/generators/production/timeout_generator.rb +3 -2
  35. data/lib/suspenders/generators/profiler_generator.rb +35 -0
  36. data/lib/suspenders/generators/runner_generator.rb +48 -0
  37. data/lib/suspenders/generators/staging/pull_requests_generator.rb +4 -12
  38. data/lib/suspenders/generators/static_generator.rb +5 -1
  39. data/lib/suspenders/generators/stylelint_generator.rb +2 -1
  40. data/lib/suspenders/generators/stylesheet_base_generator.rb +7 -8
  41. data/lib/suspenders/generators/testing_generator.rb +6 -17
  42. data/lib/suspenders/version.rb +6 -6
  43. data/spec/adapters/heroku_spec.rb +36 -10
  44. data/spec/expand_json_spec.rb +89 -0
  45. data/spec/fakes/bin/heroku +1 -1
  46. data/spec/fakes/bin/hub +1 -1
  47. data/spec/features/advisories_spec.rb +24 -0
  48. data/spec/features/api_spec.rb +1 -1
  49. data/spec/features/ci_spec.rb +31 -0
  50. data/spec/features/cli_help_spec.rb +4 -4
  51. data/spec/features/db_optimizations_spec.rb +19 -0
  52. data/spec/features/heroku_spec.rb +9 -16
  53. data/spec/features/inline_svg_spec.rb +10 -0
  54. data/spec/features/lint_spec.rb +26 -0
  55. data/spec/features/new_project_spec.rb +38 -60
  56. data/spec/features/preloader_spec.rb +25 -0
  57. data/spec/features/production/compression_spec.rb +23 -0
  58. data/spec/features/production/email_spec.rb +10 -10
  59. data/spec/features/production/manifest_spec.rb +16 -14
  60. data/spec/features/production/single_redirect_spec.rb +25 -0
  61. data/spec/features/profiler_spec.rb +20 -0
  62. data/spec/features/runner_spec.rb +30 -0
  63. data/spec/features/staging/pull_requests_spec.rb +1 -1
  64. data/spec/features/static_spec.rb +17 -0
  65. data/spec/features/stylelint_spec.rb +7 -7
  66. data/spec/spec_helper.rb +3 -3
  67. data/spec/support/contain_json_matcher.rb +16 -10
  68. data/spec/support/fake_github.rb +3 -3
  69. data/spec/support/fake_heroku.rb +8 -8
  70. data/spec/support/project_files.rb +12 -0
  71. data/spec/support/rails_template.rb +1 -0
  72. data/spec/support/suspenders.rb +21 -19
  73. data/suspenders.gemspec +20 -20
  74. data/templates/Gemfile.erb +2 -10
  75. data/templates/_javascript.html.erb +1 -1
  76. data/templates/application.scss +0 -1
  77. data/templates/bin_auto_migrate +5 -0
  78. data/templates/bin_deploy +0 -2
  79. data/templates/bin_setup +2 -2
  80. data/templates/bin_setup_review_app.erb +0 -1
  81. data/templates/capybara_silence_puma.rb +1 -0
  82. data/templates/chromedriver.rb +14 -4
  83. data/templates/descriptions/advisories.md +5 -0
  84. data/templates/descriptions/analytics.md +4 -0
  85. data/templates/descriptions/ci.md +4 -0
  86. data/templates/descriptions/compression.md +4 -0
  87. data/templates/descriptions/db_optimizations.md +2 -0
  88. data/templates/descriptions/deployment.md +5 -0
  89. data/templates/descriptions/email.md +9 -0
  90. data/templates/descriptions/factories.md +12 -0
  91. data/templates/descriptions/force_tls.md +1 -0
  92. data/templates/descriptions/forms.md +1 -0
  93. data/templates/descriptions/inline_svg.md +2 -0
  94. data/templates/descriptions/jobs.md +3 -0
  95. data/templates/descriptions/js_driver.md +4 -0
  96. data/templates/descriptions/json.md +1 -0
  97. data/templates/descriptions/lint.md +3 -0
  98. data/templates/descriptions/manifest.md +2 -0
  99. data/templates/descriptions/preloader.md +3 -0
  100. data/templates/descriptions/profiler.md +7 -0
  101. data/templates/descriptions/pull_requests.md +4 -0
  102. data/templates/descriptions/runner.md +10 -0
  103. data/templates/descriptions/single_redirect.md +1 -0
  104. data/templates/descriptions/static.md +5 -0
  105. data/templates/descriptions/stylelint.md +3 -0
  106. data/templates/descriptions/stylesheet_base.md +4 -0
  107. data/templates/descriptions/testing.md +9 -0
  108. data/templates/descriptions/timeout.md +4 -0
  109. data/templates/descriptions/views.md +8 -0
  110. data/templates/errors.rb +3 -3
  111. data/templates/hound.yml +1 -2
  112. data/templates/inline_svg.rb +3 -0
  113. data/templates/partials/ci_simplecov.rb +14 -0
  114. data/templates/partials/db_optimizations_configuration.rb +5 -0
  115. data/templates/partials/deployment_readme.md +8 -0
  116. data/templates/partials/email_smtp.rb +2 -0
  117. data/templates/partials/profiler_readme.md +8 -0
  118. data/templates/partials/pull_requests_config.rb +4 -0
  119. data/templates/partials/runner_readme.md +31 -0
  120. data/templates/partials/runner_setup.rb +2 -0
  121. data/templates/rack_mini_profiler.rb +2 -0
  122. data/templates/rails_helper.rb +7 -4
  123. data/templates/{dotfiles/.env → sample_env} +0 -2
  124. data/templates/spec_helper.rb +4 -7
  125. data/templates/spring.rb +6 -0
  126. data/templates/suspenders_gitignore +1 -1
  127. metadata +99 -14
  128. data/templates/browserslist +0 -3
  129. data/templates/dotfiles/.ctags +0 -2
  130. data/templates/puma.rb +0 -28
@@ -0,0 +1,5 @@
1
+ Show security advisories during development.
2
+
3
+ Uses the `bundler-audit` gem and rake task to update the local security
4
+ database and show any relevant issues with the app's dependencies. This happens
5
+ on every test run and interaction with `bin/rake` and `bin/rails`.
@@ -0,0 +1,4 @@
1
+ Work with a user analytics service.
2
+
3
+ Add the JavaScript for connecting to Segment to a partial and, if possible,
4
+ include that partial on every page.
@@ -0,0 +1,4 @@
1
+ Prepare the app for running tests on a continuous integration service.
2
+
3
+ Sets up a CircleCI configuration using `bin/setup` to initialize the app and
4
+ `rake` to run the tests. Use SimpleCov for code coverage metrics on CI.
@@ -0,0 +1,4 @@
1
+ Compress HTTP requests at the Rails layer.
2
+
3
+ This uses `Rack::Deflater`, and is done at the app layer instead of at the Web
4
+ server layer.
@@ -0,0 +1,2 @@
1
+ Get database performance insights as you develop. This installs and configures
2
+ Bullet.
@@ -0,0 +1,5 @@
1
+ Script and document the deployment.
2
+
3
+ This adds a `bin/deploy` script, to be called like `deploy staging` or
4
+ `deploy production`, along with updates to the README.md describing how to use
5
+ it.
@@ -0,0 +1,9 @@
1
+ Configure the app for email.
2
+
3
+ Set the app up with SMTP in production. This expects the following environment
4
+ variables to be set:
5
+
6
+ - `SMTP_ADDRESS`
7
+ - `SMTP_DOMAIN`
8
+ - `SMTP_PASSWORD`
9
+ - `SMTP_USERNAME`
@@ -0,0 +1,12 @@
1
+ Build test data with clarity and ease.
2
+
3
+ This uses FactoryBot to help you define dummy and test data for your test
4
+ suite. The `create`, `build`, and `build_stubbed` class methods are directly
5
+ available to all tests.
6
+
7
+ We recommend putting FactoryBot definitions in one `spec/factories.rb` file, at
8
+ least until it grows unwieldy. This helps reduce confusion around circular
9
+ dependencies and makes it easy to jump between definitions.
10
+
11
+ Outside of the tests, the `dev:prime` rake task can be used to insert initial
12
+ development data into the database. You can use FactoryBot here, too.
@@ -0,0 +1 @@
1
+ Redirect users to the HTTPS URL on the production Web site.
@@ -0,0 +1 @@
1
+ Make forms easier to make with form helpers. This mostly involves SimpleForm.
@@ -0,0 +1,2 @@
1
+ Render SVG images inline, as a potential performance improvement for the
2
+ viewer.
@@ -0,0 +1,3 @@
1
+ Set up our favorite job runner.
2
+
3
+ Currently we like DelayedJob. Run all tests inline by default.
@@ -0,0 +1,4 @@
1
+ Set up the test suite for running JavaScript tests.
2
+
3
+ This uses the latest and greatest JavaScript test runner -- currently,
4
+ chromedriver. It comes with a headless mode and a headful/debugging mode.
@@ -0,0 +1 @@
1
+ Use the fastest JSON parser available.
@@ -0,0 +1,3 @@
1
+ Prepare the app for style linting.
2
+
3
+ This sets up your app to use Hound with a default Hound configuration.
@@ -0,0 +1,2 @@
1
+ Write the AppManifest (`app.json`) document with all the environment variables
2
+ we require.
@@ -0,0 +1,3 @@
1
+ Speed up your Rails development flow with a preloader.
2
+
3
+ This installs Spring, including the Spring binstubs.
@@ -0,0 +1,7 @@
1
+ Show runtime profiling for your Rails app as you develop it.
2
+
3
+ This uses the `rack-mini-profiler` gem to show a speed badge on every page.
4
+ This is controlled by the `RACK_MINI_PROFILER` environment variable which
5
+ defaults to `0` in the `.sample.env`. Set it to `1` to enable profiling.
6
+
7
+ Updates your README.md to explain this environment variable.
@@ -0,0 +1,4 @@
1
+ Create a staging environment for each pull request.
2
+
3
+ This glues Heroku review apps to GitHub pull requests, populating the database
4
+ from the generic staging environment on a low-scale review app.
@@ -0,0 +1,10 @@
1
+ Set up the app to run locally with ease.
2
+
3
+ Use Puma and the Rails jobs runner to run the app. This can be done via either
4
+ `heroku local` or any Foreman-compatible project runner (e.g. `foreman start`).
5
+
6
+ Configure your app using `.env`. Installs a basic `.sample.env` that is meant
7
+ to be checked into git and used as a template for your `.env`. The `bin/setup`
8
+ script is modified to safely copy `.sample.env` to `.env` for you.
9
+
10
+ Document all of this in the README.
@@ -0,0 +1 @@
1
+ Canonicalize the URL by configuring the `Rack::CanonicalHost` middleware.
@@ -0,0 +1,5 @@
1
+ Easily add static pages to your dynamic Rails app.
2
+
3
+ Files placed in the `app/views/pages` directory are rendered using the standard
4
+ Rails view renderer and accessible at `/pages/:view_name`, via the
5
+ `high_voltage` gem.
@@ -0,0 +1,3 @@
1
+ Enable stylesheet linting.
2
+
3
+ This configures the stylelint tool to work locally and integrated with Hound.
@@ -0,0 +1,4 @@
1
+ Set up the basic tools needed for the thoughtbot design system.
2
+
3
+ This integrates the Bourbon library of Scss mixins with Normalize.css as a
4
+ reset, then re-styles it by bringing Bitters into your project.
@@ -0,0 +1,9 @@
1
+ Set up the project for an in-depth test-driven development workflow.
2
+
3
+ - Maintain the test DB schema.
4
+ - Clear mail deliveries between tests.
5
+ - Import i18n helpers for use in tests.
6
+ - Prepare for system tests in `spec/system`.
7
+ - Integrate Formulaic for easier form testing.
8
+ - RSpec infers the file type based on the directory name.
9
+ - Install and configure RSpec and shoulda-matchers, with Spring integration.
@@ -0,0 +1,4 @@
1
+ Kill Rack requests that last too long.
2
+
3
+ This adds the `rack-timeout` gem and configures it to kill the connection after
4
+ 10 seconds.
@@ -0,0 +1,8 @@
1
+ View templates for flash, JavaScript, and CSS.
2
+
3
+ - Disable CSS animations in tests.
4
+ - Run JavaScript when the page has loaded.
5
+ - Use the `title` gem for controlling the page title via i18n.
6
+ - Insert one-off JavaScript into a `:javascript` content block.
7
+ - Creates the directory for storing generic, application-level partials.
8
+ - Render user-facing partials (alert, error, notice, success) on all pages.
@@ -15,7 +15,7 @@ HTTP_ERRORS = [
15
15
  Net::HTTPBadResponse,
16
16
  Net::HTTPHeaderSyntaxError,
17
17
  Net::ProtocolError,
18
- Timeout::Error,
18
+ Timeout::Error
19
19
  ]
20
20
 
21
21
  SMTP_SERVER_ERRORS = [
@@ -23,12 +23,12 @@ SMTP_SERVER_ERRORS = [
23
23
  Net::SMTPAuthenticationError,
24
24
  Net::SMTPServerBusy,
25
25
  Net::SMTPUnknownError,
26
- Timeout::Error,
26
+ Timeout::Error
27
27
  ]
28
28
 
29
29
  SMTP_CLIENT_ERRORS = [
30
30
  Net::SMTPFatalError,
31
- Net::SMTPSyntaxError,
31
+ Net::SMTPSyntaxError
32
32
  ]
33
33
 
34
34
  SMTP_ERRORS = SMTP_SERVER_ERRORS + SMTP_CLIENT_ERRORS
@@ -7,8 +7,7 @@ javascript:
7
7
  enabled: true
8
8
  # ignore_file: .javascript_ignore
9
9
  ruby:
10
- # config_file: .ruby-style.yml
11
- enabled: true
10
+ enabled: false
12
11
  scss:
13
12
  enabled: false
14
13
  stylelint:
@@ -0,0 +1,3 @@
1
+ InlineSvg.configure do |config|
2
+ config.raise_on_file_not_found = true
3
+ end
@@ -0,0 +1,14 @@
1
+ if ENV.fetch("COVERAGE", false)
2
+ require "simplecov"
3
+
4
+ if ENV["CIRCLE_ARTIFACTS"]
5
+ dir = File.join(ENV["CIRCLE_ARTIFACTS"], "coverage")
6
+ SimpleCov.coverage_dir(dir)
7
+ end
8
+
9
+ SimpleCov.start "rails"
10
+
11
+ if defined?(Spring) && ENV["DISABLE_SPRING"].to_i == 1
12
+ Rails.application.eager_load!
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ config.after_initialize do
2
+ Bullet.enable = true
3
+ Bullet.bullet_logger = true
4
+ Bullet.rails_logger = true
5
+ end
@@ -0,0 +1,8 @@
1
+
2
+ ## Deploying
3
+
4
+ If you have previously run the `./bin/setup` script,
5
+ you can deploy to staging and production with:
6
+
7
+ % ./bin/deploy staging
8
+ % ./bin/deploy production
@@ -0,0 +1,2 @@
1
+ config.action_mailer.delivery_method = :smtp
2
+ config.action_mailer.smtp_settings = SMTP_SETTINGS
@@ -0,0 +1,8 @@
1
+
2
+ ## Profiler
3
+
4
+ The [rack-mini-profiler] gem can be enabled by setting
5
+ `RACK_MINI_PROFILER=1` in the environment. This will display a speed
6
+ badge on every page.
7
+
8
+ [rack-mini-profiler]: https://github.com/MiniProfiler/rack-mini-profiler
@@ -0,0 +1,4 @@
1
+ if ENV.fetch("HEROKU_APP_NAME", "").include?("staging-pr-")
2
+ ENV["APPLICATION_HOST"] = ENV["HEROKU_APP_NAME"] + ".herokuapp.com"
3
+ ENV["ASSET_HOST"] = ENV["HEROKU_APP_NAME"] + ".herokuapp.com"
4
+ end
@@ -0,0 +1,31 @@
1
+ ## Configuration
2
+
3
+ Environment variables during local development are handled by the node-foreman
4
+ project runner. To provide environment variables, create a `.env` file at the
5
+ root of the project. In that file provide the environment variables listed in
6
+ `.sample.env`. The `bin/setup` script does this for you, but be careful about
7
+ overwriting your existing `.env` file.
8
+
9
+ `app.json` also contains a list of environment variables that are required for
10
+ the application. The `.sample.env` file provides either non-secret vars that
11
+ can be copied directly into your own `.env` file or instructions on where to
12
+ obtain secret values.
13
+
14
+ During development add any new environment variables needed by the application
15
+ to both `.sample.env` and `app.json`, providing either **public** default
16
+ values or brief instructions on where secret values may be found.
17
+
18
+ Do not commit the `.env` file to the git repo.
19
+
20
+ ## Running the Application
21
+
22
+ Use the `heroku local` runner to run the app locally as it would run on Heroku.
23
+ This uses the node-forman runner, which reads from the `Procfile` file.
24
+
25
+ ```sh
26
+ heroku local
27
+ ```
28
+
29
+ Once the server is started the application is reachable at
30
+ `http://localhost:3000`.
31
+
@@ -0,0 +1,2 @@
1
+ puts "\n== Copying sample env =="
2
+ system! "cp -i .sample.env .env"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if ENV["RACK_MINI_PROFILER"].to_i > 0
2
4
  require "rack-mini-profiler"
3
5
 
@@ -1,19 +1,22 @@
1
1
  ENV["RACK_ENV"] = "test"
2
2
 
3
3
  require File.expand_path("../../config/environment", __FILE__)
4
- abort("DATABASE_URL environment variable is set") if ENV["DATABASE_URL"]
4
+
5
+ if Rails.env.production?
6
+ abort("The Rails environment is running in production mode!")
7
+ end
5
8
 
6
9
  require "rspec/rails"
7
10
 
8
11
  Dir[Rails.root.join("spec/support/**/*.rb")].sort.each { |file| require file }
9
12
 
10
- module Features
11
- # Extend this module in spec/support/features/*.rb
13
+ module SystemTestHelper
14
+ # Extend this module in spec/support/system/*.rb
12
15
  include Formulaic::Dsl
13
16
  end
14
17
 
15
18
  RSpec.configure do |config|
16
- config.include Features, type: :feature
19
+ config.include SystemTestHelper, type: :system
17
20
  config.infer_base_class_for_anonymous_controllers = false
18
21
  config.infer_spec_type_from_file_location!
19
22
  config.use_transactional_fixtures = true
@@ -3,9 +3,7 @@ ASSET_HOST=localhost:3000
3
3
  APPLICATION_HOST=localhost:3000
4
4
  PORT=3000
5
5
  RACK_ENV=development
6
- RACK_MINI_PROFILER=0
7
6
  SECRET_KEY_BASE=development_secret
8
- EXECJS_RUNTIME=Node
9
7
  SMTP_ADDRESS=smtp.example.com
10
8
  SMTP_DOMAIN=example.com
11
9
  SMTP_PASSWORD=password
@@ -1,9 +1,3 @@
1
- if ENV.fetch("COVERAGE", false)
2
- require "simplecov"
3
-
4
- SimpleCov.start "rails"
5
- end
6
-
7
1
  require "webmock/rspec"
8
2
  require "timecop"
9
3
 
@@ -22,7 +16,10 @@ RSpec.configure do |config|
22
16
  config.order = :random
23
17
  end
24
18
 
25
- WebMock.disable_net_connect!(allow_localhost: true)
19
+ WebMock.disable_net_connect!(
20
+ allow_localhost: true,
21
+ allow: "chromedriver.storage.googleapis.com"
22
+ )
26
23
 
27
24
  # Only allow Timecop with block syntax
28
25
  Timecop.safe_mode = true
@@ -0,0 +1,6 @@
1
+ Spring.watch(
2
+ ".ruby-version",
3
+ ".rbenv-vars",
4
+ "tmp/restart.txt",
5
+ "tmp/caching-dev.txt"
6
+ )
@@ -4,7 +4,7 @@
4
4
  *.swp
5
5
  .byebug_history
6
6
  /.bundle
7
- /.env.local
7
+ /.env
8
8
  /coverage/*
9
9
  /db/*.sqlite3
10
10
  /db/*.sqlite3-journal
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: suspenders
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.51.0
4
+ version: 1.55.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoughtbot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-26 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bitters
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 2.0.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 2.0.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 5.2.0
33
+ version: 6.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.0
40
+ version: 6.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: standard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: |
56
70
  Suspenders is a base Rails project that you can upgrade. It is used by
57
71
  thoughtbot to get a jump start on a working app. Use Suspenders if you're in a
@@ -68,6 +82,7 @@ files:
68
82
  - ".ruby-version"
69
83
  - ".travis.yml"
70
84
  - CONTRIBUTING.md
85
+ - GOALS.md
71
86
  - Gemfile
72
87
  - LICENSE
73
88
  - NEWS.md
@@ -79,10 +94,12 @@ files:
79
94
  - bin/rspec
80
95
  - bin/setup
81
96
  - bin/suspenders
97
+ - docs/heroku_deploy.md
82
98
  - lib/suspenders.rb
83
99
  - lib/suspenders/actions.rb
84
100
  - lib/suspenders/adapters/heroku.rb
85
101
  - lib/suspenders/app_builder.rb
102
+ - lib/suspenders/generators/advisories_generator.rb
86
103
  - lib/suspenders/generators/analytics_generator.rb
87
104
  - lib/suspenders/generators/app_generator.rb
88
105
  - lib/suspenders/generators/base.rb
@@ -90,15 +107,21 @@ files:
90
107
  - lib/suspenders/generators/db_optimizations_generator.rb
91
108
  - lib/suspenders/generators/factories_generator.rb
92
109
  - lib/suspenders/generators/forms_generator.rb
110
+ - lib/suspenders/generators/inline_svg_generator.rb
93
111
  - lib/suspenders/generators/jobs_generator.rb
94
112
  - lib/suspenders/generators/js_driver_generator.rb
95
113
  - lib/suspenders/generators/json_generator.rb
96
114
  - lib/suspenders/generators/lint_generator.rb
115
+ - lib/suspenders/generators/preloader_generator.rb
116
+ - lib/suspenders/generators/production/compression_generator.rb
97
117
  - lib/suspenders/generators/production/deployment_generator.rb
98
118
  - lib/suspenders/generators/production/email_generator.rb
99
119
  - lib/suspenders/generators/production/force_tls_generator.rb
100
120
  - lib/suspenders/generators/production/manifest_generator.rb
121
+ - lib/suspenders/generators/production/single_redirect.rb
101
122
  - lib/suspenders/generators/production/timeout_generator.rb
123
+ - lib/suspenders/generators/profiler_generator.rb
124
+ - lib/suspenders/generators/runner_generator.rb
102
125
  - lib/suspenders/generators/staging/pull_requests_generator.rb
103
126
  - lib/suspenders/generators/static_generator.rb
104
127
  - lib/suspenders/generators/stylelint_generator.rb
@@ -107,18 +130,30 @@ files:
107
130
  - lib/suspenders/generators/views_generator.rb
108
131
  - lib/suspenders/version.rb
109
132
  - spec/adapters/heroku_spec.rb
133
+ - spec/expand_json_spec.rb
110
134
  - spec/fakes/bin/heroku
111
135
  - spec/fakes/bin/hub
136
+ - spec/features/advisories_spec.rb
112
137
  - spec/features/api_spec.rb
138
+ - spec/features/ci_spec.rb
113
139
  - spec/features/cli_help_spec.rb
140
+ - spec/features/db_optimizations_spec.rb
114
141
  - spec/features/github_spec.rb
115
142
  - spec/features/heroku_spec.rb
143
+ - spec/features/inline_svg_spec.rb
116
144
  - spec/features/json_spec.rb
145
+ - spec/features/lint_spec.rb
117
146
  - spec/features/new_project_spec.rb
147
+ - spec/features/preloader_spec.rb
148
+ - spec/features/production/compression_spec.rb
118
149
  - spec/features/production/deployment_spec.rb
119
150
  - spec/features/production/email_spec.rb
120
151
  - spec/features/production/manifest_spec.rb
152
+ - spec/features/production/single_redirect_spec.rb
153
+ - spec/features/profiler_spec.rb
154
+ - spec/features/runner_spec.rb
121
155
  - spec/features/staging/pull_requests_spec.rb
156
+ - spec/features/static_spec.rb
122
157
  - spec/features/stylelint_spec.rb
123
158
  - spec/spec_helper.rb
124
159
  - spec/support/be_executable_matcher.rb
@@ -129,6 +164,7 @@ files:
129
164
  - spec/support/generators.rb
130
165
  - spec/support/match_contents_matcher.rb
131
166
  - spec/support/project_files.rb
167
+ - spec/support/rails_template.rb
132
168
  - spec/support/suspenders.rb
133
169
  - suspenders.gemspec
134
170
  - templates/Gemfile.erb
@@ -141,17 +177,43 @@ files:
141
177
  - templates/action_mailer.rb
142
178
  - templates/active_job.rb
143
179
  - templates/application.scss
180
+ - templates/bin_auto_migrate
144
181
  - templates/bin_deploy
145
182
  - templates/bin_setup
146
183
  - templates/bin_setup_review_app.erb
147
- - templates/browserslist
148
184
  - templates/bundler_audit.rake
185
+ - templates/capybara_silence_puma.rb
149
186
  - templates/chromedriver.rb
150
187
  - templates/circle.yml.erb
151
188
  - templates/config_locales_en.yml.erb
189
+ - templates/descriptions/advisories.md
190
+ - templates/descriptions/analytics.md
191
+ - templates/descriptions/ci.md
192
+ - templates/descriptions/compression.md
193
+ - templates/descriptions/db_optimizations.md
194
+ - templates/descriptions/deployment.md
195
+ - templates/descriptions/email.md
196
+ - templates/descriptions/factories.md
197
+ - templates/descriptions/force_tls.md
198
+ - templates/descriptions/forms.md
199
+ - templates/descriptions/inline_svg.md
200
+ - templates/descriptions/jobs.md
201
+ - templates/descriptions/js_driver.md
202
+ - templates/descriptions/json.md
203
+ - templates/descriptions/lint.md
204
+ - templates/descriptions/manifest.md
205
+ - templates/descriptions/preloader.md
206
+ - templates/descriptions/profiler.md
207
+ - templates/descriptions/pull_requests.md
208
+ - templates/descriptions/runner.md
209
+ - templates/descriptions/single_redirect.md
210
+ - templates/descriptions/static.md
211
+ - templates/descriptions/stylelint.md
212
+ - templates/descriptions/stylesheet_base.md
213
+ - templates/descriptions/testing.md
214
+ - templates/descriptions/timeout.md
215
+ - templates/descriptions/views.md
152
216
  - templates/dev.rake
153
- - templates/dotfiles/.ctags
154
- - templates/dotfiles/.env
155
217
  - templates/email.rb
156
218
  - templates/errors.rb
157
219
  - templates/factories.rb
@@ -159,15 +221,25 @@ files:
159
221
  - templates/flashes_helper.rb
160
222
  - templates/hound.yml
161
223
  - templates/i18n.rb
224
+ - templates/inline_svg.rb
162
225
  - templates/json_encoding.rb
226
+ - templates/partials/ci_simplecov.rb
227
+ - templates/partials/db_optimizations_configuration.rb
228
+ - templates/partials/deployment_readme.md
229
+ - templates/partials/email_smtp.rb
230
+ - templates/partials/profiler_readme.md
231
+ - templates/partials/pull_requests_config.rb
232
+ - templates/partials/runner_readme.md
233
+ - templates/partials/runner_setup.rb
163
234
  - templates/postgresql_database.yml.erb
164
- - templates/puma.rb
165
235
  - templates/rack_mini_profiler.rb
166
236
  - templates/rails_helper.rb
237
+ - templates/sample_env
167
238
  - templates/secrets.yml
168
239
  - templates/shoulda_matchers_config_rspec.rb
169
240
  - templates/smtp.rb
170
241
  - templates/spec_helper.rb
242
+ - templates/spring.rb
171
243
  - templates/stylelintrc.json
172
244
  - templates/suspenders_gitignore
173
245
  - templates/suspenders_layout.html.erb.erb
@@ -184,31 +256,43 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
256
  requirements:
185
257
  - - ">="
186
258
  - !ruby/object:Gem::Version
187
- version: 2.6.3
259
+ version: 2.6.6
188
260
  required_rubygems_version: !ruby/object:Gem::Requirement
189
261
  requirements:
190
262
  - - ">="
191
263
  - !ruby/object:Gem::Version
192
264
  version: 2.7.4
193
265
  requirements: []
194
- rubygems_version: 3.0.3
266
+ rubygems_version: 3.1.2
195
267
  signing_key:
196
268
  specification_version: 4
197
269
  summary: Generate a Rails app using thoughtbot's best practices.
198
270
  test_files:
199
271
  - spec/adapters/heroku_spec.rb
272
+ - spec/expand_json_spec.rb
200
273
  - spec/fakes/bin/heroku
201
274
  - spec/fakes/bin/hub
275
+ - spec/features/advisories_spec.rb
202
276
  - spec/features/api_spec.rb
277
+ - spec/features/ci_spec.rb
203
278
  - spec/features/cli_help_spec.rb
279
+ - spec/features/db_optimizations_spec.rb
204
280
  - spec/features/github_spec.rb
205
281
  - spec/features/heroku_spec.rb
282
+ - spec/features/inline_svg_spec.rb
206
283
  - spec/features/json_spec.rb
284
+ - spec/features/lint_spec.rb
207
285
  - spec/features/new_project_spec.rb
286
+ - spec/features/preloader_spec.rb
287
+ - spec/features/production/compression_spec.rb
208
288
  - spec/features/production/deployment_spec.rb
209
289
  - spec/features/production/email_spec.rb
210
290
  - spec/features/production/manifest_spec.rb
291
+ - spec/features/production/single_redirect_spec.rb
292
+ - spec/features/profiler_spec.rb
293
+ - spec/features/runner_spec.rb
211
294
  - spec/features/staging/pull_requests_spec.rb
295
+ - spec/features/static_spec.rb
212
296
  - spec/features/stylelint_spec.rb
213
297
  - spec/spec_helper.rb
214
298
  - spec/support/be_executable_matcher.rb
@@ -219,4 +303,5 @@ test_files:
219
303
  - spec/support/generators.rb
220
304
  - spec/support/match_contents_matcher.rb
221
305
  - spec/support/project_files.rb
306
+ - spec/support/rails_template.rb
222
307
  - spec/support/suspenders.rb