class RuboCop::Cop::Gemspec::RequiredRubyVersion
end
spec.required_ruby_version = [‘>= 2.3.0’, ‘< 2.5.0’]
Gem::Specification.new do |spec|
# good
end
spec.required_ruby_version = ‘>= 2.3’
Gem::Specification.new do |spec|
# good
end
spec.required_ruby_version = ‘>= 2.3.0’
Gem::Specification.new do |spec|
# good
end
spec.required_ruby_version = ‘>= 2.4.0’
Gem::Specification.new do |spec|
# bad
end
spec.required_ruby_version = ‘>= 2.2.0’
Gem::Specification.new do |spec|
# bad
# When ‘TargetRubyVersion` of .rubocop.yml is `2.3`.
@example
required by gemspec.
Thereby, RuboCop to perform static analysis working on the version
of .rubocop.yml are equal.
Checks that `required_ruby_version` of gemspec and `TargetRubyVersion`
def extract_ruby_version(required_ruby_version)
def extract_ruby_version(required_ruby_version) if required_ruby_version.array_type? required_ruby_version = required_ruby_version.children.detect do |v| v.str_content =~ /[>=]/ end end required_ruby_version.str_content.match(/(\d\.\d)/)[1] end
def investigate(processed_source)
def investigate(processed_source) required_ruby_version(processed_source.ast) do |version| ruby_version = extract_ruby_version(version) return if ruby_version == target_ruby_version.to_s add_offense( processed_source.ast, location: version.loc.expression, message: message(ruby_version, target_ruby_version) ) end end
def message(required_ruby_version, target_ruby_version)
def message(required_ruby_version, target_ruby_version) format( MSG, required_ruby_version: required_ruby_version, gemspec_filename: File.basename(processed_source.file_path), target_ruby_version: target_ruby_version ) end