nuget_versions 0.9.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d7a65bb495d4a86c11b0b500c1ee5d4f2e9ea4a6baff4f3b34b01af063a18b2
4
- data.tar.gz: c74e0a77040fc072d4e4eb9743b6cecd4e54440f4c3332f1579820adfb5baf4a
3
+ metadata.gz: b0bef5e659ed237d7a3e2c05cff2ade749563052eb2cc34d21cff4d6dd6c7a0c
4
+ data.tar.gz: 422d2ae1f8e0fe63ae046a63d0a220dd05f409f1f825e5d13c6c781d4f27c94c
5
5
  SHA512:
6
- metadata.gz: d6e239cd9e1bed9ae4d22bb20014ff5fafbf7cbe942c0d1d1efb7db92380698e0b1fff0faeeda37c7f6b63ddccfa6b1cc2331a72945ff2cef9990a868fc7bd3f
7
- data.tar.gz: 0570d76877c6b58c39f646713b01bf9a4ff7b250cc06232fd0458ab8ee086e1a33f3a81a9ba5d6bf9cc99de654008446ac8f38adff831665b7867871f27108a0
6
+ metadata.gz: 58e1cd3b428a053b83a82827cd6c20a95c3fcc1ea78e8b9dd925def07d334b004ddc8abf63dd3aa94ed328eb7f1f9d58f6a86f6bcc1f761e9e38567e0c3930ca
7
+ data.tar.gz: 394f472ca81caa5a782f5ea1b1b080a1c92f35c745942a6d4b4fc48f7a2682584ddcdd532f3a94740ea4d44ca62caf3a6aef9c5c2cbd2bf8bb2af9328f66f85a
@@ -21,11 +21,15 @@ module NuGetVersions
21
21
  def initialize(major, minor, patch, revision = 0, release_labels = nil, metadata = nil)
22
22
  super(major, minor, patch, release_labels, metadata)
23
23
 
24
- @revision = revision
24
+ @revision = Integer(revision, revision.is_a?(String) ? 10 : 0)
25
25
  end
26
26
 
27
27
  attr_reader :revision
28
28
 
29
+ def revision=(new_value)
30
+ @revision = Integer(new_value, new_value.is_a?(String) ? 10 : 0)
31
+ end
32
+
29
33
  attr_accessor :original_version
30
34
 
31
35
  def to_s
@@ -52,23 +56,29 @@ module NuGetVersions
52
56
  value = value.to_s if !value.is_a? String
53
57
  original_value = value
54
58
 
59
+ return nil if value.empty?
60
+
55
61
  value = value.split("+", 2)
56
62
 
57
63
  metadata = (value.length == 2) ? value.last : nil
58
64
 
59
65
  value = value.first.split("-", 2)
60
66
 
61
- release_labels = (value.length == 2) ? value.last : nil
67
+ return nil if value.empty?
68
+
69
+ release_labels = (value.length == 2) ? value.last.split('.') : nil
62
70
 
63
71
  parts = value.first.split(".")
64
72
 
65
- return nil if value.length > 4
73
+ return nil if parts.length < 2 || parts.length > 4
74
+ return nil if release_labels && !SemanticVersion.try_validate_identifiers(release_labels)
75
+ return nil if metadata && !SemanticVersion.try_validate_identifier(metadata)
66
76
 
67
77
  begin
68
- major = Integer(parts[0])
69
- minor = (parts.length >= 2) ? Integer(parts[1]) : 0
70
- patch = (parts.length >= 3) ? Integer(parts[2]) : 0
71
- revision = (parts.length >= 4) ? Integer(parts[3]) : 0
78
+ major = Integer(parts[0], 10)
79
+ minor = (parts.length >= 2) ? Integer(parts[1], 10) : 0
80
+ patch = (parts.length >= 3) ? Integer(parts[2], 10) : 0
81
+ revision = (parts.length >= 4) ? Integer(parts[3], 10) : 0
72
82
  rescue
73
83
  return nil
74
84
  end
@@ -17,15 +17,17 @@ module NuGetVersions
17
17
  # - release_labels: Prerelease label
18
18
  # - metadata: Build metadata
19
19
  def initialize(major, minor, patch, release_labels = nil, metadata = nil)
20
- @major = major
21
- @minor = minor
22
- @patch = patch
20
+ @major = Integer(major, major.is_a?(String) ? 10 : 0)
21
+ @minor = Integer(minor, minor.is_a?(String) ? 10 : 0)
22
+ @patch = Integer(patch, patch.is_a?(String) ? 10 : 0)
23
23
 
24
24
  if !release_labels.nil?
25
25
  release_labels = release_labels.to_s.split('.') if !release_labels.kind_of? Array
26
+ SemanticVersion.validate_identifiers release_labels
26
27
  @release_labels = release_labels
27
28
  end
28
29
 
30
+ SemanticVersion.validate_identifier metadata if !metadata.nil?
29
31
  @metadata = metadata
30
32
  end
31
33
 
@@ -35,11 +37,43 @@ module NuGetVersions
35
37
  attr_reader :release_labels
36
38
  attr_reader :metadata
37
39
 
40
+ def major=(new_value)
41
+ @major = Integer(new_value, new_value.is_a?(String) ? 10 : 0)
42
+ end
43
+
44
+ def minor=(new_value)
45
+ @minor = Integer(new_value, new_value.is_a?(String) ? 10 : 0)
46
+ end
47
+
48
+ def patch=(new_value)
49
+ @patch = Integer(new_value, new_value.is_a?(String) ? 10 : 0)
50
+ end
51
+
52
+ def release_labels=(new_value)
53
+ return @release_labels = nil if new_value.nil?
54
+ new_value = new_value.to_s.split('.') if !new_value.kind_of? Array
55
+ SemanticVersion.validate_identifiers new_value
56
+ @release_labels = new_value
57
+ end
58
+
59
+ def metadata=(new_value)
60
+ return @metadata = nil if new_value.nil?
61
+ SemanticVersion.validate_identifier new_value
62
+ @metadata = new_value
63
+ end
64
+
38
65
  def release
39
- return "" if @release_labels.nil?
66
+ return nil if @release_labels.nil?
40
67
  @release_labels.join('.')
41
68
  end
42
69
 
70
+ def release=(new_value)
71
+ return @release_labels = nil if new_value.nil?
72
+ new_value = new_value.split('.')
73
+ SemanticVersion.validate_identifiers new_value
74
+ @release_labels = new_value
75
+ end
76
+
43
77
  def is_prerelease?
44
78
  !@release_labels.nil? && !@release_labels.all?(&:empty?)
45
79
  end
@@ -96,27 +130,50 @@ module NuGetVersions
96
130
 
97
131
  value = value.to_s if !value.is_a? String
98
132
 
133
+ return nil if value.empty?
134
+
99
135
  value = value.split("+", 2)
100
136
 
101
137
  metadata = (value.length == 2) ? value.last : nil
102
138
 
103
139
  value = value.first.split("-", 2)
104
140
 
105
- release_labels = (value.length == 2) ? value.last : nil
141
+ return nil if value.empty?
142
+
143
+ release_labels = (value.length == 2) ? value.last.split('.') : nil
106
144
 
107
145
  parts = value.first.split(".")
108
146
 
109
- return nil if value.length > 3
147
+ return nil if parts.length != 3
148
+ return nil if release_labels && !SemanticVersion.try_validate_identifiers(release_labels)
149
+ return nil if metadata && !SemanticVersion.try_validate_identifier(metadata)
110
150
 
111
151
  begin
112
- major = Integer(parts[0])
113
- minor = (parts.length >= 2) ? Integer(parts[1]) : 0
114
- patch = (parts.length >= 3) ? Integer(parts[2]) : 0
152
+ major = Integer(parts[0], 10)
153
+ minor = (parts.length >= 2) ? Integer(parts[1], 10) : 0
154
+ patch = (parts.length >= 3) ? Integer(parts[2], 10) : 0
115
155
  rescue
116
156
  return nil
117
157
  end
118
158
 
119
159
  return SemanticVersion.new(major, minor, patch, release_labels, metadata)
120
160
  end
161
+
162
+ protected
163
+ def self.validate_identifiers(array)
164
+ array.each { |identifier| validate_identifier(identifier) }
165
+ end
166
+
167
+ def self.validate_identifier(identifier)
168
+ raise "Invalid semantic version identifier: #{identifier}" if !try_validate_identifier(identifier)
169
+ end
170
+
171
+ def self.try_validate_identifiers(array)
172
+ array.all? { |identifier| try_validate_identifier(identifier) }
173
+ end
174
+
175
+ def self.try_validate_identifier(identifier)
176
+ return identifier.count("^A-Za-z0-9-").zero?
177
+ end
121
178
  end
122
179
  end
@@ -18,25 +18,27 @@ module NuGetVersions
18
18
  return -1 if b.kind_of?(NuGetVersion) && (b.revision > 0)
19
19
  end
20
20
 
21
- a_labels = a.release_labels
22
- b_labels = b.release_labels
21
+ a_labels = a.release_labels || []
22
+ b_labels = b.release_labels || []
23
23
 
24
- count = [a_labels.length, b_labels.length].min
24
+ count = [a_labels.length, b_labels.length].max
25
25
 
26
26
  for i in 0..(count - 1)
27
- return -1 if i >= a_labels.length
28
- return +1 if i >= b_labels.length
27
+ return +1 if i >= a_labels.length
28
+ return -1 if i >= b_labels.length
29
29
 
30
30
  a_release = a_labels[i].to_s
31
31
  b_release = b_labels[i].to_s
32
32
 
33
- a_release_int = Integer(a_labels[i]) rescue nil
34
- b_release_int = Integer(b_labels[i]) rescue nil
33
+ a_release_int = Integer(a_release, 10) rescue nil
34
+ b_release_int = Integer(b_release, 10) rescue nil
35
35
 
36
- return a_release_int <=> b_release_int if !(a_release_int.nil? || b_release_int.nil?)
36
+ if !(a_release_int.nil? || b_release_int.nil?)
37
+ return result if (result = a_release_int <=> b_release_int) != 0
38
+ end
37
39
 
38
- return +1 if !a_release_int.nil?
39
- return -1 if !b_release_int.nil?
40
+ return +1 if !a_release_int.nil? && b_release_int.nil?
41
+ return -1 if a_release_int.nil? && !b_release_int.nil?
40
42
 
41
43
  return result if (result = a_release.casecmp(b_release)) != 0
42
44
  end
@@ -1,3 +1,3 @@
1
- require 'nuget_versions/semantic_version.rb'
2
- require 'nuget_versions/nuget_version.rb'
3
- require 'nuget_versions/version_comparer.rb'
1
+ require_relative 'nuget_versions/semantic_version.rb'
2
+ require_relative 'nuget_versions/nuget_version.rb'
3
+ require_relative 'nuget_versions/version_comparer.rb'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nuget_versions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gilbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-19 00:00:00.000000000 Z
11
+ date: 2018-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
41
55
  description: Provides facilities for parsing & working with NuGet Versions, which
42
56
  are a superset of Semantic Versions 2.0.
43
57
  email: