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