Custom ICU rulesets for collation in ruby - requires libicu
Make sure libicu is installed:
$ sudo apt-get install libicu-dev
Add this line to your application's Gemfile:
gem 'cicu'
And then execute:
$ bundle
Or install it yourself as:
$ gem install cicu
Create a ruleset
ruleset = Cicu::Ruleset.new("[normalization on] & b < a < c")
Sort an array
ary = %w( a b c ba bb bc )
sorted_ary = ruleset.sort_by { |el| ruleset.sort_key(el) }
# => "["b", "bb", "ba", "bc", "a", "c"]"
Get the sort key for a string
ruleset.sort_key("abc")
# => "*\x04)*\x05\x01\a\x01\a"
You can store sort keys in a database column to use them in ORDER BY
queries. Make sure to use a column type that supports binary strings (e.g. MySQLs VARBINARY).
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request