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