naturalsort 1.2.0 → 1.3.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 +5 -13
- data/CHANGELOG.md +7 -0
- data/README.md +10 -19
- data/lib/natural_sort/base.rb +2 -0
- data/lib/natural_sort/engine.rb +3 -1
- data/lib/natural_sort/kernel.rb +1 -8
- data/lib/natural_sort/version.rb +3 -1
- data/lib/natural_sort.rb +2 -0
- data/lib/natural_sort_kernel.rb +1 -0
- metadata +18 -33
- data/.gitignore +0 -18
- data/.travis.yml +0 -8
- data/Gemfile +0 -3
- data/Rakefile +0 -13
- data/naturalsort.gemspec +0 -22
- data/test/test_helper.rb +0 -36
- data/test/test_natural_sort.rb +0 -55
- data/test/test_natural_sort_alone.rb +0 -17
- data/test/test_natural_sort_kernel.rb +0 -110
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
NWQzNzM1ODExZmQ5MDkzYzVkODZlZWQ5N2FiNjhmNDU5N2I2Yjc3Yg==
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 587a1c0cf0b42077845643ce2ad013bead1f21bb57418446bf222195385dab37
|
|
4
|
+
data.tar.gz: 9cc750189f4fc09d05e2c660fa1e6cfc25a4c098d5c9517880766e72e3e9b1a3
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
YWI0MGU1ODYzNDhmOTIzMDc0N2E3YWFlNDZiNDIxMmYyYjI0MTc2YmNjMWU0
|
|
11
|
-
ZWQzMDMzMjA5YzkxOGI1NmI1YjY4ZTExZDQ3MDg1Mzg4MjU3NzI=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
MWFmMmNhZmIxZjY2ZGNhODVkOTZiMzU2Y2I4NGM4NmVmNjM4ZGM5OTQ0ZDY3
|
|
14
|
-
Zjg1YTZlZmIxMWJjNjM3YTBhMTkxYWUwMzMxOGIzZTg3ZjJjNTdjNzAxYjUy
|
|
15
|
-
ZWY1MWM4OTExNzFiOTJlMzJhOWQyZDQ3ZTIzYmMwNTgzZTQzZjY=
|
|
6
|
+
metadata.gz: c24a24d6dac5e791157df9c868aebcfd1b8134480b197bd66a14536c9d14a2ae5174d22852346ab1c2c8c5938ace451913fc5c37d7c7af4b5ed613db1f740292
|
|
7
|
+
data.tar.gz: 0fb932df47946a2799e3defaeae455ffcf72dcc08b66f6589dbcb62c0b656b6990c822b4d05f0014853f0d2a642f31469172d506951053ec8b030570230ec604
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.0 - 2024-10-20
|
|
4
|
+
|
|
5
|
+
* Remove `NaturalSort::Kernel` module.
|
|
6
|
+
* Drop support for Ruby 2.7 and prior.
|
|
7
|
+
* Add Github Actions and remove Travis CI.
|
|
8
|
+
* Fixes issue where blank string breaks sorting.
|
|
9
|
+
|
|
3
10
|
## 1.2.0 - 2013-10-10
|
|
4
11
|
|
|
5
12
|
* DEPRECATION: deprecate `NaturalSort.naturalsort` and replace with `NaturalSort.sort`
|
data/README.md
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
# NaturalSort
|
|
2
2
|
|
|
3
|
-
[](http://travis-ci.org/johnnyshields/naturalsort)
|
|
4
|
-
[](https://codeclimate.com/github/johnnyshields/naturalsort)
|
|
5
|
-
|
|
6
3
|
NaturalSort is a simple library which implements a natural, human-friendly alphanumeric sort in Ruby.
|
|
7
4
|
|
|
8
|
-
#### Fork from RubyForge-hosted NaturalSort gem
|
|
9
|
-
|
|
10
|
-
This Github repo `johnyshields/naturalsort` is an update of the Benjamin Francisoud's original NaturalSort gem,
|
|
11
|
-
hosted on RubyForge at http://rubyforge.org/projects/naturalsort. It has been forked from version 1.1.1
|
|
12
|
-
which was released on 2010-07-21. The first new release from this Github repo is version 1.2.0.
|
|
13
|
-
|
|
14
5
|
## Examples
|
|
15
6
|
|
|
16
7
|
```ruby
|
|
17
|
-
%w
|
|
18
|
-
%w
|
|
19
|
-
%w
|
|
20
|
-
%w
|
|
21
|
-
%w
|
|
8
|
+
%w[a1 a11 a12 a2 a21].natural_sort #=> %w[a1 a2 a11 a12 a21]
|
|
9
|
+
%w[a b c A B C].natural_sort #=> %w[A a B b C c]
|
|
10
|
+
%w[x__2 x_1].natural_sort #=> %w[x_1 x__2]
|
|
11
|
+
%w[x2-y08 x2-g8 x2-y7 x8-y8].natural_sort #=> %w[x2-g8 x2-y7 x2-y08 x8-y8]
|
|
12
|
+
%w[x02-y08 x02-g8 x2-y7 x8-y8].natural_sort #=> %w[x02-g8 x2-y7 x02-y08 x8-y8]
|
|
22
13
|
```
|
|
23
14
|
|
|
24
15
|
## Features
|
|
@@ -41,7 +32,7 @@ gem 'naturalsort'
|
|
|
41
32
|
or to optionally extend Ruby native objects:
|
|
42
33
|
|
|
43
34
|
```ruby
|
|
44
|
-
gem 'naturalsort', :
|
|
35
|
+
gem 'naturalsort', require: 'natural_sort_kernel'
|
|
45
36
|
```
|
|
46
37
|
|
|
47
38
|
#### From Command Line
|
|
@@ -59,7 +50,7 @@ $ gem install naturalsort
|
|
|
59
50
|
```ruby
|
|
60
51
|
require 'natural_sort_kernel'
|
|
61
52
|
|
|
62
|
-
|
|
53
|
+
%w[a b c A B C].natural_sort
|
|
63
54
|
```
|
|
64
55
|
|
|
65
56
|
#### Use as a module function
|
|
@@ -67,7 +58,7 @@ $ gem install naturalsort
|
|
|
67
58
|
```ruby
|
|
68
59
|
require 'natural_sort' # unless using Bundler
|
|
69
60
|
|
|
70
|
-
|
|
61
|
+
NaturalSort.sort %w[a b c d A B C D]
|
|
71
62
|
```
|
|
72
63
|
|
|
73
64
|
#### Use comparator function as a standalone
|
|
@@ -81,7 +72,7 @@ Adds `natural_sort` methods to Ruby native enumerable objects (Array, Hash, etc.
|
|
|
81
72
|
|
|
82
73
|
[person_1, person_2, person_3].sort{|a,b| NaturalSort.comparator(a.name, b.name)} #=> [person_3, person_2, person_1]
|
|
83
74
|
|
|
84
|
-
|
|
75
|
+
%w[a b c A B C].natural_sort
|
|
85
76
|
```
|
|
86
77
|
|
|
87
78
|
#### Include into your own objects
|
|
@@ -98,7 +89,7 @@ Can be used to add `#natural_sort` method to on any enumerable object or any obj
|
|
|
98
89
|
todo_list << 'Water plants'
|
|
99
90
|
todo_list << 'Feed dog'
|
|
100
91
|
|
|
101
|
-
todo_list.natural_sort
|
|
92
|
+
todo_list.natural_sort #=> ['Feed dog', 'Wash car', 'Water plants']
|
|
102
93
|
```
|
|
103
94
|
|
|
104
95
|
## Authors
|
data/lib/natural_sort/base.rb
CHANGED
data/lib/natural_sort/engine.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Internal: Singleton module which sorts elements in a natural,
|
|
2
4
|
# human-friendly alphanumeric order.
|
|
3
5
|
module NaturalSort::Engine
|
|
@@ -51,7 +53,7 @@ module NaturalSort::Engine
|
|
|
51
53
|
ma, mb = multireg(REGEXP,sa), multireg(REGEXP,sb)
|
|
52
54
|
it = 0
|
|
53
55
|
equal = 0
|
|
54
|
-
ret = [
|
|
56
|
+
ret = [sa, sb]
|
|
55
57
|
while (it < [ma.size,mb.size].min) and (equal==0)
|
|
56
58
|
if (ma[it] and mb[it]) and (ma[it][1] and mb[it][1]) and (NUMERIC.match ma[it][0] and NUMERIC.match mb[it][0])
|
|
57
59
|
l = [ma[it][2].size,mb[it][2].size].max
|
data/lib/natural_sort/kernel.rb
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# Examples
|
|
4
|
-
#
|
|
5
|
-
# require 'natural_sort_kernel'
|
|
6
|
-
# defined?(NaturalSort::Kernel) #=> true
|
|
7
|
-
# ['a', 'b', 'A', 'B'].natural_sort #=> ['A', 'a', 'B', 'b']
|
|
8
|
-
module NaturalSort::Kernel; end
|
|
1
|
+
# frozen_string_literal: true
|
|
9
2
|
|
|
10
3
|
module Enumerable
|
|
11
4
|
# Add #natural_sort method to Enumerable module.
|
data/lib/natural_sort/version.rb
CHANGED
data/lib/natural_sort.rb
CHANGED
data/lib/natural_sort_kernel.rb
CHANGED
metadata
CHANGED
|
@@ -1,96 +1,81 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: naturalsort
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
8
|
-
autorequire:
|
|
7
|
+
- Johnny Shields
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-10-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: minitest
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '0'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
-
description:
|
|
42
|
-
|
|
43
|
-
email:
|
|
44
|
-
- pub.cog@gmail.com
|
|
41
|
+
description: 'Example: %w[1 2a A1 a11 A12 a2 a21 x__2 X_1].natural_sort => %w[1 2a
|
|
42
|
+
A1 a11 A12 a2 a21 x__2 X_1]'
|
|
43
|
+
email: info@tablecheck.com
|
|
45
44
|
executables: []
|
|
46
45
|
extensions: []
|
|
47
46
|
extra_rdoc_files: []
|
|
48
47
|
files:
|
|
49
|
-
- .gitignore
|
|
50
|
-
- .travis.yml
|
|
51
48
|
- CHANGELOG.md
|
|
52
|
-
- Gemfile
|
|
53
49
|
- LICENSE
|
|
54
50
|
- README.md
|
|
55
|
-
- Rakefile
|
|
56
51
|
- lib/natural_sort.rb
|
|
57
52
|
- lib/natural_sort/base.rb
|
|
58
53
|
- lib/natural_sort/engine.rb
|
|
59
54
|
- lib/natural_sort/kernel.rb
|
|
60
55
|
- lib/natural_sort/version.rb
|
|
61
56
|
- lib/natural_sort_kernel.rb
|
|
62
|
-
|
|
63
|
-
- test/test_helper.rb
|
|
64
|
-
- test/test_natural_sort.rb
|
|
65
|
-
- test/test_natural_sort_alone.rb
|
|
66
|
-
- test/test_natural_sort_kernel.rb
|
|
67
|
-
homepage: http://rubyforge.org/projects/naturalsort/
|
|
57
|
+
homepage: https://github.com/johnnyshields/naturalsort
|
|
68
58
|
licenses:
|
|
69
59
|
- MIT
|
|
70
60
|
metadata: {}
|
|
71
|
-
post_install_message:
|
|
61
|
+
post_install_message:
|
|
72
62
|
rdoc_options: []
|
|
73
63
|
require_paths:
|
|
74
64
|
- lib
|
|
75
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
66
|
requirements:
|
|
77
|
-
- -
|
|
67
|
+
- - ">="
|
|
78
68
|
- !ruby/object:Gem::Version
|
|
79
69
|
version: '0'
|
|
80
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
71
|
requirements:
|
|
82
|
-
- -
|
|
72
|
+
- - ">="
|
|
83
73
|
- !ruby/object:Gem::Version
|
|
84
74
|
version: '0'
|
|
85
75
|
requirements: []
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
signing_key:
|
|
76
|
+
rubygems_version: 3.5.11
|
|
77
|
+
signing_key:
|
|
89
78
|
specification_version: 4
|
|
90
79
|
summary: NaturalSort is a simple library which implements a natural, human-friendly
|
|
91
80
|
alphanumeric sort in Ruby
|
|
92
|
-
test_files:
|
|
93
|
-
- test/test_helper.rb
|
|
94
|
-
- test/test_natural_sort.rb
|
|
95
|
-
- test/test_natural_sort_alone.rb
|
|
96
|
-
- test/test_natural_sort_kernel.rb
|
|
81
|
+
test_files: []
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env rake
|
|
2
|
-
# -*- mode: ruby -*-
|
|
3
|
-
|
|
4
|
-
require 'rubygems'
|
|
5
|
-
require './lib/natural_sort.rb'
|
|
6
|
-
require 'rake/testtask'
|
|
7
|
-
|
|
8
|
-
task :default => :test
|
|
9
|
-
|
|
10
|
-
Rake::TestTask.new do |t|
|
|
11
|
-
t.libs << 'test'
|
|
12
|
-
t.test_files = FileList['test/**/test_*.rb']
|
|
13
|
-
end
|
data/naturalsort.gemspec
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
$:.push File.expand_path('../lib', __FILE__)
|
|
3
|
-
require 'natural_sort/version'
|
|
4
|
-
|
|
5
|
-
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name = 'naturalsort'
|
|
7
|
-
spec.version = NaturalSort::Version::VERSION
|
|
8
|
-
spec.authors = ['Benjamin Francisoud']
|
|
9
|
-
spec.email = ['pub.cog@gmail.com']
|
|
10
|
-
spec.summary = %q{NaturalSort is a simple library which implements a natural, human-friendly alphanumeric sort in Ruby}
|
|
11
|
-
spec.description = %q{Example: %w(1 2a A1 a11 A12 a2 a21 x__2 X_1).natural_sort => %w(1 2a A1 a11 A12 a2 a21 x__2 X_1)}
|
|
12
|
-
spec.homepage = 'http://rubyforge.org/projects/naturalsort/'
|
|
13
|
-
spec.license = 'MIT'
|
|
14
|
-
|
|
15
|
-
spec.files = `git ls-files`.split($/)
|
|
16
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
17
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
|
-
spec.require_paths = ['lib']
|
|
19
|
-
|
|
20
|
-
spec.add_development_dependency 'minitest'
|
|
21
|
-
spec.add_development_dependency 'rake'
|
|
22
|
-
end
|
data/test/test_helper.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
gem 'minitest'
|
|
2
|
-
require 'minitest/autorun'
|
|
3
|
-
|
|
4
|
-
module TestHelper
|
|
5
|
-
SimpleUnsorted = %w(a b c d A B C D)
|
|
6
|
-
SimpleSorted = %w(A a B b C c D d)
|
|
7
|
-
|
|
8
|
-
ComplexUnsorted = ['1000X Radonius Maximus', '10X Radonius', '200X Radonius', '20X Radonius',
|
|
9
|
-
'20X Radonius Prime', '30X Radonius', '40X Radonius', 'Allegia 50 Clasteron',
|
|
10
|
-
'Allegia 500 Clasteron', 'Allegia 51 Clasteron', 'Allegia 51B Clasteron', 'Allegia 52 Clasteron',
|
|
11
|
-
'Allegia 60 Clasteron', 'Alpha 100', 'Alpha 2', 'Alpha 200', 'Alpha 2A', 'Alpha 2A-8000',
|
|
12
|
-
'Alpha 2A-900', 'Callisto Morphamax', 'Callisto Morphamax 500', 'Callisto Morphamax 5000',
|
|
13
|
-
'Callisto Morphamax 600', 'Callisto Morphamax 700', 'Callisto Morphamax 7000',
|
|
14
|
-
'Callisto Morphamax 7000 SE', 'Callisto Morphamax 7000 SE2', 'QRS-60 Intrinsia Machine',
|
|
15
|
-
'QRS-60F Intrinsia Machine', 'QRS-62 Intrinsia Machine', 'QRS-62F Intrinsia Machine',
|
|
16
|
-
'Xiph Xlater 10000', 'Xiph Xlater 2000', 'Xiph Xlater 300', 'Xiph Xlater 40',
|
|
17
|
-
'Xiph Xlater 5', 'Xiph Xlater 50', 'Xiph Xlater 500', 'Xiph Xlater 5000', 'Xiph Xlater 58']
|
|
18
|
-
|
|
19
|
-
ComplexSorted = ['10X Radonius', '20X Radonius', '20X Radonius Prime', '30X Radonius',
|
|
20
|
-
'40X Radonius', '200X Radonius', '1000X Radonius Maximus', 'Allegia 50 Clasteron',
|
|
21
|
-
'Allegia 51 Clasteron', 'Allegia 51B Clasteron', 'Allegia 52 Clasteron',
|
|
22
|
-
'Allegia 60 Clasteron', 'Allegia 500 Clasteron', 'Alpha 2', 'Alpha 2A', 'Alpha 2A-900',
|
|
23
|
-
'Alpha 2A-8000', 'Alpha 100', 'Alpha 200', 'Callisto Morphamax', 'Callisto Morphamax 500',
|
|
24
|
-
'Callisto Morphamax 600', 'Callisto Morphamax 700', 'Callisto Morphamax 5000',
|
|
25
|
-
'Callisto Morphamax 7000', 'Callisto Morphamax 7000 SE', 'Callisto Morphamax 7000 SE2',
|
|
26
|
-
'QRS-60 Intrinsia Machine', 'QRS-60F Intrinsia Machine', 'QRS-62 Intrinsia Machine',
|
|
27
|
-
'QRS-62F Intrinsia Machine', 'Xiph Xlater 5', 'Xiph Xlater 40', 'Xiph Xlater 50',
|
|
28
|
-
'Xiph Xlater 58', 'Xiph Xlater 300', 'Xiph Xlater 500', 'Xiph Xlater 2000',
|
|
29
|
-
'Xiph Xlater 5000', 'Xiph Xlater 10000']
|
|
30
|
-
|
|
31
|
-
# TODO: the AlphanumUnsorted initial order below yields a failing result
|
|
32
|
-
# %w(100 101 11 A2AA A10 A999 AA1 999A 9999 A1 A2 A2A A2A1 1 1A 2 2C 9 AA99 #AB1 AB1A AB99 B1 B1A 10 10X AA2 B2 B999 Z1 Z9999)
|
|
33
|
-
|
|
34
|
-
AlphanumUnsorted = %w(1 1A 2 2C 9 10 10X 11 100 101 999A 9999 A1 A2 A2A A2A1 A2AA A10 A999 AA1 AA2 AA99 AB1 AB1A AB99 B1 B1A B2 B999 Z1 Z9999)
|
|
35
|
-
AlphanumSorted = %w(1 1A 2 2C 9 10 10X 11 100 101 999A 9999 A1 A2 A2A A2A1 A2AA A10 A999 AA1 AA2 AA99 AB1 AB1A AB99 B1 B1A B2 B999 Z1 Z9999)
|
|
36
|
-
end
|
data/test/test_natural_sort.rb
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
-
require File.dirname(__FILE__) + '/../lib/natural_sort.rb'
|
|
3
|
-
|
|
4
|
-
class MyClass
|
|
5
|
-
include NaturalSort
|
|
6
|
-
|
|
7
|
-
def initialize(array = TestHelper::SimpleUnsorted)
|
|
8
|
-
@array = array
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def to_a
|
|
12
|
-
@array
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Test without include
|
|
17
|
-
class TestNaturalSortSelf < Minitest::Test
|
|
18
|
-
def test_self
|
|
19
|
-
assert_equal TestHelper::SimpleSorted, NaturalSort.sort(TestHelper::SimpleUnsorted)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Test using include
|
|
24
|
-
class TestNaturalSort < Minitest::Test
|
|
25
|
-
include NaturalSort
|
|
26
|
-
|
|
27
|
-
def setup
|
|
28
|
-
@obj = MyClass.new
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def test_case_sensitive
|
|
32
|
-
sorted = @obj.natural_sort
|
|
33
|
-
assert_equal TestHelper::SimpleSorted, sorted
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def test_mixed
|
|
37
|
-
obj = MyClass.new %w(a1 a12 A11 a2 a10 A3 a21 A29)
|
|
38
|
-
assert_equal %w(a1 a2 A3 a10 A11 a12 a21 A29), obj.natural_sort
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_numbers
|
|
42
|
-
obj = MyClass.new %w(a1 a12 a11 a2 a10 a3 a21 a29)
|
|
43
|
-
assert_equal %w(a1 a2 a3 a10 a11 a12 a21 a29), obj.natural_sort
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def test_first_no_number
|
|
47
|
-
obj = MyClass.new %w(aaa2 aaa3 aaa4 aaa)
|
|
48
|
-
assert_equal %w(aaa aaa2 aaa3 aaa4), obj.natural_sort
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def test_number_leading_zero
|
|
52
|
-
obj = MyClass.new %w(A001 A08 A007 A003 A011 A20 A200)
|
|
53
|
-
assert_equal %w(A001 A003 A007 A08 A011 A20 A200), obj.natural_sort
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
-
require File.dirname(__FILE__) + '/../lib/natural_sort.rb'
|
|
3
|
-
|
|
4
|
-
# Test without include
|
|
5
|
-
class TestNaturalSortAlone < Minitest::Test
|
|
6
|
-
def test_simple
|
|
7
|
-
assert_equal TestHelper::SimpleSorted, NaturalSort.sort(TestHelper::SimpleUnsorted)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_complex
|
|
11
|
-
assert_equal TestHelper::ComplexSorted, NaturalSort.sort(TestHelper::ComplexUnsorted)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_alphanum
|
|
15
|
-
assert_equal TestHelper::AlphanumSorted, NaturalSort.sort(TestHelper::AlphanumUnsorted)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
-
require File.dirname(__FILE__) + '/../lib/natural_sort_kernel.rb'
|
|
3
|
-
|
|
4
|
-
class TestEnum
|
|
5
|
-
include Enumerable
|
|
6
|
-
def to_a
|
|
7
|
-
TestHelper::SimpleUnsorted
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
class TestNaturalSortKernel < Minitest::Test
|
|
12
|
-
|
|
13
|
-
def test_empty
|
|
14
|
-
assert_equal(['', ''], ['', ''].natural_sort)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_enum
|
|
18
|
-
enum = TestEnum.new
|
|
19
|
-
assert_equal TestHelper::SimpleSorted, enum.natural_sort
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_array
|
|
23
|
-
assert_equal TestHelper::SimpleSorted, TestHelper::SimpleUnsorted.natural_sort
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_range
|
|
27
|
-
expected = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
|
|
28
|
-
assert_equal expected, (1..21).natural_sort
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def test_set
|
|
32
|
-
set = Set.new TestHelper::SimpleUnsorted
|
|
33
|
-
assert_equal TestHelper::SimpleSorted, set.natural_sort
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def test_hash
|
|
37
|
-
expected = [["A", "value"], ["a", "value"], ["B", "value"], ["b", "value"],
|
|
38
|
-
["C", "value"], ["c", "value"], ["D", "value"], ["d", "value"]]
|
|
39
|
-
hash = { "a" => "value", "b" => "value", "c" => "value", "d" => "value", "A" => "value", "B" => "value", "C" => "value", "D" => "value" }
|
|
40
|
-
assert_equal expected, hash.natural_sort
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def test_identical_simple
|
|
44
|
-
assert_equal(%w(x x), %w(x x).natural_sort)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def test_identical_two_groups
|
|
48
|
-
assert_equal(%w(x1 x1), %w(x1 x1).natural_sort)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def test_ordered_simple
|
|
52
|
-
assert_equal(%w(x y), %w(x y).natural_sort)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def test_ordered_simple_start_backwards
|
|
56
|
-
assert_equal(%w(x y), %w(y x).natural_sort)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_ordered_two_groups
|
|
60
|
-
assert_equal(%w(x1 x2), %w(x1 x2).natural_sort)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def test_ordered_two_groups_start_backwards
|
|
64
|
-
assert_equal(%w(x1 x2), %w(x2 x1).natural_sort)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def test_ordered_two_groups_separated
|
|
68
|
-
assert_equal(%w(x_1 x_2), %w(x_2 x_1).natural_sort)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_ordered_two_groups_separated_different_distances
|
|
72
|
-
assert_equal(%w(x_1 x__2), %w(x__2 x_1).natural_sort)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def test_ordered_two_groups_separated_different_distances_swapped
|
|
76
|
-
assert_equal(%w(x__1 x_2), %w(x_2 x__1).natural_sort)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def test_three_groups
|
|
80
|
-
assert_equal(
|
|
81
|
-
['hello 2 world', 'hello world', 'hello world 2'],
|
|
82
|
-
['hello world', 'hello world 2', 'hello 2 world'].natural_sort
|
|
83
|
-
)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# TODO: fix test below
|
|
87
|
-
def test_decimal
|
|
88
|
-
# 1.001 < 1.002 < 1.010 < 1.02 < 1.1 < 1.3
|
|
89
|
-
# assert_equal ['1.001', '1.002', '1.010', '1.02', '1.1', '1.3'], ['1.1', '1.001', '1.002', '1.010', '1.02', '1.3'].natural_sort, "FIXME this test doesn't pass and need to be fix"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def test_multiple_string_number
|
|
93
|
-
# x2-g8 < x2-y7 < x2-y08 < x8-y8
|
|
94
|
-
assert_equal %w(x2-g8 x2-y7 x2-y08 x8-y8), %w(x2-y08 x8-y8 x2-y7 x2-g8).natural_sort
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# same as test_multiple_string_number but first number has (sometimes) leading zero
|
|
98
|
-
def test_multiple_string_number_2
|
|
99
|
-
# x2-g8 < x2-y7 < x2-y08 < x8-y8
|
|
100
|
-
assert_equal %w(x02-g8 x2-y7 x02-y08 x8-y8), %w(x02-y08 x8-y8 x2-y7 x02-g8).natural_sort
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def test_filename
|
|
104
|
-
assert_equal %w(img1.png img2.png img10.png img12.png), %w(img12.png img10.png img2.png img1.png).natural_sort
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def test_complex
|
|
108
|
-
assert_equal TestHelper::ComplexSorted, TestHelper::ComplexUnsorted.natural_sort
|
|
109
|
-
end
|
|
110
|
-
end
|