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
8 changes: 8 additions & 0 deletions lib/rubygems/specification_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ def validate_optional(strict)

validate_dependencies

validate_required_ruby_version

validate_extensions

validate_removed_attributes
Expand Down Expand Up @@ -227,6 +229,12 @@ def validate_dependencies # :nodoc:
end
end

def validate_required_ruby_version
if @specification.required_ruby_version.requirements == [Gem::Requirement::DefaultRequirement]
warning "make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute"
end
end

##
# Issues a warning for each file to be packaged which is world-readable.
#
Expand Down
21 changes: 11 additions & 10 deletions test/rubygems/specifications/rubyforge-0.0.1.gemspec
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# frozen_string_literal: true

Gem::Specification.new do |s|
s.name = "rubyforge"
s.version = "0.0.1"
s.platform = "ruby"
s.require_paths = ["lib"]
s.summary = "A very bar gem"
s.authors = ["unknown"]
s.license = "MIT"
s.homepage = "http://example.com"
s.files = ["README.md"]
s.rubyforge_project = "abc"
s.name = "rubyforge"
s.version = "0.0.1"
s.platform = "ruby"
s.require_paths = ["lib"]
s.summary = "A very bar gem"
s.authors = ["unknown"]
s.license = "MIT"
s.homepage = "http://example.com"
s.files = ["README.md"]
s.rubyforge_project = "abc"
s.required_ruby_version = ">= 1.9.3"
end
2 changes: 2 additions & 0 deletions test/rubygems/test_gem_commands_build_command.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def setup
@gem = util_spec "some_gem" do |s|
s.license = "AGPL-3.0-only"
s.files = ["README.md"]
s.required_ruby_version = "2.3.0"
end

@cmd = Gem::Commands::BuildCommand.new
Expand Down Expand Up @@ -178,6 +179,7 @@ def test_execute_rubyforge_project_warning
def test_execute_strict_with_warnings
bad_gem = util_spec "some_bad_gem" do |s|
s.files = ["README.md"]
s.required_ruby_version = ">= 1.9.3"
end

gemspec_file = File.join(@tempdir, bad_gem.spec_name)
Expand Down
49 changes: 49 additions & 0 deletions test/rubygems/test_gem_specification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ def setup
Gem.instance_variable_set(:'@default_source_date_epoch', nil)

@a1 = util_spec "a", "1" do |s|
s.required_ruby_version = ">= 2.3.0"
s.executable = "exec"
s.test_file = "test/suite.rb"
s.requirements << "A working computer"
Expand Down Expand Up @@ -2707,6 +2708,53 @@ def test_validate_dependencies_allowed_duplicates
end
end

def test_validate_no_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
use_ui @ui do
@a1.required_ruby_version = nil # reset
@a1.validate
end

assert_equal <<-EXPECTED, @ui.error
#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
#{w}: See https://guides.rubygems.org/specification-reference/ for help
EXPECTED
end
end

def test_validate_open_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
@a1.required_ruby_version = ">= 0"

use_ui @ui do
@a1.validate
end

assert_equal <<-EXPECTED, @ui.error
#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
#{w}: See https://guides.rubygems.org/specification-reference/ for help
EXPECTED
end
end

def test_validate_valid_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
@a1.required_ruby_version = ">= 2.3.0"

use_ui @ui do
@a1.validate
end

assert_equal "", @ui.error, "warning"
end
end

def test_validate_prerelease_dependencies_with_prerelease_version
util_setup_validate

Expand Down Expand Up @@ -3683,6 +3731,7 @@ def test_metadata_link_validation_warns_for_duplicates

Dir.chdir @tempdir do
@m2 = quick_gem "m", "2" do |s|
s.required_ruby_version = ">= 2.3.0"
s.files = %w[lib/code.rb]
s.licenses = "BSD-2-Clause"
s.metadata = {
Expand Down