module LanguageVersionHelpers
Private Instance Methods
canonical_version(version)
click to toggle source
# File lib/cutting_edge/langs.rb, line 45 def canonical_version(version) version.match(/^\./) ? "0#{version}" : version end
parse_toml(content, sections)
click to toggle source
# File lib/cutting_edge/langs.rb, line 97 def parse_toml(content, sections) begin config = TomlRB.parse(content) rescue TomlRB::ParseError => e log_error("Encountered error when parsing TOML: #{e.class} #{e.message}") return [] end results = [] sections.each do |dependency_type, section_name| packages = config[section_name] || next packages.each do |name, info| requirement = info.fetch('version', nil) rescue info if requirement requirements = requirement.split(',').map {|req| translate_requirement(req)} next if requirements.include?(nil) # If a sub-requirement failed to translate, skip this entire dependency. begin results << Gem::Dependency.new(name, requirements, dependency_type) rescue StandardError => e log_error("Encountered error when parsing requirement #{requirements}: #{e.class} #{e.message}") next end else results << unknown_dependency(name, dependency_type) end end end results end
translate_caret(req)
click to toggle source
Translate SemVer Caret requirement to Ruby/Gem compatible requirement Caret requirement: lower bound = the unmodified version upper bound = take the left most non-zero digit and +1 it
req - String version requirement
Returns a translated String version requirement
# File lib/cutting_edge/langs.rb, line 82 def translate_caret(req) req.sub!('^', '') begin version = Gem::Version.new(req) rescue ArgumentError => e return nil end segments = version.version.split('.') index = segments.find_index {|seg| seg.to_i > 0} # Find the leftmost non-zero digit. index = segments.rindex {|seg| seg.to_i == 0} unless index # If there is none, find the last 0. segments[index] = segments[index].to_i + 1 upper_bound = segments[0..index].join('.') [">= #{version.version}", "< #{upper_bound}"] end
translate_wildcard(req)
click to toggle source
Translate wildcard (*) requirement to Ruby/Gem compatible requirement
req - String version requirement
Returns a translated String version requirement
# File lib/cutting_edge/langs.rb, line 54 def translate_wildcard(req) if req =~ /!=/ # Negative Wildcard # Turn != 1.1.* into >= 1.2, < 1.1 req.sub!('.*', '.0') req.sub!('!=', '') begin v = Gem::Version.new(req) # Create the bumped version using Gem::Version so pre-release handling will work rescue ArgumentError => e return nil end lower_bound = ">= #{v.bump.version}" upper_bound = "< #{v.version}" [lower_bound, upper_bound] elsif req =~ /^\s*\*\s*/ '>= 0' # Turn * into >= 0 else "~> #{req.sub('.*', '.0').sub('=', '')}" # Turn =1.1.* or 1.1.* into ~> 1.1.0 end end