sort_authority 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|