# encoding: UTF-8 # Copyright 2012 Twitter, Inc # http://www.apache.org/licenses/LICENSE-2.0 module TwitterCldr module DataReaders class CalendarDataReader < DataReader DEFAULT_TYPE = :medium TYPE_PATHS = { :full => [:full, :pattern], :long => [:long, :pattern], :medium => [:medium, :pattern], :short => [:short, :pattern], :additional => [:additional_formats] } class << self def types TYPE_PATHS.keys end end attr_reader :calendar_type, :type, :additional_format def initialize(locale, options = {}) super(locale) @calendar_type = options[:calendar_type] || TwitterCldr::DEFAULT_CALENDAR_TYPE @type = options[:type] || type || :default @type = DEFAULT_TYPE if type == :default @additional_format = options[:additional_format] end def pattern if type == :additional additional_format_selector.find_closest(additional_format) else traverse(path_for(type, calendar_type) + TYPE_PATHS[type]) end end def calendar @calendar ||= TwitterCldr::Shared::Calendar.new(locale) end def additional_format_selector @format_selector ||= AdditionalDateFormatSelector.new( traverse([:calendars, calendar_type, :additional_formats]) ) end protected def path_for(type, calendar_type) raise NotImplementedError end def resource @resource ||= begin resource = TwitterCldr.get_locale_resource(locale, :calendars)[locale] resource[:calendars].each_pair do |calendar_type, options| next if calendar_type == TwitterCldr::DEFAULT_CALENDAR_TYPE mirror_resource( :from => resource[:calendars][TwitterCldr::DEFAULT_CALENDAR_TYPE], :to => resource[:calendars][calendar_type] ) end resource end end def mirror_resource(options) from = options[:from] to = options[:to] from.each_pair do |key, value| if !to[key] to[key] = from[key] else if to[key].is_a?(Hash) and from[key].is_a?(Hash) mirror_resource(:from => from[key], :to => to[key]) end end end end end end end