def self.get(identifier)
instance = @@loaded_zones[identifier]
unless instance
raise InvalidTimezoneIdentifier, 'Invalid identifier' if identifier !~ /^[A-z0-9\+\-_]+(\/[A-z0-9\+\-_]+)*$/
identifier = identifier.gsub(/-/, '__m__').gsub(/\+/, '__p__')
begin
file = "tzinfo/definitions/#{identifier}"
require file
m = Definitions
identifier.split(/\//).each {|part|
m = m.const_get(part)
}
info = m.get
if info.kind_of?(DataTimezoneInfo)
instance = DataTimezone.new(info)
elsif info.kind_of?(LinkedTimezoneInfo)
instance = LinkedTimezone.new(info)
else
raise InvalidTimezoneIdentifier, "No handler for info type #{info.class}"
end
@@loaded_zones[instance.identifier] = instance
rescue LoadError, NameError => e
raise InvalidTimezoneIdentifier, e.message
end
end
instance
end