Class: VersionRange
- Inherits:
-
Object
- Object
- VersionRange
- Defined in:
- lib/semver_dialects/semantic_version/version_range.rb
Overview
VersionRange is a utility class that helps managing consecutive version ranges automatically given that they are added in-order Note that join_if_possible should be only activated in case the ranges are added in consecutive order!!
Instance Attribute Summary collapse
-
#join_if_possible ⇒ Object
readonly
Returns the value of attribute join_if_possible.
-
#version_intervals ⇒ Object
readonly
Returns the value of attribute version_intervals.
Instance Method Summary collapse
- #<<(item) ⇒ Object
- #add(version_interval) ⇒ Object
- #add_all(version_range) ⇒ Object
- #any? ⇒ Boolean
- #collapse ⇒ Object
- #empty? ⇒ Boolean
- #first ⇒ Object
- #includes?(version_interval) ⇒ Boolean
-
#initialize(join_if_possible = true) ⇒ VersionRange
constructor
A new instance of VersionRange.
-
#invert ⇒ Object
inverts the given version interval – note that this function amy return two version intervals e.g., (2,10], (12, 13], [15, inf) 1) invert: (-inf, 2], (10, inf), (-inf, 12], (13, +inf), (15) 2) collapse (-inf, 2], (10, 12], (13, 15).
- #overlaps_with?(version_interval) ⇒ Boolean
- #size ⇒ Object
- #to_conan_s ⇒ Object
- #to_description_s ⇒ Object
- #to_gem_s ⇒ Object
- #to_go_s ⇒ Object
- #to_maven_s ⇒ Object
- #to_npm_s ⇒ Object
- #to_nuget_s ⇒ Object
- #to_packagist_s ⇒ Object
- #to_pypi_s ⇒ Object
- #to_s ⇒ Object
- #to_version_s(package_type) ⇒ Object
- #universal? ⇒ Boolean
Constructor Details
#initialize(join_if_possible = true) ⇒ VersionRange
Returns a new instance of VersionRange.
12 13 14 15 16 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 12 def initialize(join_if_possible = true) @version_intervals = [] @version_interval_set = Set.new @join_if_possible = join_if_possible end |
Instance Attribute Details
#join_if_possible ⇒ Object (readonly)
Returns the value of attribute join_if_possible.
10 11 12 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 10 def join_if_possible @join_if_possible end |
#version_intervals ⇒ Object (readonly)
Returns the value of attribute version_intervals.
10 11 12 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 10 def version_intervals @version_intervals end |
Instance Method Details
#<<(item) ⇒ Object
47 48 49 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 47 def <<(item) add(item) end |
#add(version_interval) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 22 def add(version_interval) return if @version_interval_set.include?(version_interval) if @join_if_possible if @version_intervals.empty? @version_intervals << version_interval @version_interval_set.add(version_interval) else last = @version_intervals.last # nothing to do return if last.end_cut == version_interval.start_cut && last.end_cut.value == version_interval.start_cut.value if last.joinable?(version_interval) @version_intervals[@version_intervals.size - 1] = last.join(version_interval) else @version_intervals << version_interval @version_interval_set.add(version_interval) end end else @version_intervals << version_interval @version_interval_set.add(version_interval) end end |
#add_all(version_range) ⇒ Object
18 19 20 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 18 def add_all(version_range) version_range.version_intervals.each { |interval| add(interval) } end |
#any? ⇒ Boolean
154 155 156 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 154 def any? @version_intervals.any? end |
#collapse ⇒ Object
130 131 132 133 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 130 def collapse version_intervals = collapse_intervals(@version_intervals) version_intervals_to_range(version_intervals) end |
#empty? ⇒ Boolean
150 151 152 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 150 def empty? @version_intervals.empty? end |
#first ⇒ Object
146 147 148 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 146 def first @version_intervals.first end |
#includes?(version_interval) ⇒ Boolean
135 136 137 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 135 def includes?(version_interval) @version_interval_set.include?(version_interval) end |
#invert ⇒ Object
inverts the given version interval – note that this function amy return two version intervals e.g., (2,10], (12, 13], [15, inf) 1) invert: (-inf, 2], (10, inf), (-inf, 12], (13, +inf), (15) 2) collapse (-inf, 2], (10, 12], (13, 15)
the collapsed inverted ranges can potentially contain fixed versions
124 125 126 127 128 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 124 def invert inverted = @version_intervals.map(&:invert).flatten version_intervals = collapse_intervals(inverted) version_intervals_to_range(version_intervals) end |
#overlaps_with?(version_interval) ⇒ Boolean
139 140 141 142 143 144 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 139 def overlaps_with?(version_interval) @version_interval_set.each do |interval| return true unless interval.intersect(version_interval).instance_of? EmptyInterval end false end |
#size ⇒ Object
51 52 53 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 51 def size @version_intervals.size end |
#to_conan_s ⇒ Object
67 68 69 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 67 def to_conan_s to_npm_s end |
#to_description_s ⇒ Object
59 60 61 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 59 def to_description_s @version_intervals.map(&:to_description_s).join(', ').capitalize end |
#to_gem_s ⇒ Object
79 80 81 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 79 def to_gem_s @version_intervals.map(&:to_gem_s).join('||') end |
#to_go_s ⇒ Object
87 88 89 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 87 def to_go_s @version_intervals.map(&:to_go_s).join('||') end |
#to_maven_s ⇒ Object
75 76 77 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 75 def to_maven_s @version_intervals.map(&:to_maven_s).join(',') end |
#to_npm_s ⇒ Object
63 64 65 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 63 def to_npm_s @version_intervals.map(&:to_npm_s).join('||') end |
#to_nuget_s ⇒ Object
71 72 73 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 71 def to_nuget_s to_maven_s end |
#to_packagist_s ⇒ Object
91 92 93 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 91 def to_packagist_s @version_intervals.map(&:to_packagist_s).join('||') end |
#to_pypi_s ⇒ Object
83 84 85 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 83 def to_pypi_s @version_intervals.map(&:to_pypi_s).join('||') end |
#to_s ⇒ Object
55 56 57 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 55 def to_s @version_intervals.map(&:to_s).join(',') end |
#to_version_s(package_type) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 95 def to_version_s(package_type) case package_type when 'npm' to_npm_s when 'nuget' to_nuget_s when 'maven' to_maven_s when 'gem' to_gem_s when 'pypi' to_pypi_s when 'packagist' to_packagist_s when 'go' to_go_s when 'conan' to_conan_s else '' end end |
#universal? ⇒ Boolean
158 159 160 161 162 163 |
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 158 def universal? @version_intervals.each do |version_interval| return true if version_interval.universal? end false end |