class RuboCop::TargetRuby::GemspecFile

@api private
The target ruby version may be found in a .gemspec file.

def find_minimal_known_ruby(right_hand_side)

def find_minimal_known_ruby(right_hand_side)
  version = version_from_right_hand_side(right_hand_side)
  return unless version
  requirement = Gem::Requirement.new(version)
  KNOWN_RUBIES.detect do |v|
    requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
  end
end

def find_version

def find_version
  file = gemspec_filepath
  return unless file && File.file?(file)
  right_hand_side = version_from_gemspec_file(file)
  return if right_hand_side.nil?
  find_minimal_known_ruby(right_hand_side)
end

def gemspec_filepath

def gemspec_filepath
  return @gemspec_filepath if defined?(@gemspec_filepath)
  @gemspec_filepath =
    @config.traverse_directories_upwards(@config.base_dir_for_path_parameters) do |dir|
      # NOTE: Can't use `dir.glob` because of JRuby 9.4.8.0 incompatibility:
      # https://github.com/jruby/jruby/issues/8358
      candidates = Pathname.glob("#{dir}/*.gemspec")
      # Bundler will use a gemspec whatever the filename is, as long as its the only one in
      # the folder.
      break candidates.first if candidates.one?
    end
end

def name

def name
  "`required_ruby_version` parameter (in #{gemspec_filepath})"
end

def version_from_array(array)

def version_from_array(array)
  array.children.map(&:value)
end

def version_from_gemspec_file(file)

def version_from_gemspec_file(file)
  processed_source = ProcessedSource.from_file(
    file, DEFAULT_VERSION, parser_engine: @config.parser_engine
  )
  return unless processed_source.valid_syntax?
  required_ruby_version(processed_source.ast).first
end

def version_from_right_hand_side(right_hand_side)

def version_from_right_hand_side(right_hand_side)
  gem_requirement_versions = gem_requirement_versions(right_hand_side)
  if right_hand_side.array_type? && right_hand_side.children.all?(&:str_type?)
    version_from_array(right_hand_side)
  elsif gem_requirement_versions
    gem_requirement_versions.map(&:value)
  elsif right_hand_side.str_type?
    right_hand_side.value
  end
end