Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add custom timezone amagi #3

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
5 changes: 5 additions & 0 deletions lib/tzinfo/amagi.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Top level module for TZInfo.
module TZInfo
module Amagi
end
end
36 changes: 36 additions & 0 deletions lib/tzinfo/amagi/definition/Amagi.rb
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions lib/tzinfo/amagi/timezone.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module TZInfo
module Amagi
module Timezone
include TimezoneIndexDefinition
timezone 'Amagi'
end
end
end
34 changes: 29 additions & 5 deletions lib/tzinfo/data_sources/ruby_data_source.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/tzinfo/format1/timezone_index_definition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down