semver_dialects 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14c406303926f87028c24acf6be1cd3513f6e71d0f6a689e56e9543466759e5c
4
- data.tar.gz: 4b557a3ff333eaf8dd554a5c97812ffc8e3c5dacd1ca69b1cd8c010ceb149205
3
+ metadata.gz: 1d29656d2bd4bdc5bb1cd50c3cf3853e192fbb7de944b4495c816f424d710648
4
+ data.tar.gz: adbbb1f25f05a91ac195a6e8becb823b4f412a40476a26697547d06556253868
5
5
  SHA512:
6
- metadata.gz: c72b4302f63a5d5bec568d0de6a2cdfb466ef7372001f5b65b209a722b9303e29074c03509557627ca9e2fe8fcc987f01569fab4cfb7f8ce67cc5a310abfef49
7
- data.tar.gz: 28e9f08d4442d0efbb172a85c046466bb73edb2463b7c8ee6ad36f3dcee7ff49b7806a8cc6b8f1c751a47bc884ced167ebfe1f47b35ad15581a43efa9fe935ea
6
+ metadata.gz: 585e0ad23e05cbd4bade3aaf925bd38b07af390de78a7a28446cb6dad50b05a99155d8744d497fcbf6377e2013bb5740fc4bb140425f52217f5bb35312af3c53
7
+ data.tar.gz: d17f636215c7c9d338819ab56ed8bbdc6f1349bfadb34c15a860d9398d2afb3a41f4c6bc521807e3e23ee36a19f9370c295c12485d9e7de5db95fef5af3b2c22
@@ -5,6 +5,8 @@
5
5
  # below all versions (negative infinity), or any version.
6
6
  module SemverDialects
7
7
  class Boundary
8
+ include Comparable
9
+
8
10
  attr_accessor :semver
9
11
 
10
12
  def initialize(semver)
@@ -15,46 +17,12 @@ module SemverDialects
15
17
  @semver.to_s
16
18
  end
17
19
 
18
- def <(other)
19
- if other.instance_of?(BelowAll)
20
- false
21
- else
22
- other.instance_of?(AboveAll) ? true : @semver < other.semver
23
- end
24
- end
25
-
26
- def >(other)
27
- if other.instance_of?(BelowAll)
28
- true
29
- else
30
- other.instance_of?(AboveAll) ? false : @semver > other.semver
31
- end
32
- end
33
-
34
- def <=(other)
35
- self < other || self == other
36
- end
37
-
38
- def >=(other)
39
- self > other || self == other
40
- end
20
+ def <=>(other)
21
+ return nil unless other.is_a?(Boundary)
22
+ return -1 if other.instance_of?(AboveAll)
23
+ return 1 if other.instance_of?(BelowAll)
41
24
 
42
- def ==(other)
43
- # self cannot be BelowAll or AboveAll
44
- if other.instance_of?(BelowAll) || other.instance_of?(AboveAll)
45
- false
46
- else
47
- @semver == other.semver
48
- end
49
- end
50
-
51
- def !=(other)
52
- # self cannot be BelowAll or AboveAll
53
- if other.instance_of?(BelowAll) || other.instance_of?(AboveAll)
54
- false
55
- else
56
- @semver != other.semver
57
- end
25
+ semver <=> other.semver
58
26
  end
59
27
 
60
28
  def is_initial_version?
@@ -76,28 +44,10 @@ module SemverDialects
76
44
  false
77
45
  end
78
46
 
79
- def <(other)
80
- other.instance_of?(BelowAll) ? false : true
81
- end
82
-
83
- def >(_other)
84
- false
85
- end
86
-
87
- def <=(other)
88
- self < other || self == other
89
- end
90
-
91
- def >=(other)
92
- self > other || self == other
93
- end
94
-
95
- def ==(other)
96
- (other.instance_of? BelowAll) ? true : false
97
- end
47
+ def <=>(other)
48
+ return 0 if other.instance_of?(BelowAll)
98
49
 
99
- def !=(other)
100
- !(self == other)
50
+ -1 if other.is_a?(Boundary)
101
51
  end
102
52
  end
103
53
 
@@ -115,28 +65,10 @@ module SemverDialects
115
65
  false
116
66
  end
117
67
 
118
- def <(_other)
119
- false
120
- end
121
-
122
- def >(other)
123
- other.instance_of?(AboveAll) ? false : true
124
- end
125
-
126
- def <=(other)
127
- self < other || self == other
128
- end
129
-
130
- def >=(other)
131
- self > other || self == other
132
- end
133
-
134
- def ==(other)
135
- (other.instance_of? AboveAll) ? true : false
136
- end
68
+ def <=>(other)
69
+ return 0 if other.instance_of?(AboveAll)
137
70
 
138
- def !=(other)
139
- !(self == other)
71
+ 1 if other.is_a?(Boundary)
140
72
  end
141
73
  end
142
74
  end
@@ -2,10 +2,17 @@
2
2
 
3
3
  require_relative '../utils'
4
4
 
5
- # SemanticVersion represents a Semver 2 version.
6
- # Comparison rules are the ones of Semver 2.
7
5
  module SemverDialects
6
+ # SemanticVersion is a generic version class.
7
+ # It parses and compares versions of any syntax.
8
+ # It can't always be accurate because a single comparison logic
9
+ # can't possibly handle all the supported syntaxes.
10
+ # Since it's generic, it doesn't validate versions.
8
11
  class SemanticVersion
12
+ include Comparable
13
+
14
+ ANY_NUMBER = 'x'
15
+
9
16
  attr_reader :version_string, :prefix_segments, :suffix_segments, :segments
10
17
 
11
18
  # String to build a regexp that matches a version.
@@ -89,25 +96,6 @@ module SemverDialects
89
96
  [first_array_prefix.concat(first_array_suffix), second_array_prefix.concat(second_array_suffix)]
90
97
  end
91
98
 
92
- def get_equalized_prefix_arrays_for(semver_a, semver_b)
93
- first_array_prefix = semver_a.prefix_segments.clone
94
- second_array_prefix = semver_b.prefix_segments.clone
95
- first_array_prefix, second_array_prefix = _get_equalized_arrays_for(first_array_prefix, second_array_prefix)
96
- [first_array_prefix, second_array_prefix]
97
- end
98
-
99
- def <(other)
100
- self_array, other_array = get_equalized_arrays_for(self, other)
101
- (0..self_array.size - 1).each do |i|
102
- if self_array[i] < other_array[i]
103
- return true
104
- elsif self_array[i] > other_array[i]
105
- return false
106
- end
107
- end
108
- false
109
- end
110
-
111
99
  def is_zero?
112
100
  @prefix_segments.empty? || @prefix_segments.all?(&:is_zero?)
113
101
  end
@@ -120,47 +108,18 @@ module SemverDialects
120
108
  @suffix_segments.any?(&:is_post_release)
121
109
  end
122
110
 
123
- def >(other)
124
- self_array, other_array = get_equalized_arrays_for(self, other)
125
- (0..self_array.size - 1).each do |i|
126
- if self_array[i] > other_array[i]
127
- return true
128
- elsif self_array[i] < other_array[i]
129
- return false
130
- end
131
- end
132
- false
133
- end
134
-
135
- def >=(other)
136
- self == other || self > other || self == other
137
- end
138
-
139
- def <=(other)
140
- self == other || self < other
141
- end
142
-
143
- def ==(other)
144
- segments_a = []
145
- segments_b = []
146
-
147
- segments_a += other.segments
148
- segments_b += @segments
111
+ def <=>(other)
112
+ return nil unless other.is_a?(SemanticVersion)
149
113
 
150
- if other.segments.size < @segments.size
151
- (@segments.size - other.segments.size).times { |_| segments_a << SemanticVersionSegment.new('0') }
152
- elsif other.segments.size > @segments.size
153
- (other.segments.size - @segments.size).times { |_| segments_b << SemanticVersionSegment.new('0') }
154
- end
114
+ self_array, other_array = get_equalized_arrays_for(self, other)
115
+ zipped_arrays = self_array.zip(other_array)
116
+ zipped_arrays.each do |(a, b)|
117
+ return 0 if a.wildcard? || b.wildcard?
155
118
 
156
- (0..segments_a.size - 1).each do |i|
157
- return false if segments_a[i] != segments_b[i]
119
+ cmp = a <=> b
120
+ return cmp if cmp != 0
158
121
  end
159
- true
160
- end
161
-
162
- def !=(other)
163
- !(self == other)
122
+ 0
164
123
  end
165
124
 
166
125
  def to_normalized_s
@@ -185,6 +144,8 @@ module SemverDialects
185
144
  end
186
145
 
187
146
  class SemanticVersionSegment
147
+ include Comparable
148
+
188
149
  attr_accessor :normalized_group_string, :original_group_string, :is_post_release, :is_pre_release
189
150
 
190
151
  @@group_suffixes = {
@@ -227,52 +188,28 @@ module SemverDialects
227
188
  end
228
189
  end
229
190
 
230
- def compare(semver_a, semver_b, ret_anr_bnonr, ret_anonr_bnr, comparator)
231
- if semver_a.number? && semver_b.number?
232
- semver_a.to_i.send(comparator, semver_b.to_i)
233
- elsif semver_a.number? && !semver_b.number?
234
- if semver_b == 'X'
235
- true
236
- else
237
- ret_anr_bnonr
238
- end
239
- elsif !semver_a.number? && semver_b.number?
240
- if semver_a == 'X'
241
- true
242
- else
243
- ret_anonr_bnr
244
- end
245
- elsif semver_a == 'X' || semver_b == 'X' # !semantic_version_b.group_string.is_number? && !semantic_version_agrous_string.is_number?
246
- true
247
- else
248
- semver_a.send(comparator, semver_b)
249
- end
250
- end
251
-
252
- def <(other)
253
- compare(normalized_group_string, other.normalized_group_string, true, false, :<)
254
- end
255
-
256
- def >(other)
257
- compare(normalized_group_string, other.normalized_group_string, false, true, :>)
258
- end
191
+ def <=>(other)
192
+ return nil unless other.is_a?(SemanticVersionSegment)
259
193
 
260
- def >=(other)
261
- self == other || compare(normalized_group_string, other.normalized_group_string, false, true,
262
- :>)
263
- end
194
+ self_semver = normalized_group_string
195
+ other_semver = other.normalized_group_string
264
196
 
265
- def <=(other)
266
- self == other || compare(normalized_group_string, other.normalized_group_string, true, false,
267
- :<)
268
- end
197
+ both_are_numbers = self_semver.number? && other_semver.number?
198
+ at_least_one_is_x = self_semver == 'X' || other_semver == 'X'
199
+ a_numeric_b_non_numeric = self_semver.number? && !other_semver.number?
200
+ b_numeric_a_non_numeric = other_semver.number? && !self_semver.number?
269
201
 
270
- def ==(other)
271
- normalized_group_string == other.normalized_group_string
272
- end
273
-
274
- def !=(other)
275
- !(self == other)
202
+ if both_are_numbers
203
+ self_semver.to_i <=> other_semver.to_i
204
+ elsif at_least_one_is_x
205
+ 0
206
+ elsif a_numeric_b_non_numeric
207
+ -1
208
+ elsif b_numeric_a_non_numeric
209
+ 1
210
+ else
211
+ self_semver <=> other_semver
212
+ end
276
213
  end
277
214
 
278
215
  def to_normalized_s
@@ -283,6 +220,10 @@ module SemverDialects
283
220
  @version_string
284
221
  end
285
222
 
223
+ def wildcard?
224
+ normalized_group_string == 'X'
225
+ end
226
+
286
227
  def is_number?
287
228
  normalized_group_string.number?
288
229
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SemverDialects
4
- VERSION = '3.0.1'
4
+ VERSION = '3.0.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semver_dialects
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Thome
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2024-06-06 00:00:00.000000000 Z
13
+ date: 2024-06-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pastel