Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bundler/lib/bundler/templates/newgem/Gemfile.tt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ gemspec

gem "rake", "~> 13.0"
<%- if config[:ext] -%>

gem "rake-compiler"
<%- end -%>
<%- if config[:test] -%>

gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
<%- end -%>
<%- if config[:rubocop] -%>

gem "rubocop", "~> 0.80"
<%- end -%>
6 changes: 5 additions & 1 deletion bundler/lib/bundler/templates/newgem/Rakefile.tt
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,8 @@ Rake::ExtensionTask.new("<%= config[:underscored_name] %>") do |ext|
end

<% end -%>
task default: <%= default_task_names.size == 1 ? default_task_names.first.inspect : default_task_names.inspect %>
<% if default_task_names.size == 1 -%>
task default: <%= default_task_names.first.inspect %>
<% else -%>
task default: %i[<%= default_task_names.join(" ") %>]
<% end -%>
2 changes: 2 additions & 0 deletions bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

require "mkmf"

create_makefile(<%= config[:makefile_path].inspect %>)
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

require "test_helper"

class <%= config[:constant_name] %>Test < Minitest::Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

require "test_helper"

class <%= config[:constant_name] %>Test < Test::Unit::TestCase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

Expand Down
57 changes: 45 additions & 12 deletions bundler/spec/commands/newgem_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@ def gem_skeleton_assertions
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb")).to exist
end

def bundle_exec_rubocop
prepare_gemspec(bundled_app(gem_name, "#{gem_name}.gemspec"))
rubocop_version = RUBY_VERSION > "2.4" ? "0.85.1" : "0.80.1"
gems = ["minitest", "rake", "rake-compiler", "rspec", "rubocop -v #{rubocop_version}", "test-unit"]
path = Bundler.feature_flag.default_install_uses_path? ? local_gem_path(:base => bundled_app(gem_name)) : system_gem_path
realworld_system_gems gems, :path => path
bundle "exec rubocop --config .rubocop.yml", :dir => bundled_app(gem_name)
end

let(:generated_gemspec) { Bundler.load_gemspec_uncached(bundled_app(gem_name).join("#{gem_name}.gemspec")) }

let(:gem_name) { "mygem" }
Expand Down Expand Up @@ -174,17 +183,6 @@ def gem_skeleton_assertions
it "generates a default .rubocop.yml" do
expect(bundled_app("#{gem_name}/.rubocop.yml")).to exist
end

it "runs rubocop inside the generated gem with no offenses" do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
prepare_gemspec(bundled_app(gem_name, "#{gem_name}.gemspec"))
rubocop_version = RUBY_VERSION > "2.4" ? "0.85.1" : "0.80.1"
gems = ["rake", "rubocop -v #{rubocop_version}"]
path = Bundler.feature_flag.default_install_uses_path? ? local_gem_path(:base => bundled_app(gem_name)) : system_gem_path
realworld_system_gems gems, :path => path
bundle "exec rubocop --config .rubocop.yml", :dir => bundled_app(gem_name)
expect(err).to be_empty
end
end

shared_examples_for "--no-rubocop flag" do
Expand Down Expand Up @@ -214,6 +212,41 @@ def gem_skeleton_assertions
end
end

it "has no rubocop offenses when using --rubocop flag", :readline do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
bundle "gem #{gem_name} --rubocop"
bundle_exec_rubocop
expect(err).to be_empty
end

it "has no rubocop offenses when using --ext and --rubocop flag", :readline do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
bundle "gem #{gem_name} --ext --rubocop"
bundle_exec_rubocop
expect(err).to be_empty
end

it "has no rubocop offenses when using --ext, --test=minitest, and --rubocop flag", :readline do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
bundle "gem #{gem_name} --ext --test=minitest --rubocop"
bundle_exec_rubocop
expect(err).to be_empty
end

it "has no rubocop offenses when using --ext, --test=rspec, and --rubocop flag", :readline do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
bundle "gem #{gem_name} --ext --test=rspec --rubocop"
bundle_exec_rubocop
expect(err).to be_empty
end

it "has no rubocop offenses when using --ext, --ext=test-unit, and --rubocop flag", :readline do
skip "ruby_core has an 'ast.rb' file that gets in the middle and breaks this spec" if ruby_core?
bundle "gem #{gem_name} --ext --test=test-unit --rubocop"
bundle_exec_rubocop
expect(err).to be_empty
end

shared_examples_for "CI config is absent" do
it "does not create any CI files" do
expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to_not exist
Expand Down Expand Up @@ -914,7 +947,7 @@ def create_temporary_dir(dir)
ext.lib_dir = "lib/#{gem_name}"
end

task default: [:clobber, :compile]
task default: %i[clobber compile]
RAKEFILE

expect(bundled_app("#{gem_name}/Rakefile").read).to eq(rakefile)
Expand Down