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.
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module SortAuthority
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -5,4 +5,9 @@ describe 'SortAuthority Benchmark' do
5
5
  ary = ['x1'] * n
6
6
  ary.natural_sort
7
7
  end
8
+
9
+ bench_performance_linear '#natural_sort_by' do |n|
10
+ ary = [OpenStruct.new(name: 'x1')] * n
11
+ ary.natural_sort_by(&:name)
12
+ end
8
13
  end
@@ -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.1
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-08-02 00:00:00.000000000 Z
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: 1.8.23
98
+ rubygems_version: 2.0.14
113
99
  signing_key:
114
- specification_version: 3
100
+ specification_version: 4
115
101
  summary: Natural order string comparison
116
102
  test_files: []