# frozen_string_literal: true module RubyNext # Mininum Ruby version supported by RubyNext MIN_SUPPORTED_VERSION = Gem::Version.new("2.2.0") # Where to store transpiled files (relative from the project LOAD_PATH, usually `lib/`) RUBY_NEXT_DIR = ".rbnext" # Defines last minor version for every major version LAST_MINOR_VERSIONS = { 2 => 8, # 2.8 is required for backward compatibility: some gems already uses it 3 => 1 }.freeze LATEST_VERSION = [3, 1].freeze # A virtual version number used for proposed features NEXT_VERSION = "1995.next.0" class << self # TruffleRuby claims it's 2.7.2 compatible but... if defined?(TruffleRuby) && ::RUBY_VERSION =~ /^2\.7/ def current_ruby_version "2.6.5" end else def current_ruby_version ::RUBY_VERSION end end def next_ruby_version(version = current_ruby_version) return if version == Gem::Version.new(NEXT_VERSION) major, minor = Gem::Version.new(version).segments.map(&:to_i) return Gem::Version.new(NEXT_VERSION) if major >= LATEST_VERSION.first && minor >= LATEST_VERSION.last nxt = if LAST_MINOR_VERSIONS[major] == minor "#{major + 1}.0.0" else "#{major}.#{minor + 1}.0" end Gem::Version.new(nxt) end end end