class TZInfo::RubyDataSource
A DataSource that loads data from the set of Ruby modules included in the TZInfo::Data library (tzinfo-data gem).
To have TZInfo use this DataSource, call TZInfo::DataSource.set as follows:
TZInfo::DataSource.set(:ruby)
Constants
- REQUIRE_PATH
Base path for require.
Private Class Methods
Loads in the index of countries if it hasn't already been loaded.
# File lib/tzinfo/ruby_data_source.rb, line 129 def self.load_country_index unless @@country_index_loaded require_index('countries') @@country_index_loaded = true end end
Loads in the index of timezones if it hasn't already been loaded.
# File lib/tzinfo/ruby_data_source.rb, line 116 def self.load_timezone_index unless @@timezone_index_loaded require_index('timezones') @@timezone_index_loaded = true end end
Requires a file from tzinfo/data.
# File lib/tzinfo/ruby_data_source.rb, line 106 def self.require_data(*file) require File.join('tzinfo', 'data', *file) end
Requires an index by its name.
# File lib/tzinfo/ruby_data_source.rb, line 96 def self.require_index(name) require_data(*['indexes', name]) end
Public Instance Methods
Returns an array of all the available ISO 3166-1 alpha-2 country codes.
# File lib/tzinfo/ruby_data_source.rb, line 78 def country_codes load_country_index Data::Indexes::Countries.countries.keys.freeze end
Returns an array of all the available timezone identifiers for data timezones (i.e. those that actually contain definitions).
# File lib/tzinfo/ruby_data_source.rb, line 54 def data_timezone_identifiers load_timezone_index Data::Indexes::Timezones.data_timezones end
Returns an array of all the available timezone identifiers that are links to other timezones.
# File lib/tzinfo/ruby_data_source.rb, line 61 def linked_timezone_identifiers load_timezone_index Data::Indexes::Timezones.linked_timezones end
Returns a CountryInfo instance for the given ISO 3166-1 alpha-2 country code. Raises InvalidCountryCode if the country could not be found or the code is invalid.
# File lib/tzinfo/ruby_data_source.rb, line 69 def load_country_info(code) load_country_index info = Data::Indexes::Countries.countries[code] raise InvalidCountryCode, 'Invalid country code' unless info info end
Returns a TimezoneInfo instance for a given identifier. Raises InvalidTimezoneIdentifier if the timezone is not found or the identifier is invalid.
# File lib/tzinfo/ruby_data_source.rb, line 21 def load_timezone_info(identifier) raise InvalidTimezoneIdentifier, 'Invalid identifier' if identifier !~ /^[A-Za-z0-9\+\-_]+(\/[A-Za-z0-9\+\-_]+)*$/ identifier = identifier.gsub(/-/, '__m__').gsub(/\+/, '__p__') # Untaint identifier after it has been reassigned to a new string. We # don't want to modify the original identifier. identifier may also be # frozen and therefore cannot be untainted. identifier.untaint identifier = identifier.split('/') begin require_definition(identifier) m = Data::Definitions identifier.each {|part| m = m.const_get(part) } m.get rescue LoadError, NameError => e raise InvalidTimezoneIdentifier, e.message end end
Returns an array of all the available timezone identifiers.
# File lib/tzinfo/ruby_data_source.rb, line 47 def timezone_identifiers load_timezone_index Data::Indexes::Timezones.timezones end
Returns the name of this DataSource.
# File lib/tzinfo/ruby_data_source.rb, line 84 def to_s "Ruby DataSource" end
Private Instance Methods
Loads in the index of countries if it hasn't already been loaded.
# File lib/tzinfo/ruby_data_source.rb, line 124 def load_country_index self.class.load_country_index end
Loads in the index of timezones if it hasn't already been loaded.
# File lib/tzinfo/ruby_data_source.rb, line 111 def load_timezone_index self.class.load_timezone_index end
Requires a file from tzinfo/data.
# File lib/tzinfo/ruby_data_source.rb, line 101 def require_data(*file) self.class.require_data(*file) end
Requires a zone definition by its identifier (split on /).
# File lib/tzinfo/ruby_data_source.rb, line 91 def require_definition(identifier) require_data(*(['definitions'] + identifier)) end