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)
  requirement = Gem::Requirement.new(version)
  KNOWN_RUBIES.detect { |v| requirement.satisfied_by?(Gem::Version.new("#{v}.99")) }
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_filename

def gemspec_filename
  @gemspec_filename ||= begin
    basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
    "#{basename}#{GEMSPEC_EXTENSION}"
  end
end

def gemspec_filepath

def gemspec_filepath
  @gemspec_filepath ||=
    @config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
end

def name

def name
  "`required_ruby_version` parameter (in #{gemspec_filename})"
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)
  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)
  if right_hand_side.array_type?
    version_from_array(right_hand_side)
  elsif gem_requirement?(right_hand_side)
    right_hand_side.children.last.value
  else
    right_hand_side.value
  end
end