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.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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 = tailoring_options
  @trie    = load_trie
end

Instance Attribute Details

#localeObject

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_trieObject

Loads and memoizes the default fractional collation elements trie.



146
147
148
# File 'lib/twitter_cldr/collation/collator.rb', line 146

def default_trie
  @default_trie ||= TwitterCldr::Collation::TrieLoader.load_default_trie.lock
end

.tailored_trie(locale) ⇒ Object



150
151
152
# File 'lib/twitter_cldr/collation/collator.rb', line 150

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



41
42
43
44
45
46
47
# File 'lib/twitter_cldr/collation/collator.rb', line 41

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, method_options = {}) ⇒ Object

Second arg options, supports an option :maximum_level, to pass on to SortKeyBuilder :maximum_level.



37
38
39
# File 'lib/twitter_cldr/collation/collator.rb', line 37

def get_sort_key(string_or_code_points, method_options = {})
  TwitterCldr::Collation::SortKeyBuilder.build(get_collation_elements(string_or_code_points), :case_first => @options[:case_first], :maximum_level => method_options[:maximum_level])
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