Class: TwitterCldr::Collation::Collator
- Inherits:
-
Object
- Object
- TwitterCldr::Collation::Collator
- Defined in:
- lib/twitter_cldr/collation/collator.rb
Overview
Collator uses fractional collation elements table form CLDR to generate sort keys for Unicode strings as well as compare and sort such strings by generated sort keys.
Constant Summary collapse
- FRACTIONAL_UCA_SHORT_RESOURCE =
'collation/FractionalUCA_SHORT.txt'
Instance Attribute Summary collapse
-
#locale ⇒ Object
Returns the value of attribute locale.
Class Method Summary collapse
-
.default_fce_trie ⇒ Object
Loads and memoizes the default Fractional Collation Elements trie.
- .tailored_fce_trie(locale) ⇒ Object
Instance Method Summary collapse
- #compare(string_a, string_b) ⇒ Object
- #get_collation_elements(string_or_code_points) ⇒ Object
- #get_sort_key(string_or_code_points) ⇒ Object
-
#initialize(locale = nil) ⇒ Collator
constructor
A new instance of Collator.
- #sort(strings) ⇒ Object
- #sort!(strings) ⇒ Object
Constructor Details
#initialize(locale = nil) ⇒ Collator
Returns a new instance of Collator.
18 19 20 21 |
# File 'lib/twitter_cldr/collation/collator.rb', line 18 def initialize(locale = nil) @locale = TwitterCldr.convert_locale(locale) if locale @trie = load_trie end |
Instance Attribute Details
#locale ⇒ Object
Returns the value of attribute locale.
16 17 18 |
# File 'lib/twitter_cldr/collation/collator.rb', line 16 def locale @locale end |
Class Method Details
.default_fce_trie ⇒ Object
Loads and memoizes the default Fractional Collation Elements trie.
138 139 140 |
# File 'lib/twitter_cldr/collation/collator.rb', line 138 def default_fce_trie @default_fce_trie ||= TwitterCldr::Collation::TrieBuilder.load_trie(FRACTIONAL_UCA_SHORT_RESOURCE).lock end |
.tailored_fce_trie(locale) ⇒ Object
142 143 144 |
# File 'lib/twitter_cldr/collation/collator.rb', line 142 def tailored_fce_trie(locale) tailored_fce_tries_cache[locale] end |
Instance Method Details
#compare(string_a, string_b) ⇒ Object
32 33 34 |
# File 'lib/twitter_cldr/collation/collator.rb', line 32 def compare(string_a, string_b) string_a == string_b ? 0 : get_sort_key(string_a) <=> get_sort_key(string_b) end |
#get_collation_elements(string_or_code_points) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/twitter_cldr/collation/collator.rb', line 40 def get_collation_elements(string_or_code_points) integer_code_points = get_normalized_code_points(string_or_code_points) result = [] result.concat(code_point_collation_elements(integer_code_points)) until integer_code_points.empty? result end |
#get_sort_key(string_or_code_points) ⇒ Object
36 37 38 |
# File 'lib/twitter_cldr/collation/collator.rb', line 36 def get_sort_key(string_or_code_points) TwitterCldr::Collation::SortKeyBuilder.build(get_collation_elements(string_or_code_points)) end |
#sort(strings) ⇒ Object
23 24 25 |
# File 'lib/twitter_cldr/collation/collator.rb', line 23 def sort(strings) strings.map{ |s| [s, get_sort_key(s)] }.sort{ |a, b| a[1] <=> b[1] }.map(&:first) end |
#sort!(strings) ⇒ Object
27 28 29 30 |
# File 'lib/twitter_cldr/collation/collator.rb', line 27 def sort!(strings) sort_keys = Hash.new { |hash, string| hash[string] = get_sort_key(string) } strings.replace(strings.sort_by { |s| sort_keys[s] }) end |