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.
Instance Attribute Summary collapse
-
#locale ⇒ Object
Returns the value of attribute locale.
Class Method Summary collapse
-
.default_trie ⇒ Object
Loads and memoizes the default fractional collation elements trie.
- .tailored_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.
16 17 18 19 20 |
# File 'lib/twitter_cldr/collation/collator.rb', line 16 def initialize(locale = nil) @locale = TwitterCldr.convert_locale(locale) if locale @options = @trie = load_trie end |
Instance Attribute Details
#locale ⇒ Object
Returns the value of attribute locale.
14 15 16 |
# File 'lib/twitter_cldr/collation/collator.rb', line 14 def locale @locale end |
Class Method Details
.default_trie ⇒ Object
Loads and memoizes the default fractional collation elements trie.
135 136 137 |
# File 'lib/twitter_cldr/collation/collator.rb', line 135 def default_trie @default_trie ||= TwitterCldr::Collation::TrieLoader.load_default_trie.lock end |
.tailored_trie(locale) ⇒ Object
139 140 141 |
# File 'lib/twitter_cldr/collation/collator.rb', line 139 def tailored_trie(locale) tailored_tries_cache[locale] end |
Instance Method Details
#compare(string_a, string_b) ⇒ Object
31 32 33 |
# File 'lib/twitter_cldr/collation/collator.rb', line 31 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
39 40 41 42 43 44 45 |
# File 'lib/twitter_cldr/collation/collator.rb', line 39 def get_collation_elements(string_or_code_points) code_points = get_normalized_code_points(string_or_code_points) result = [] result.concat(code_point_collation_elements(code_points)) until code_points.empty? result end |
#get_sort_key(string_or_code_points) ⇒ Object
35 36 37 |
# File 'lib/twitter_cldr/collation/collator.rb', line 35 def get_sort_key(string_or_code_points) TwitterCldr::Collation::SortKeyBuilder.build(get_collation_elements(string_or_code_points), @options[:case_first]) end |
#sort(strings) ⇒ Object
22 23 24 |
# File 'lib/twitter_cldr/collation/collator.rb', line 22 def sort(strings) strings.map{ |s| [s, get_sort_key(s)] }.sort{ |a, b| a[1] <=> b[1] }.map(&:first) end |
#sort!(strings) ⇒ Object
26 27 28 29 |
# File 'lib/twitter_cldr/collation/collator.rb', line 26 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 |