naturally 1.0.3 → 1.0.4

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 779c19dc2b8a8008edc6044aea5dd581d04fd231
4
+ data.tar.gz: 51fc1ee3a6591b169e3823d38c26df50bb58c7ab
5
+ SHA512:
6
+ metadata.gz: 49b59c6d73db65805dc0e3d86fe7d8508e889d4634d0c9604e7fba9422e552c7dca242cdf34b0f8a534d912a3d1406a1d30d2d0ad6c7275c224871efc0087d85
7
+ data.tar.gz: 5d996f19d784d877090477bc82e340035506f2f9dbebf4acc03156f43e84740459e9c2b8cc7602f9ea8e866191d229a3acee3b887a1b4456b54560df207ad3f3
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
6
+ - "2.0.0"
data/Gemfile CHANGED
@@ -1,4 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ group :test do
4
+ gem 'rspec', '~> 2.0'
5
+ gem 'rake', '~> 10.0'
6
+ end
7
+
3
8
  # Specify your gem's dependencies in naturally.gemspec
4
9
  gemspec
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Naturally
2
+ [![Build Status](https://travis-ci.org/dogweather/naturally.png)](https://travis-ci.org/dogweather/naturally)
2
3
 
3
- Natural sorting with support for legal document numbering.
4
- See [Counting to 10 in Californian](http://www.weblaws.org/blog/2012/08/counting-from-1-to-10-in-californian/)
5
- for the motivations to make this library.
4
+ Natural sorting with added support for legal document numbering.
5
+ See [Sorting for Humans : Natural Sort Order](http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html) and [Counting to 10 in Californian](http://www.weblaws.org/blog/2012/08/counting-from-1-to-10-in-californian/)
6
+ for the motivations to make this library. This is also the kind of ordering you want if you're sorting version numbers.
6
7
 
7
8
  The core of the search is [from here](https://github.com/ahoward/version_sorter). I then made
8
9
  several changes to handle the particular types of numbers that come up in statutes, such
@@ -19,7 +20,7 @@ And then execute:
19
20
 
20
21
  $ bundle
21
22
 
22
- Or install it yourself as:
23
+ Or install it outside of bundler with:
23
24
 
24
25
  $ gem install naturally
25
26
 
@@ -27,28 +28,41 @@ Or install it yourself as:
27
28
  ## Usage
28
29
 
29
30
  ```Ruby
31
+ require 'naturally'
32
+
30
33
  # Sort a simple array of strings
31
34
  Naturally.sort(["1.1", "1.10", "1.2"]) # => ["1.1", "1.2", "1.10"]
35
+ ```
36
+
37
+ Usually, however, the library is used to sort an array of some kind of
38
+ object:
32
39
 
40
+
41
+ ```Ruby
33
42
  # Sort an array of objects by one attribute
34
43
  Thing = Struct.new(:number, :name)
35
44
  objects = [
36
- Thing.new('1.1', 'color'),
37
- Thing.new('1.2', 'size'),
38
- Thing.new('1.1.1', 'opacity'),
39
- Thing.new('1.1.2', 'lightness'),
40
- Thing.new('1.10', 'hardness'),
41
- Thing.new('2.1', 'weight'),
42
- Thing.new('1.3', 'shape')
45
+ Thing.new('1', 'USA'),
46
+ Thing.new('2', 'Canada'),
47
+ Thing.new('1.1', 'Oregon'),
48
+ Thing.new('1.2', 'Washington'),
49
+ Thing.new('1.1.1', 'Portland'),
50
+ Thing.new('1.10', 'Texas'),
51
+ Thing.new('2.1', 'British Columbia'),
52
+ Thing.new('1.3', 'California'),
53
+ Thing.new('1.1.2', 'Eugene')
43
54
  ]
44
55
  objects.sort_by{ |o| Naturally.normalize(o.number) }
45
- # => [#<struct Thing number="1.1", name="color">,
46
- #<struct Thing number="1.1.1", name="opacity">,
47
- #<struct Thing number="1.1.2", name="lightness">,
48
- #<struct Thing number="1.2", name="size">,
49
- #<struct Thing number="1.3", name="shape">,
50
- #<struct Thing number="1.10", name="hardness">,
51
- #<struct Thing number="2.1", name="weight">]
56
+
57
+ # Results in:
58
+ [<struct Thing number="1.1", name="Oregon">,
59
+ <struct Thing number="1.1.1", name="Portland">,
60
+ <struct Thing number="1.1.2", name="Eugene">,
61
+ <struct Thing number="1.2", name="Washington">,
62
+ <struct Thing number="1.3", name="California">,
63
+ <struct Thing number="1.10", name="Texas">,
64
+ <struct Thing number="2", name="Canada">,
65
+ <struct Thing number="2.1", name="British Columbia">]
52
66
  ```
53
67
 
54
68
  See [the spec for more examples](https://github.com/dogweather/naturally/blob/master/spec/naturally_spec.rb).
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+
7
+ task :default => :spec
data/lib/naturally.rb CHANGED
@@ -9,10 +9,10 @@ module Naturally
9
9
  return an_array.sort_by{ |x| normalize(x) }
10
10
  end
11
11
 
12
- # Convert the given number into and object that can be sorted
12
+ # Convert the given number into an object that can be sorted
13
13
  # naturally.
14
14
  # @param [String] number the number in complex form such as 1.2a.3.
15
- # @return [Array<NumberElement>] an array of NumberElements which are
15
+ # @return [Array<NumberElement>] an array of NumberElements which is
16
16
  # able to be sorted naturally via a normal 'sort'.
17
17
  def self.normalize(number)
18
18
  number.to_s.scan(%r/[0-9a-zA-Z]+/o).map{|i| NumberElement.new(i)}
@@ -32,7 +32,7 @@ module Naturally
32
32
  def <=>(other)
33
33
  if pure_integer? && other.pure_integer?
34
34
  return @val.to_i <=> other.val.to_i
35
- elsif mixed? || other.mixed?
35
+ elsif numbers_with_letters? || other.numbers_with_letters?
36
36
  return simple_normalize(@val) <=> simple_normalize(other.val)
37
37
  else
38
38
  return @val <=> other.val
@@ -43,7 +43,7 @@ module Naturally
43
43
  @val =~ /^\d+$/
44
44
  end
45
45
 
46
- def mixed?
46
+ def numbers_with_letters?
47
47
  val =~ /^\d+[a-zA-Z]+$/
48
48
  end
49
49
 
@@ -1,3 +1,3 @@
1
1
  module Naturally
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: naturally
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
5
- prerelease:
4
+ version: 1.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Robb Shecter
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-15 00:00:00.000000000 Z
11
+ date: 2013-09-19 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Natural Sorting with support for legal numbering
15
14
  email:
@@ -19,6 +18,7 @@ extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
20
  - .gitignore
21
+ - .travis.yml
22
22
  - Gemfile
23
23
  - LICENSE.txt
24
24
  - README.md
@@ -29,27 +29,26 @@ files:
29
29
  - spec/naturally_spec.rb
30
30
  homepage: http://github.com/dogweather/naturally
31
31
  licenses: []
32
+ metadata: {}
32
33
  post_install_message:
33
34
  rdoc_options: []
34
35
  require_paths:
35
36
  - lib
36
37
  required_ruby_version: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - ! '>='
39
+ - - '>='
39
40
  - !ruby/object:Gem::Version
40
41
  version: '0'
41
- none: false
42
42
  required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ! '>='
44
+ - - '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
- none: false
48
47
  requirements: []
49
48
  rubyforge_project:
50
- rubygems_version: 1.8.24
49
+ rubygems_version: 2.1.2
51
50
  signing_key:
52
- specification_version: 3
51
+ specification_version: 4
53
52
  summary: Sorts numbers according to the way people are used to seeing them.
54
53
  test_files:
55
54
  - spec/naturally_spec.rb