Class: VersionRange

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_possibleObject (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_intervalsObject (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

Returns:

  • (Boolean)


154
155
156
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 154

def any?
  @version_intervals.any?
end

#collapseObject



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

Returns:

  • (Boolean)


150
151
152
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 150

def empty?
  @version_intervals.empty?
end

#firstObject



146
147
148
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 146

def first
  @version_intervals.first
end

#includes?(version_interval) ⇒ Boolean

Returns:

  • (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

#invertObject

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

Returns:

  • (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

#sizeObject



51
52
53
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 51

def size
  @version_intervals.size
end

#to_conan_sObject



67
68
69
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 67

def to_conan_s
  to_npm_s
end

#to_description_sObject



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_sObject



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_sObject



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_sObject



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_sObject



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_sObject



71
72
73
# File 'lib/semver_dialects/semantic_version/version_range.rb', line 71

def to_nuget_s
  to_maven_s
end

#to_packagist_sObject



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_sObject



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_sObject



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

Returns:

  • (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