0.02
Low commit activity in last 3 years
There's a lot of open issues
A long-lived project that still receives updates
Example: %w[1 2a A1 a11 A12 a2 a21 x__2 X_1].natural_sort => %w[1 2a A1 a11 A12 a2 a21 x__2 X_1]
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
 Project Readme

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

  • Sort case insensitive
  • Sort underscore insensitive
  • Sort filename matching patterns
  • Sort mixed alpha and numeric "abc1", "abc12", "abc2", "a1b2" in correct order

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.