johnnyshields / naturalsort

NaturalSort is a simple library which implements a natural, human-friendly alphanumeric sort in Ruby.
MIT License
8 stars 4 forks source link

NaturalSort

NaturalSort is a simple library which implements a natural, human-friendly alphanumeric sort in Ruby.

Examples

   %w[a1 a11 a12 a2 a21].natural_sort #=> %w[a1 a2 a11 a12 a21]
   %w[a b c A B C].natural_sort       #=> %w[A a B b C c]
   %w[x__2 x_1].natural_sort          #=> %w[x_1 x__2]
   %w[x2-y08 x2-g8 x2-y7 x8-y8].natural_sort   #=> %w[x2-g8 x2-y7 x2-y08 x8-y8]
   %w[x02-y08 x02-g8 x2-y7 x8-y8].natural_sort #=> %w[x02-g8 x2-y7 x02-y08 x8-y8]

Features

Install

With Bundler

In your Gemfile:

gem 'naturalsort'

or to optionally extend Ruby native objects:

gem 'naturalsort', require: 'natural_sort_kernel'

From Command Line

$ gem install naturalsort

Usage

Extend Ruby native enumerable objects

require 'natural_sort_kernel' adds natural_sort methods to all native Ruby enumerable objects (Array, Hash, etc...)

   require 'natural_sort_kernel'

   %w[a b c A B C].natural_sort

Use as a module function

   require 'natural_sort'  # unless using Bundler

   NaturalSort.sort %w[a b c d A B C D]

Use comparator function as a standalone

Adds natural_sort methods to Ruby native enumerable objects (Array, Hash, etc...)

   person_1 = Person.new('Moe')
   person_2 = Person.new('Larry')
   person_3 = Person.new('Curly')

   [person_1, person_2, person_3].sort{|a,b| NaturalSort.comparator(a.name, b.name)}  #=> [person_3, person_2, person_1]

   %w[a b c A B C].natural_sort

Include into your own objects

Can be used to add #natural_sort method to on any enumerable object or any object which implements #to_a

   class TodoList < Array
     include NaturalSort
   end

   todo_list = TodoList.new
   todo_list << 'Wash car'
   todo_list << 'Water plants'
   todo_list << 'Feed dog'

   todo_list.natural_sort #=> ['Feed dog', 'Wash car', 'Water plants']

Authors

Contributing

Fork -> Patch -> Spec -> Push -> Pull Request

Related Links

Links related to the natural sorting problem:

License

Copyright (c) 2007 Benjamin Francisoud

Licensed under the MIT License. Refer to LICENSE for details.