diff --git a/lib/tzinfo/amagi.rb b/lib/tzinfo/amagi.rb new file mode 100644 index 00000000..f292b841 --- /dev/null +++ b/lib/tzinfo/amagi.rb @@ -0,0 +1,5 @@ +# Top level module for TZInfo. +module TZInfo + module Amagi + end +end diff --git a/lib/tzinfo/amagi/definition/Amagi.rb b/lib/tzinfo/amagi/definition/Amagi.rb new file mode 100644 index 00000000..eeb9cea7 --- /dev/null +++ b/lib/tzinfo/amagi/definition/Amagi.rb @@ -0,0 +1,36 @@ +module TZInfo + module Amagi + module Definition + module Amagi + + DEFAULT_SWITCH_OVER_EPOCH = "08:30:00" + + include TimezoneDefinition + switch_timezone = ENV["AMAGI_DST_SWITCH_TO"] + dst_switch_time = ENV["AMAGI_DST_SWITCH_TIME"] + parsed_date_time = DateTime.strptime(dst_switch_time, "%Y-%m-%dT%H:%M:%S") if dst_switch_time + d = dst_switch_time ? parsed_date_time.to_date : Date.current + switch_at_time = dst_switch_time ? parsed_date_time.strftime("%H:%M:%S") : DEFAULT_SWITCH_OVER_EPOCH + switch_over_epoch = Time.find_zone("UTC").parse(d.strftime("%Y-%m-%d") + " " + switch_at_time ).to_i + if switch_timezone == "AST" + timezone 'Amagi' do |tz| + tz.offset :o0, 23400, 0, :ADST + tz.offset :o1, 19800, 0, :AST + + tz.transition d.year, d.month, :o1, switch_over_epoch + + end + elsif switch_timezone == "ADST" + timezone 'Amagi' do |tz| + tz.offset :o0, 19800, 0, :AST + tz.offset :o1, 23400, 0, :ADST + + tz.transition d.year, d.month, :o1, switch_over_epoch + + end + end + + end + end + end +end diff --git a/lib/tzinfo/amagi/timezone.rb b/lib/tzinfo/amagi/timezone.rb new file mode 100644 index 00000000..de1afd64 --- /dev/null +++ b/lib/tzinfo/amagi/timezone.rb @@ -0,0 +1,8 @@ +module TZInfo + module Amagi + module Timezone + include TimezoneIndexDefinition + timezone 'Amagi' + end + end +end diff --git a/lib/tzinfo/data_sources/ruby_data_source.rb b/lib/tzinfo/data_sources/ruby_data_source.rb index 41c384a4..e836ae27 100644 --- a/lib/tzinfo/data_sources/ruby_data_source.rb +++ b/lib/tzinfo/data_sources/ruby_data_source.rb @@ -54,10 +54,19 @@ def initialize end end + data_file_amagi = File.join('', 'tzinfo', 'amagi.rb') + path_amagi = $".reverse_each.detect {|p| p.end_with?(data_file_amagi) } + if path_amagi + @base_path_amagi_timezone = RubyCoreSupport.untaint(File.join(File.dirname(path_amagi), 'amagi' )) + else + @base_path_amagi_timezone = 'tzinfo/amagi' + end + require_index('timezones') require_index('countries') + require_data_amagi('timezone') - @data_timezone_identifiers = Data::Indexes::Timezones.data_timezones + @data_timezone_identifiers = Data::Indexes::Timezones.data_timezones + Amagi::Timezone.data_timezones @linked_timezone_identifiers = Data::Indexes::Timezones.linked_timezones @countries = Data::Indexes::Countries.countries @country_codes = @countries.keys.sort!.freeze @@ -90,11 +99,18 @@ def load_timezone_info(identifier) split_identifier = valid_identifier.gsub(/-/, '__m__').gsub(/\+/, '__p__').split('/') begin - require_definition(split_identifier) + if split_identifier == ["Amagi"] + require_definition_amagi("Amagi") + n = Amagi::Definition + split_identifier.each {|part| n = n.const_get(part) } + n.get + else + require_definition(split_identifier) + m = Data::Definitions - m = Data::Definitions - split_identifier.each {|part| m = m.const_get(part) } - m.get + split_identifier.each {|part| m = m.const_get(part) } + m.get + end rescue LoadError, NameError => e raise InvalidTimezoneIdentifier, "#{e.message.encode(Encoding::UTF_8)} (loading #{valid_identifier})" end @@ -115,6 +131,10 @@ def require_definition(identifier) require_data('definitions', *identifier) end + def require_definition_amagi(identifier) + require_data_amagi('defintion', *identifier) + end + # Requires an index by its name. # # @param name [String] an index name. @@ -129,6 +149,10 @@ def require_data(*file) require(File.join(@base_path, *file)) end + def require_data_amagi(*file) + require(File.join(@base_path_amagi_timezone, *file)) + end + # @return [String] a `String` containing TZInfo::Data version infomation # for inclusion in the #to_s and #inspect output. def version_info diff --git a/lib/tzinfo/format1/timezone_index_definition.rb b/lib/tzinfo/format1/timezone_index_definition.rb index 5d4518aa..69bc3294 100644 --- a/lib/tzinfo/format1/timezone_index_definition.rb +++ b/lib/tzinfo/format1/timezone_index_definition.rb @@ -31,7 +31,7 @@ module ClassMethods #:nodoc: # `String#<=>`. def data_timezones unless @data_timezones.frozen? - @data_timezones = @data_timezones.sort.freeze + @data_timezones = @data_timezones.sort end @data_timezones end