class RuboCop::Cop::Gemspec::RequiredRubyVersion
Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal. Thereby, RuboCop
to perform static analysis working on the version required by gemspec.
@example
# When `TargetRubyVersion` of .rubocop.yml is `2.5`. # bad Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.4.0' end # bad Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.6.0' end # good Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.5.0' end # good Gem::Specification.new do |spec| spec.required_ruby_version = '>= 2.5' end # good Gem::Specification.new do |spec| spec.required_ruby_version = ['>= 2.5.0', '< 2.7.0'] end
Constants
- MSG
Public Instance Methods
investigate(processed_source)
click to toggle source
# File lib/rubocop/cop/gemspec/required_ruby_version.rb, line 48 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
Private Instance Methods
extract_ruby_version(required_ruby_version)
click to toggle source
# File lib/rubocop/cop/gemspec/required_ruby_version.rb, line 64 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
message(required_ruby_version, target_ruby_version)
click to toggle source
# File lib/rubocop/cop/gemspec/required_ruby_version.rb, line 74 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