-
-
Notifications
You must be signed in to change notification settings - Fork 530
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Closes #1138 Closes #1143 Consolidates logic from the existing [advisories][] and [lint][] generators to create a default Rake task that audits and lints the codebase. We do this because it's simpler to bundle this configuration together, rather than have two separate generators compete to modify the default Rake task, since those generators can be run independently. [advisories]: https://github.com/thoughtbot/suspenders/blob/main/lib/suspenders/generators/advisories_generator.rb [lint]: https://github.com/thoughtbot/suspenders/blob/main/lib/suspenders/generators/lint_generator.rb
- Loading branch information
1 parent
5ff19c5
commit cece45a
Showing
6 changed files
with
139 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
module Suspenders | ||
module Generators | ||
class RakeGenerator < Rails::Generators::Base | ||
source_root File.expand_path("../../templates/rake", __FILE__) | ||
desc(<<~TEXT) | ||
Configures the default Rake task to audit and lint the codebase with `bundler-audit` and `standard`. | ||
TEXT | ||
|
||
def add_bundler_audit_and_standard | ||
gem_group :development, :test do | ||
gem "bundler-audit", ">= 0.7.0", require: false | ||
gem "standard" | ||
end | ||
Bundler.with_unbundled_env { run "bundle install" } | ||
end | ||
|
||
def configurea_rake_task | ||
copy_file "bundler_audit.rake", "lib/tasks/bundler_audit.rake" | ||
|
||
insert_into_file "Rakefile", "\nrequire \"standard/rake\"", after: "require_relative \"config/application\"" | ||
append_file "Rakefile", %(\ntask default: %i[bundle:audit standard]\n) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
if Rails.env.development? || Rails.env.test? | ||
require "bundler/audit/task" | ||
Bundler::Audit::Task.new | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
require "test_helper" | ||
require "generators/suspenders/rake_generator" | ||
|
||
module Suspenders | ||
module Generators | ||
class RakeGeneratorTest < Rails::Generators::TestCase | ||
include Suspenders::TestHelpers | ||
|
||
tests Suspenders::Generators::RakeGenerator | ||
destination Rails.root | ||
setup :prepare_destination | ||
teardown :restore_destination | ||
|
||
test "adds gems to Gemfile" do | ||
expected_output = <<~RUBY | ||
group :development, :test do | ||
gem "bundler-audit", ">= 0.7.0", require: false | ||
gem "standard" | ||
end | ||
RUBY | ||
|
||
run_generator | ||
|
||
assert_file app_root("Gemfile") do |file| | ||
assert_match(expected_output, file) | ||
end | ||
end | ||
|
||
test "installs gems with Bundler" do | ||
Bundler.stubs(:with_unbundled_env).yields | ||
generator.expects(:run).with("bundle install").once | ||
|
||
capture(:stdout) do | ||
generator.add_bundler_audit_and_standard | ||
end | ||
end | ||
|
||
test "creates custom Rake task" do | ||
expected_rake_task = <<~RUBY | ||
if Rails.env.development? || Rails.env.test? | ||
require "bundler/audit/task" | ||
Bundler::Audit::Task.new | ||
end | ||
RUBY | ||
|
||
run_generator | ||
|
||
assert_file app_root("lib/tasks/bundler_audit.rake") do |file| | ||
assert_match expected_rake_task, file | ||
end | ||
end | ||
|
||
test "modifies existing Rakefile" do | ||
rakefile = <<~RUBY | ||
require_relative "config/application" | ||
Rails.application.load_tasks | ||
RUBY | ||
File.open(app_root("Rakefile"), "w") { _1.write rakefile } | ||
|
||
expected_rakefile = <<~RUBY | ||
require_relative "config/application" | ||
require "standard/rake" | ||
Rails.application.load_tasks | ||
task default: %i[bundle:audit standard] | ||
RUBY | ||
|
||
run_generator | ||
|
||
assert_file app_root("Rakefile") do |file| | ||
assert_equal expected_rakefile, file | ||
end | ||
end | ||
|
||
test "generator has a description" do | ||
description = <<~TEXT | ||
Configures the default Rake task to audit and lint the codebase with `bundler-audit` and `standard`. | ||
TEXT | ||
|
||
assert_equal description, generator_class.desc | ||
end | ||
|
||
private | ||
|
||
def prepare_destination | ||
touch "Gemfile" | ||
backup_file "Rakefile" | ||
end | ||
|
||
def restore_destination | ||
remove_file_if_exists "Gemfile" | ||
remove_file_if_exists "lib/tasks/bundler_audit.rake" | ||
restore_file "Rakefile" | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters