This library implements alphabetical sorting according to given alphabet scheme. Currently, only Czech alphabet is included, but it is super-easy to create a new one.
Setup
Install the gem:
gem install sort-by-alphabet
Or require it into Rails:
gem require "sort-by-alphabet"
Requirements
Support of mb_chars
, i.e. ActiveSupport in practice.
Usage
Classical sort puts accented chars after normal:
%w{nazdar ahoj čau}.sort # => %w{ahoj nazdar čau}
sort_by_alphabet
does a better job:
%w{nazdar ahoj čau}.sort_by_alphabet(CzechAlphabet) # => %w{ahoj čau nazdar}
sort_by_alphabet
can take a block which acts similarly as that in sort_by
:
Something.all.sort_by_alphabet(CzechAlphabet) {|o| o.title}
You can also make a class alphabetically comparable, enabling sorting:
class Something comparable_by_alphabet(CzechAlphabet) end
a = Something.new b = Something.new c = Something.new
# the following comparisons will be using to_s and lexical order given by Czech alphabet
a <=> b
[a, b, c].sort
or use a block, e.g. for case insensitivity:
class SomethingElse
comparable_by_alphabet(CzechAlphabet) {|obj| obj.mb_chars.downcase}
end