class TwitterCldr::Formatters::ListFormatter
Attributes
locale[RW]
Public Class Methods
new(locale = TwitterCldr.locale)
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 12 def initialize(locale = TwitterCldr.locale) @locale = TwitterCldr.convert_locale(locale) end
Public Instance Methods
format(list, type = :default)
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 16 def format(list, type = :default) if res = resource_for_type(type) if res.include?(:"#{list.size}") compose(res[:"#{list.size}"], list) else compose_list(list, res) end end end
types()
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 26 def types resource.keys end
Protected Instance Methods
compose(format, elements)
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 46 def compose(format, elements) elements.compact! if elements.size > 1 result = format.dup result.gsub!(/\{(\d+)\}/) { $1 } # unfortunately "{" and "}" are weak types - must replace if TwitterCldr::Shared::Languages.is_rtl?(@locale) result = result.localize.to_reordered_s(direction: :RTL) end result.gsub!(/(\d)/) { elements[$1.to_i] } result else elements[0] || "" end end
compose_list(list, res)
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 32 def compose_list(list, res) result = compose(res[:end] || res[:middle] || "", [list[-2], list[-1]]) # Ruby ranges don't support subtraction for some reason (eg. -3..-5). # Instead, we use a positive counter and negate it on array access. (3..list.size).each do |i| format_sym = i == list.size ? :start : :middle format_sym = :middle unless res.include?(format_sym) result = compose(res[format_sym] || "", [list[-i], result]) end result end
resource()
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 74 def resource @resource ||= TwitterCldr.get_locale_resource(@locale, :lists)[@locale][:lists] end
resource_for_type(type)
click to toggle source
# File lib/twitter_cldr/formatters/list_formatter.rb, line 64 def resource_for_type(type) loop do if resource[type].is_a?(Symbol) type = resource[:type].to_s.split('.').last else break resource[type] end end end