Module: VersionTranslator
- Defined in:
- lib/semver_dialects/semantic_version/version_translator.rb
Overview
A prepropcessor – convert different version strings to something that can be digested by the version parser
Class Method Summary collapse
- .add_missing_operator(version_string) ⇒ Object
- .comma_to_space(version_string) ⇒ Object
- .lexing_maven_version_string(version_string) ⇒ Object
- .parenthesized?(version_item) ⇒ Boolean
- .single_space_after_operator(version_string) ⇒ Object
- .starts_with_operator?(version_item) ⇒ Boolean
- .translate_conan(version_string) ⇒ Object
- .translate_gem(version_string) ⇒ Object
- .translate_go(version_string) ⇒ Object
- .translate_maven(version_string) ⇒ Object
- .translate_mvn_version_item(version_item) ⇒ Object
- .translate_npm(version_string) ⇒ Object
- .translate_nuget(version_string) ⇒ Object
- .translate_packagist(version_string) ⇒ Object
- .translate_pypi(version_string) ⇒ Object
Class Method Details
.add_missing_operator(version_string) ⇒ Object
46 47 48 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 46 def self.add_missing_operator(version_string) starts_with_operator?(version_string) ? version_string : "=#{version_string}" end |
.comma_to_space(version_string) ⇒ Object
58 59 60 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 58 def self.comma_to_space(version_string) version_string.strip.gsub(/,/, ' ') end |
.lexing_maven_version_string(version_string) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 62 def self.lexing_maven_version_string(version_string) open = false substring = '' ret = [] version_string.each_char do |c| case c when '(', '[' if open puts "malformed maven version string #{version_string}" exit(-1) else unless substring.empty? ret << substring substring = '' end open = true substring += c end when ')', ']' if !open puts "malformed maven version string #{version_string}" exit(-1) else open = false substring += c ret << substring substring = '' end when ',' substring += c if open when ' ' # nothing to do substring += '' else substring += c end end if open puts "malformed maven version string #{version_string}" exit(-1) end ret << substring unless substring.empty? ret end |
.parenthesized?(version_item) ⇒ Boolean
107 108 109 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 107 def self.parenthesized?(version_item) version_item.match(/^[\(\[]/) && version_item.match(/[\]\)]$/) ? true : false end |
.single_space_after_operator(version_string) ⇒ Object
50 51 52 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 50 def self.single_space_after_operator(version_string) version_string.gsub(/([>=<]+) +/, '\1').gsub(/\s+/, ' ') end |
.starts_with_operator?(version_item) ⇒ Boolean
54 55 56 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 54 def self.starts_with_operator?(version_item) version_item.match(/^[=><]/) ? true : false end |
.translate_conan(version_string) ⇒ Object
14 15 16 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 14 def self.translate_conan(version_string) translate_npm(version_string) end |
.translate_gem(version_string) ⇒ Object
22 23 24 25 26 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 22 def self.translate_gem(version_string) version_string.split('||').map do |item| add_missing_operator(single_space_after_operator(item.strip.gsub(/\s+/, ' '))) end end |
.translate_go(version_string) ⇒ Object
18 19 20 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 18 def self.translate_go(version_string) translate_gem(version_string) end |
.translate_maven(version_string) ⇒ Object
42 43 44 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 42 def self.translate_maven(version_string) lexing_maven_version_string(version_string).map { |item| translate_mvn_version_item(item) } end |
.translate_mvn_version_item(version_item) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 111 def self.translate_mvn_version_item(version_item) content = '' parens_pattern = '' if parenthesized?(version_item) content = version_item[1, version_item.size - 2] parens_pattern = version_item[0] + version_item[version_item.size - 1] # special case -- unversal version range return '=*' if content.strip == ',' else # according to the doc, if there is a plain version string in maven, it means 'starting from version x' # https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8903 content = "#{version_item}," parens_pattern = '[)' end args = content.split(',') first_non_empty_arg = args.find(&:range_present?) if content.start_with?(',') # {,y} case parens_pattern when '[]' "<=#{first_non_empty_arg}" when '()' "<#{first_non_empty_arg}" when '[)' "<#{first_non_empty_arg}" else # par_pattern == "(]" "<=#{first_non_empty_arg}" end elsif content.end_with?(',') # {x,} case parens_pattern when '[]' ">=#{first_non_empty_arg}" when '()' ">#{first_non_empty_arg}" when '[)' ">=#{first_non_empty_arg}" else # par_pattern == "(]" ">#{first_non_empty_arg}" end elsif content[','].nil? # [x,x] "=#{content}" else case parens_pattern when '[]' ">=#{args[0]} <=#{args[1]}" when '()' ">#{args[0]} <#{args[1]}" when '[)' ">=#{args[0]} <#{args[1]}" else # par_pattern == "(]" ">#{args[0]} <=#{args[1]}" end end end |
.translate_npm(version_string) ⇒ Object
8 9 10 11 12 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 8 def self.translate_npm(version_string) version_string.split('||').map do |item| add_missing_operator(single_space_after_operator(item.strip.gsub(/&&/, ' '))) end end |
.translate_nuget(version_string) ⇒ Object
38 39 40 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 38 def self.translate_nuget(version_string) translate_maven(version_string) end |
.translate_packagist(version_string) ⇒ Object
28 29 30 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 28 def self.translate_packagist(version_string) translate_pypi(version_string) end |
.translate_pypi(version_string) ⇒ Object
32 33 34 35 36 |
# File 'lib/semver_dialects/semantic_version/version_translator.rb', line 32 def self.translate_pypi(version_string) version_string.split('||').map do |item| add_missing_operator(single_space_after_operator(comma_to_space(item))) end end |