Class: TwitterCldr::Collation::Collator

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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

#localeObject

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_trieObject

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