sort_authority 0.0.1 → 0.0.2
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 +7 -0
- data/lib/sort_authority.rb +10 -0
- data/lib/sort_authority/ext/enumerable.rb +4 -0
- data/lib/sort_authority/version.rb +1 -1
- data/test/benchmark_test.rb +5 -0
- data/test/ext/enumerable_test.rb +6 -0
- metadata +9 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d556ef5f273e061552cf4e2f331542fa9b82b288
|
4
|
+
data.tar.gz: 6e0745b9e07483b0894c2b5ffa7899dced390eb4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9a28f8bb7436ae2325b5ed5707c1b4e1046de12a74302975b57bf8669d78035e226d86ae3b8b33ee5749709058c6c0f42d73fd814cdb4020c74a74676c831dd2
|
7
|
+
data.tar.gz: ca1cea94c8aa65b556920649ca2efcbd77e1c2ead245eacc6ac362d8ea1cc5f53ed79d7dd5bb8a03286686ab3c00f9900f38f2a57fa0d44a8c4a397ed7e59f32
|
data/lib/sort_authority.rb
CHANGED
@@ -5,4 +5,14 @@ module SortAuthority
|
|
5
5
|
extend FFI::Library
|
6
6
|
ffi_lib FFI::Compiler::Loader.find('strnatcmp')
|
7
7
|
attach_function :strnatcmp, [:pointer, :pointer], :int
|
8
|
+
|
9
|
+
class StringExpected < StandardError
|
10
|
+
def initialize(value)
|
11
|
+
super("#{value.inspect} is not a string.")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.ensure_strings(enum)
|
16
|
+
enum.each { |val| raise StringExpected, val unless val.instance_of?(String) }
|
17
|
+
end
|
8
18
|
end
|
@@ -1,17 +1,21 @@
|
|
1
1
|
module Enumerable
|
2
2
|
def natural_sort
|
3
|
+
SortAuthority.ensure_strings(self)
|
3
4
|
sort {|a, b| SortAuthority.strnatcmp(a, b) }
|
4
5
|
end
|
5
6
|
|
6
7
|
def natural_sort!
|
8
|
+
SortAuthority.ensure_strings(self)
|
7
9
|
sort! {|a, b| SortAuthority.strnatcmp(a, b) }
|
8
10
|
end
|
9
11
|
|
10
12
|
def natural_sort_by(&block)
|
13
|
+
SortAuthority.ensure_strings(self.map {|val| block.call(val) })
|
11
14
|
sort {|a, b| SortAuthority.strnatcmp(block.call(a), block.call(b)) }
|
12
15
|
end
|
13
16
|
|
14
17
|
def natural_sort_by!(&block)
|
18
|
+
SortAuthority.ensure_strings(self.map {|val| block.call(val) })
|
15
19
|
sort! {|a, b| SortAuthority.strnatcmp(block.call(a), block.call(b)) }
|
16
20
|
end
|
17
21
|
end
|
data/test/benchmark_test.rb
CHANGED
data/test/ext/enumerable_test.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
describe Enumerable do
|
4
|
+
it 'raises an exception for nil values' do
|
5
|
+
assert_raises(SortAuthority::StringExpected) do
|
6
|
+
[nil, 'a'].natural_sort
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
it 'natural sorts' do
|
5
11
|
assert_equal ['9m', '10m'], ['10m', '9m'].natural_sort
|
6
12
|
end
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sort_authority
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Nathan Fixler
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: ffi-compiler
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: minitest
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -85,32 +78,25 @@ files:
|
|
85
78
|
homepage: https://rubygems.org/gems/sort_authority
|
86
79
|
licenses:
|
87
80
|
- MIT
|
81
|
+
metadata: {}
|
88
82
|
post_install_message:
|
89
83
|
rdoc_options: []
|
90
84
|
require_paths:
|
91
85
|
- lib
|
92
86
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
87
|
requirements:
|
95
|
-
- -
|
88
|
+
- - '>='
|
96
89
|
- !ruby/object:Gem::Version
|
97
90
|
version: '0'
|
98
|
-
segments:
|
99
|
-
- 0
|
100
|
-
hash: -215718808201645381
|
101
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
-
none: false
|
103
92
|
requirements:
|
104
|
-
- -
|
93
|
+
- - '>='
|
105
94
|
- !ruby/object:Gem::Version
|
106
95
|
version: '0'
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
hash: -215718808201645381
|
110
96
|
requirements: []
|
111
97
|
rubyforge_project:
|
112
|
-
rubygems_version:
|
98
|
+
rubygems_version: 2.0.14
|
113
99
|
signing_key:
|
114
|
-
specification_version:
|
100
|
+
specification_version: 4
|
115
101
|
summary: Natural order string comparison
|
116
102
|
test_files: []
|