naturalsorter 2.0.6 → 2.0.7

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZGI4NzU3ZjlhMDA0NjI2MTljODI5ZTFhMDU4MTlhMzU5ZjM2YmZiNQ==
5
+ data.tar.gz: !binary |-
6
+ YTEzYzdlYTRhMGVkNDg2MzU4MWUxN2UwMDExMzQwYTg3OTFkNzI2Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Y2E4YzFjYzI0MTIyZmRkY2IyMGM4NjcxYTIyOTVhMjM0NzliM2VjYjc5N2M0
10
+ ZjYwMTMyZWU1NmM0ZmM4Mjg3MTI4MGRiZGI5NDY0ZDU2NjgyNjllN2ZiZjA0
11
+ MDIyYTZjOWE3YmE4NTYyMGZiN2Q5MjJmMGNmODJhNzc4NmEyZWU=
12
+ data.tar.gz: !binary |-
13
+ ZTFhYWZjNGNjNmUzYmE0MTdmNWIzMjExYmEzM2JlM2U4NGJlMmEwYWU3Nzkz
14
+ NzU0MzdjODFkMTc3MGZlODVhMjY4YjU5YTVkNDg5ZDA5ZTNjZmU2NWJlYmVi
15
+ ZjU0YTg4ZGJhNTE0ZmRiZjdmNTM3ZmMxY2ZhZWQ3NmNjNjJkYzg=
data/README.markdown CHANGED
@@ -26,19 +26,19 @@ This fork contains some special algorithms to sort version numbers in a natural
26
26
 
27
27
  ## API
28
28
 
29
- This 2 methods are sorting a simple array of Strings. The name of the methods and the parameters are self explained.
29
+ These 2 methods are sorting a simple array of Strings. The name of the methods and the parameters are self explained.
30
30
 
31
- `Naturalsorter::Sorter.sort(array, caseinsesitive = false, asc = true)`
31
+ `Naturalsorter::Sorter.sort(array, caseinsensitive = false, asc = true)`
32
32
 
33
33
  And this here is for more advanced sorting. Where you can put in a array of objects and the method which should called on every object for comparison.
34
34
 
35
- `Naturalsorter::Sorter.sort_by_method(array, method, caseinsesitive = false, asc = true)`
35
+ `Naturalsorter::Sorter.sort_by_method(array, method, caseinsensitive = false, asc = true)`
36
36
 
37
- This methods are based on a different algo. Spezially optimizied for sorting version strings.
37
+ These methods are based on a different algorithm. Especially optimized for sorting version strings.
38
38
 
39
39
  `Naturalsorter::Sorter.sort_version(array, asc = true)`
40
40
 
41
- This here is again for an array with objects. Spezially optimizied for sorting version strings.
41
+ This here is again for an array with objects. Especially optimized for sorting version strings.
42
42
 
43
43
  `Naturalsorter::Sorter.sort_version_by_method(array, method, asc = true )`
44
44
 
@@ -62,7 +62,7 @@ Is a smaller than b or equal?
62
62
 
63
63
  `Naturalsorter::Sorter.smaller_or_equal?(a, b)`
64
64
 
65
- This is for the Ruby GEM notaiton '~>'. For example '~>1.1' fits '1.2' and '1.9' and '1.14'. But not 2.0.
65
+ This is for the Ruby GEM notation '~>'. For example '~>1.1' fits '1.2' and '1.9' and '1.14'. But not 2.0.
66
66
  The parameter version would be for example '~>1.1' and the parameter newest_version would be the
67
67
  current newest version of the GEM, for example "2.0". The method will return false in this case
68
68
  because '~>1.1' doesn't fit anymore the newest version.
@@ -74,7 +74,7 @@ because '~>1.1' doesn't fit anymore the newest version.
74
74
 
75
75
  You should add this line to your Gemfile
76
76
 
77
- `gem 'naturalsorter', '2.0.6'`
77
+ `gem 'naturalsorter', '2.0.7'`
78
78
 
79
79
  and run this command in your app root directory
80
80
 
@@ -86,7 +86,7 @@ After the installation you can use it like this:
86
86
 
87
87
  `Naturalsorter::Sorter.sort(["a400", "a5", "a1"], true)`
88
88
 
89
- it will return the array ["a1", "a5", "a400"]. The second paramter is for "caseinsesitive".
89
+ it will return the array ["a1", "a5", "a400"]. The second parameter is for "caseinsensitive".
90
90
 
91
91
  If you have more advanced objects you want to sort, you should use the second method. Assume you have a Class User with 3 attributes: "firstname", "lastname", "age" and you want to sort an array of class Users by "firstname".
92
92
 
@@ -103,5 +103,4 @@ will return the array ["1.1", "1.2", "1.10"]
103
103
 
104
104
  ## Alan Davies
105
105
 
106
- The first 4 methods in this librarie are internal based on the natcmp implementation from Alan Davies. All glorry to him for his awesome work.
107
-
106
+ The first 4 methods in this library are internal based on the natcmp implementation from Alan Davies. All glory to him for his awesome work.
@@ -1,3 +1,3 @@
1
1
  module Naturalsorter
2
- VERSION = "2.0.6"
2
+ VERSION = "2.0.7"
3
3
  end
data/lib/naturalsorter.rb CHANGED
@@ -26,49 +26,37 @@ require "version_tag_recognizer"
26
26
  # 3. This notice may not be removed or altered from any source distribution.
27
27
 
28
28
  module Naturalsorter
29
-
29
+
30
30
  class Sorter
31
-
32
- def self.sort(array, caseinsesitive = false , asc = true )
31
+
32
+ def self.sort(array, caseinsensitive = false , asc = true )
33
33
  return array if (array.nil? || array.empty?)
34
- if asc
35
- return array.sort { |a, b| Natcmp.natcmp(a, b, caseinsesitive) }
36
- else
37
- return array.sort { |a, b| Natcmp.natcmp(b, a, caseinsesitive) }
38
- end
34
+ return array.sort { |a, b| Natcmp.natcmp(a, b, caseinsensitive) } if asc
35
+ return array.sort { |a, b| Natcmp.natcmp(b, a, caseinsensitive) }
39
36
  end
40
-
41
- # 'Natural order' sort for an array of objects.
42
- def self.sort_by_method(array, method, caseinsesitive = false, asc = true)
37
+
38
+ # 'Natural order' sort for an array of objects.
39
+ def self.sort_by_method(array, method, caseinsensitive = false, asc = true)
43
40
  return array if (array.nil? || array.empty? || array.length == 1)
44
- if asc
45
- array.sort { |a,b| Natcmp.natcmp( a.send(method), b.send(method), caseinsesitive) }
46
- else
47
- array.sort { |a, b| Natcmp.natcmp(b.send(method), a.send(method), caseinsesitive) }
48
- end
41
+ return array.sort { |a, b| Natcmp.natcmp( a.send(method), b.send(method), caseinsensitive) } if asc
42
+ return array.sort { |a, b| Natcmp.natcmp(b.send(method), a.send(method), caseinsensitive) }
49
43
  end
50
-
51
-
44
+
45
+
52
46
  def self.sort_version(array, asc = true)
53
47
  return array if (array.nil? || array.empty? || array.length == 1)
54
- if asc
55
- array.sort { |a,b| Versioncmp.compare( a, b ) }
56
- else
57
- array.sort { |a,b| Versioncmp.compare( b, a ) }
58
- end
48
+ return array.sort { |a,b| Versioncmp.compare( a, b ) } if asc
49
+ return array.sort { |a,b| Versioncmp.compare( b, a ) }
59
50
  end
60
-
61
-
51
+
52
+
62
53
  def self.sort_version_by_method(array, method, asc = true )
63
54
  return array if (array.nil? || array.empty? || array.length == 1 )
64
- if asc
65
- array.sort { |a,b| Versioncmp.compare(a.send(method), b.send(method)) }
66
- else
67
- array.sort { |a,b| Versioncmp.compare(b.send(method), a.send(method)) }
68
- end
55
+ return array.sort { |a,b| Versioncmp.compare(a.send(method), b.send(method)) } if asc
56
+ return array.sort { |a,b| Versioncmp.compare(b.send(method), a.send(method)) }
69
57
  end
70
-
71
-
58
+
59
+
72
60
  def self.get_newest_version(first, second)
73
61
  array = [first, second]
74
62
  array = array.sort { |a,b| Versioncmp.compare( a, b ) }
@@ -76,10 +64,10 @@ module Naturalsorter
76
64
  end
77
65
 
78
66
  def self.get_newest(a, b)
79
- Versioncmp.replace_leading_vs a, b
67
+ Versioncmp.replace_leading_vs a, b
80
68
  Sorter.get_newest_version(a, b)
81
69
  end
82
-
70
+
83
71
  def self.bigger?(a, b)
84
72
  return false if a.eql?( b )
85
73
  newest = self.get_newest a, b
@@ -91,23 +79,23 @@ module Naturalsorter
91
79
  newest = self.get_newest a, b
92
80
  newest.eql?( b )
93
81
  end
94
-
82
+
95
83
  def self.bigger_or_equal?(a, b)
96
84
  return true if a.eql?(b)
97
85
  newest = self.get_newest a, b
98
86
  newest.eql?(a)
99
87
  end
100
-
88
+
101
89
  def self.smaller_or_equal?(a, b)
102
90
  return true if a.eql?(b)
103
91
  newest = self.get_newest a, b
104
92
  newest.eql?(b)
105
- end
93
+ end
94
+
106
95
 
107
-
108
-
109
- # This is for the GEM notaiton ~>
110
- # For example ~>1.1 fits 1.2 and 1.9 and 1.14
96
+
97
+ # This is for the GEM notaiton ~>
98
+ # For example ~>1.1 fits 1.2 and 1.9 and 1.14
111
99
  # But not 2.0
112
100
  def self.is_version_current?(version, newest_version)
113
101
  version = version.gsub("~>", "")
@@ -121,7 +109,7 @@ module Naturalsorter
121
109
  min_length = min_length - 2
122
110
  if min_length < 0
123
111
  min_length = 0
124
- end
112
+ end
125
113
  (0..min_length).each do |z|
126
114
  ver = versions[z]
127
115
  cur = newests[z]
@@ -139,10 +127,10 @@ module Naturalsorter
139
127
  true
140
128
  end
141
129
 
142
- def self.replace_minimum_stability val
143
- VersionTagRecognizer.remove_minimum_stability val
130
+ def self.replace_minimum_stability val
131
+ VersionTagRecognizer.remove_minimum_stability val
144
132
  end
145
-
133
+
146
134
  end
147
-
135
+
148
136
  end
data/lib/versioncmp.rb CHANGED
@@ -33,57 +33,85 @@ class Versioncmp
33
33
  b_empty = b_val.nil? || b_val.empty?
34
34
 
35
35
  return 0 if a_empty && b_empty
36
+ return 0 if a_val.eql?( b_val )
36
37
  return 1 if (a_empty == false) && b_empty
37
38
  return -1 if (b_empty == false) && a_empty
38
39
 
39
40
  a = pre_process a_val
40
41
  b = pre_process b_val
41
42
 
42
- offset1 = 0;
43
- offset2 = 0;
44
-
45
- for i in 0..100
46
- break if offset1 >= a.length() || offset2 >= b.length()
47
-
48
- part1 = Versioncmp.get_a_piece_of_the_cake(offset1, a);
49
- part2 = Versioncmp.get_a_piece_of_the_cake(offset2, b);
50
-
51
- return -1 if Versioncmp.timestamp?(part1) && part2.length() < 8
52
- return 1 if Versioncmp.timestamp?(part2) && part1.length() < 8
53
-
54
- offset1 += part1.length() + 1;
55
- offset2 += part2.length() + 1;
56
-
57
- if ( part1.match(/^[0-9]+$/) && part2.match(/^[0-9]+$/) )
58
- ai = part1.to_i;
59
- bi = part2.to_i;
60
- result = Versioncmp.compare_int(ai, bi);
61
- return result if result != 0
62
- next
63
- elsif ( !part1.match(/^[0-9]+$/) && !part2.match(/^[0-9]+$/) )
64
- result = double_scope_checker(a, b)
65
- return result if result != 0
66
- result = Versioncmp.compare_string(part1, part2)
67
- return result if (result != 0)
68
- next
69
- else
70
- result = Versioncmp.check_jquery_versioning(part1, part2)
71
- return result if result != nil
72
- return 1 if (part1.match(/^[0-9]+$/) && part2.match(/^[0-9]+$/) == nil)
73
- return -1;
74
- end
43
+ offsets = [0, 0]
44
+
45
+ for i in 0..20
46
+ result = self.check_the_slice a, b, offsets
47
+ next if result.nil?
48
+ return result if result == 1 || result == -1
75
49
  end
76
50
  result = Versioncmp.check_for_tags(a, b)
77
51
  return result
78
52
  end
79
53
 
54
+
55
+ def self.check_the_slice a, b, offsets
56
+ a += ".0" if offsets[0] >= a.length
57
+ b += ".0" if offsets[0] >= b.length
58
+
59
+ part1 = Versioncmp.get_a_piece_of_the_cake offsets[0], a
60
+ part2 = Versioncmp.get_a_piece_of_the_cake offsets[0], b
61
+
62
+ return -1 if Versioncmp.timestamp?(part1) && part2.length() < 8
63
+ return 1 if Versioncmp.timestamp?(part2) && part1.length() < 8
64
+
65
+ offsets[0] += part1.length() + 1;
66
+ offsets[1] += part2.length() + 1;
67
+
68
+ if ( part1.match(/^[0-9]+$/) && part2.match(/^[0-9]+$/) )
69
+ return self.compare_numbers part1, part2
70
+ elsif ( !part1.match(/^[0-9]+$/) && !part2.match(/^[0-9]+$/) )
71
+ return self.compare_strings a, b, part1, part2
72
+ else
73
+ return self.compare_specia_cases part1, part2
74
+ end
75
+ end
76
+
77
+
78
+ def self.compare_numbers part1, part2
79
+ ai = part1.to_i;
80
+ bi = part2.to_i;
81
+ result = Versioncmp.compare_int(ai, bi);
82
+ return result if result == 1 || result == -1
83
+ return nil
84
+ end
85
+
86
+
87
+ def self.compare_strings a, b, part1, part2
88
+ result = double_scope_checker(a, b)
89
+ return result if result == 1 || result == -1
90
+ result = Versioncmp.compare_string(part1, part2)
91
+ return result if result == 1 || result == -1
92
+ return nil
93
+ end
94
+
95
+
96
+ def self.compare_specia_cases part1, part2
97
+ result = Versioncmp.check_jquery_versioning(part1, part2)
98
+ return result if result != nil
99
+ return 1 if ( part1.eql?("0") && part2.match(/^[a-zA-Z]+/) )
100
+ return -1 if ( part2.eql?("0") && part1.match(/^[a-zA-Z]+/) )
101
+ return -1 if ( part1.eql?("0") && part2.match(/^[1-9]+[-_a-zA-Z]+/) )
102
+ return 1 if ( part2.eql?("0") && part1.match(/^[1-9]+[-_a-zA-Z]+/) )
103
+ return 1 if ( part1.match(/^[0-9]+$/) && !part2.match(/^[0-9]+$/) )
104
+ return -1;
105
+ end
106
+
107
+
80
108
  # Tags are RC, alpha, beta, dev and so on.
81
109
  #
82
110
  def self.check_for_tags(a, b)
83
- big = String.new(a)
111
+ big = String.new(a)
84
112
  small = String.new(b)
85
113
  if (a.length() < b.length())
86
- big = String.new(b)
114
+ big = String.new(b)
87
115
  small = String.new(a)
88
116
  end
89
117
  if (VersionTagRecognizer.tagged?(big))
@@ -95,6 +123,7 @@ class Versioncmp
95
123
  self.compare_string_length_odd(a, b)
96
124
  end
97
125
 
126
+
98
127
  def self.double_scope_checker(a, b)
99
128
  if VersionTagRecognizer.tagged?(a) && VersionTagRecognizer.tagged?(b)
100
129
  a_without_scope = VersionTagRecognizer.remove_tag a
@@ -106,6 +135,7 @@ class Versioncmp
106
135
  0
107
136
  end
108
137
 
138
+
109
139
  def self.get_a_piece_of_the_cake(offset, cake)
110
140
  for z in 0..100
111
141
  offsetz = offset + z
@@ -122,25 +152,29 @@ class Versioncmp
122
152
  return piece
123
153
  end
124
154
 
155
+
125
156
  def self.timestamp?(part)
126
157
  return part.length() == 8 && part.match(/^[0-9]+$/) != nil
127
158
  end
128
159
 
160
+
129
161
  def self.pre_process val
130
- a = replace_x_dev val
131
- replace_leading_v a
132
- replace_99_does_not_exist a
133
- replace_timestamps a
134
- VersionTagRecognizer.remove_minimum_stability a
135
- a
162
+ cleaned_version = replace_x_dev val
163
+ replace_leading_v cleaned_version
164
+ replace_99_does_not_exist cleaned_version
165
+ replace_timestamps cleaned_version
166
+ VersionTagRecognizer.remove_minimum_stability cleaned_version
167
+ cleaned_version
136
168
  end
137
169
 
170
+
138
171
  def self.replace_99_does_not_exist val
139
172
  if val.eql?("99.0-does-not-exist")
140
173
  val.gsub!("99.0-does-not-exist", "0.0.0")
141
174
  end
142
175
  end
143
176
 
177
+
144
178
  # Some glory Java Devs used the timestamp as version string
145
179
  # http://www.versioneye.com/package/commons-beanutils--commons-beanutils
146
180
  # Ganz grosses Kino !
@@ -153,6 +187,7 @@ class Versioncmp
153
187
  end
154
188
  end
155
189
 
190
+
156
191
  def self.replace_x_dev val
157
192
  new_val = String.new(val)
158
193
  if val.eql?("dev-master")
@@ -165,15 +200,18 @@ class Versioncmp
165
200
  new_val
166
201
  end
167
202
 
203
+
168
204
  def self.replace_leading_v val
169
205
  val.gsub!(/^v/, "") if val.match(/^v[0-9]+/)
170
206
  end
171
207
 
208
+
172
209
  def self.replace_leading_vs a, b
173
210
  self.replace_leading_v a
174
211
  self.replace_leading_v b
175
212
  end
176
213
 
214
+
177
215
  def self.check_jquery_versioning(part1, part2)
178
216
  # --- START ---- special case for awesome jquery shitty verison numbers
179
217
  if ( part1.match(/^[0-9]+[a-zA-Z]+[0-9]+$/) != nil && part2.match(/^[0-9]+$/) != nil )
@@ -198,23 +236,27 @@ class Versioncmp
198
236
  # --- END ---- special case for awesome jquery shitty verison numbers
199
237
  end
200
238
 
239
+
201
240
  def self.compare_int(ai, bi)
202
241
  return -1 if (ai < bi)
203
242
  return 0 if (ai == bi)
204
243
  return 1
205
244
  end
206
245
 
246
+
207
247
  def self.compare_string(a, b)
208
248
  return 0 if a.eql? b
209
249
  return Natcmp.natcmp(a, b)
210
250
  end
211
251
 
252
+
212
253
  def self.compare_string_length(a, b)
213
254
  return 0 if a.length() == b.length()
214
255
  return 1 if a.length() < b.length()
215
256
  return -1
216
257
  end
217
258
 
259
+
218
260
  def self.compare_string_length_odd(a, b)
219
261
  return 1 if a.length > b.length
220
262
  return -1 if a.length < b.length
@@ -6,6 +6,9 @@ describe Naturalsorter::Sorter do
6
6
  it "cba is abc" do
7
7
  Naturalsorter::Sorter.sort(["c", "b", "a"], true).should eql(["a", "b", "c"])
8
8
  end
9
+ it "is 2.2, 2.2.1-b03" do
10
+ Naturalsorter::Sorter.sort(["2.2.1-b03", "2.2"], true).should eql(["2.2", "2.2.1-b03"])
11
+ end
9
12
  it "c400b5a1 is a1b5c400" do
10
13
  Naturalsorter::Sorter.sort(["a400", "a5", "a1"], true).should eql(["a1", "a5", "a400"])
11
14
  end
@@ -41,6 +44,18 @@ describe Naturalsorter::Sorter do
41
44
  Naturalsorter::Sorter.sort_version(["1.1", "20030211.134440"]).should eql(["20030211.134440", "1.1"])
42
45
  end
43
46
 
47
+ it "is 2.2.0, 2.2.1-b03" do
48
+ Naturalsorter::Sorter.sort_version(["2.2.1-b03", "2.2.0", ]).should eql(["2.2.0", "2.2.1-b03"])
49
+ end
50
+
51
+ it "is 2.2, 2.2.1-b03" do
52
+ Naturalsorter::Sorter.sort_version(["2.2.1-b03", "2.2", ]).should eql(["2.2", "2.2.1-b03"])
53
+ end
54
+
55
+ it "is 2.2.0-b03, 2.2.1-b03" do
56
+ Naturalsorter::Sorter.sort_version(["2.2.1-b03", "2.2.0-b03", ]).should eql(["2.2.0-b03", "2.2.1-b03"])
57
+ end
58
+
44
59
  it "1.1, 1.0 is 1.0, 1.1" do
45
60
  Naturalsorter::Sorter.sort_version(["1.1", "1.0"]).should eql(["1.0", "1.1"])
46
61
  end
@@ -81,6 +96,10 @@ describe Naturalsorter::Sorter do
81
96
  Naturalsorter::Sorter.sort_version(["1.1", "1.2", "1.0"]).should eql(["1.0", "1.1", "1.2"])
82
97
  end
83
98
 
99
+ it "sort alphas and betas" do
100
+ Naturalsorter::Sorter.sort_version(["1.0.2", "1.0.1-b", "1.0.1-a"]).should eql(["1.0.1-a", "1.0.1-b", "1.0.2"])
101
+ end
102
+
84
103
  it "sort with RC" do
85
104
  Naturalsorter::Sorter.sort_version(["1.1", "1.1.RC1"]).should eql(["1.1.RC1", "1.1"])
86
105
  end
@@ -1,7 +1,7 @@
1
1
  require "naturalsorter"
2
2
 
3
3
  describe Versioncmp do
4
-
4
+
5
5
  it "smaler" do
6
6
  Versioncmp.compare("1.1", "1.2").should eql(-1)
7
7
  end
@@ -13,11 +13,11 @@ describe Versioncmp do
13
13
  it "smaler" do
14
14
  Versioncmp.compare("1.1.5", "1.1-dev").should eql(-1)
15
15
  end
16
-
16
+
17
17
  it "bigger" do
18
18
  Versioncmp.compare("1.1", "1.0").should eql(1)
19
19
  end
20
-
20
+
21
21
  it "1.1.1 is bigger than 1.1" do
22
22
  Versioncmp.compare("1.1.1", "1.1").should eql(1)
23
23
  end
@@ -26,26 +26,26 @@ describe Versioncmp do
26
26
  Versioncmp.compare("dev-master", "10.10.999").should eql(1)
27
27
  end
28
28
 
29
- it "2.2.x-dev is bigger than 2.2.1" do
29
+ it "2.2.x-dev is bigger than 2.2.1" do
30
30
  Versioncmp.compare("2.2.x-dev", "2.2.1").should eql(1)
31
- end
32
-
31
+ end
32
+
33
33
  it "1.1 is smaller than 1.1.1" do
34
34
  Versioncmp.compare("1.1", "1.1.1").should eql(-1)
35
35
  end
36
-
36
+
37
37
  it "equal" do
38
38
  Versioncmp.compare("1.1", "1.1").should eql(0)
39
39
  end
40
-
40
+
41
41
  it "equal RC" do
42
42
  Versioncmp.compare("1.1.RC1", "1.1.RC1").should eql(0)
43
43
  end
44
-
44
+
45
45
  it "smaller RC" do
46
46
  Versioncmp.compare("1.1.RC1", "1.1").should eql(-1)
47
47
  end
48
-
48
+
49
49
  it "smaller RC" do
50
50
  Versioncmp.compare("1.1.rc1", "1.1").should eql(-1)
51
51
  end
@@ -53,11 +53,11 @@ describe Versioncmp do
53
53
  it "smaller RC" do
54
54
  Versioncmp.compare("1.1.rc1", "2.0").should eql(-1)
55
55
  end
56
-
56
+
57
57
  it "smaller RC" do
58
58
  Versioncmp.compare("1.1-rc1", "1.1").should eql(-1)
59
59
  end
60
-
60
+
61
61
  it "smaller alpha" do
62
62
  Versioncmp.compare("1.1-alpha1", "1.1").should eql(-1)
63
63
  end
@@ -65,93 +65,97 @@ describe Versioncmp do
65
65
  it "alpha is smaller than BETA" do
66
66
  Versioncmp.compare("2.1.0alpha", "2.1.0-BETA1").should eql(-1)
67
67
  end
68
-
68
+
69
69
  it "smaller alpha-1" do
70
70
  Versioncmp.compare("1.1-alpha-1", "1.1").should eql(-1)
71
71
  end
72
-
72
+
73
73
  it "smaller alpha" do
74
74
  Versioncmp.compare("1.1", "1.1-alpha-1").should eql(1)
75
75
  end
76
-
76
+
77
77
  it "smaller beta" do
78
78
  Versioncmp.compare("3.1-beta1", "3.1").should eql(-1)
79
79
  end
80
-
80
+
81
81
  it "smaller beta" do
82
82
  Versioncmp.compare("3.1-beta-1", "3.1").should eql(-1)
83
83
  end
84
-
84
+
85
85
  it "smaller 3.0-rc4-negotiate" do
86
86
  Versioncmp.compare("3.0-rc4-negotiate", "3.0").should eql(-1)
87
87
  end
88
-
88
+
89
89
  it "smaller 3.1-jbossorg-1" do
90
90
  Versioncmp.compare("3.1-jbossorg-1", "3.1").should eql(-1)
91
91
  end
92
-
92
+
93
93
  it "smaller 3.1-pre1" do
94
94
  Versioncmp.compare("3.1-pre1", "3.1").should eql(-1)
95
95
  end
96
-
96
+
97
97
  it "bigger RC" do
98
98
  Versioncmp.compare("1.1.rc3", "1.1.rc2").should eql(1)
99
99
  end
100
-
100
+
101
101
  it "bigger RC than 1.0" do
102
102
  Versioncmp.compare("1.1.RC1", "1.0").should eql(1)
103
103
  end
104
-
104
+
105
105
  it "bigger RC than 1.0" do
106
106
  Versioncmp.compare("1.1.RC1", "1.1").should eql(-1)
107
107
  end
108
-
109
- it "20040121.140929 is smaller than 1.1" do
108
+
109
+ it "20040121.140929 is smaller than 1.1" do
110
110
  Versioncmp.compare("20040121.140929", "1.1").should eql(-1)
111
111
  end
112
-
113
- it "1.1 is bigger than 20040121.140929" do
112
+
113
+ it "1.1 is bigger than 20040121.140929" do
114
114
  Versioncmp.compare("1.1", "20040121.140929").should eql(1)
115
115
  end
116
116
 
117
- it "1.7b2 is smaller than 1.7" do
117
+ it "1.7b2 is smaller than 1.7" do
118
118
  Versioncmp.compare("1.7b2", "1.7").should eql(-1)
119
119
  end
120
120
 
121
- it "1.7 is bigger than 1.7b2" do
121
+ it "1.7 is bigger than 1.7b2" do
122
122
  Versioncmp.compare("1.7", "1.7b2").should eql(1)
123
123
  end
124
124
 
125
- it "1.7 is bigger than 1.7rc2" do
125
+ it "1.7 is bigger than 1.7rc2" do
126
126
  Versioncmp.compare("1.7", "1.7rc2").should eql(1)
127
127
  end
128
128
 
129
- it "1.7 is bigger than 1.7RC2" do
129
+ it "1.7 is bigger than 1.7RC2" do
130
130
  Versioncmp.compare("1.7", "1.7RC2").should eql(1)
131
131
  end
132
132
 
133
- it "1.7 is bigger than 1.7a" do
133
+ it "1.7 is bigger than 1.7a" do
134
134
  Versioncmp.compare("1.7", "1.7a").should eql(1)
135
135
  end
136
136
 
137
- it "1.7 is bigger than 1.7b" do
137
+ it "1.7 is bigger than 1.7b" do
138
138
  Versioncmp.compare("1.7", "1.7b").should eql(1)
139
139
  end
140
140
 
141
- it "1.7b is bigger than 1.7a" do
141
+ it "1.7b is bigger than 1.7a" do
142
142
  Versioncmp.compare("1.7", "1.7b").should eql(1)
143
143
  end
144
144
 
145
- it "1.7.1rc1 is smaller than 1.7.2" do
145
+ it "1.7.1rc1 is smaller than 1.7.2" do
146
146
  Versioncmp.compare("1.7.1rc1", "1.7.2").should eql(-1)
147
147
  end
148
148
 
149
- it "1.7.2 is bigger than 1.7.1rc1" do
149
+ it "1.7.2 is bigger than 1.7.1rc1" do
150
150
  Versioncmp.compare("1.7.2", "1.7.1rc1").should eql(1)
151
151
  end
152
152
 
153
- it "99.0-does-not-exist is smaller than 1.7.1" do
153
+ it "99.0-does-not-exist is smaller than 1.7.1" do
154
154
  Versioncmp.compare("99.0-does-not-exist", "1.7.1").should eql(-1)
155
155
  end
156
156
 
157
- end
157
+ it "2.2.1-b03 is bigger then 2.2" do
158
+ Versioncmp.compare("2.2.1-b03", "2.2").should eql(1)
159
+ end
160
+
161
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: naturalsorter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
5
- prerelease:
4
+ version: 2.0.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - reiz
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-06-18 00:00:00.000000000 Z
12
+ date: 2013-12-03 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - '='
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - '='
29
26
  - !ruby/object:Gem::Version
@@ -54,27 +51,26 @@ files:
54
51
  - spec/versioncmp_spec.rb
55
52
  homepage: https://github.com/versioneye/naturalsorter
56
53
  licenses: []
54
+ metadata: {}
57
55
  post_install_message:
58
56
  rdoc_options: []
59
57
  require_paths:
60
58
  - lib
61
59
  required_ruby_version: !ruby/object:Gem::Requirement
62
- none: false
63
60
  requirements:
64
61
  - - ! '>='
65
62
  - !ruby/object:Gem::Version
66
63
  version: '0'
67
64
  required_rubygems_version: !ruby/object:Gem::Requirement
68
- none: false
69
65
  requirements:
70
66
  - - ! '>='
71
67
  - !ruby/object:Gem::Version
72
68
  version: '0'
73
69
  requirements: []
74
70
  rubyforge_project: naturalsorter
75
- rubygems_version: 1.8.25
71
+ rubygems_version: 2.1.10
76
72
  signing_key:
77
- specification_version: 3
73
+ specification_version: 4
78
74
  summary: Sorting arrays in natural order
79
75
  test_files:
80
76
  - spec/naturalsorter_spec.rb