class A0::TZMigration::TZVersion
Attributes
name[R]
version[R]
Public Class Methods
new(name, version)
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 8 def initialize(name, version) @name = name @version = version end
timezones()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 93 def self.timezones @timezones = Util.load_from_network('timezones/00-index.json')['timezones'] end
versions()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 89 def self.versions @versions = Util.load_from_network('versions/00-index.json')['versions'] end
Public Instance Methods
changes(other)
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 73 def changes(other) # rubocop:disable Metrics/AbcSize timestamp_list = (timestamps + other.timestamps).sort.uniq list_a = Util.split_ranges(transition_ranges, timestamp_list) list_b = Util.split_ranges(other.transition_ranges, timestamp_list) changes = [] list_a.each_with_index do |range_a, index| range_b = list_b[index] changes << Util.range_item(range_a[:ini], range_a[:fin], range_b[:off] - range_a[:off]) if range_a[:off] != range_b[:off] end Util.compact_ranges!(changes) end
data()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 13 def data return @data if defined? @data @data = Util.load_from_network("timezones/#{name}.json") end
released_at()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 32 def released_at return @released_at if defined? @released_at @released_at = version_data['released_at'] end
timestamps()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 61 def timestamps return @timestamps if defined? @timestamps @timestamps = [-Float::INFINITY] transitions.each do |transition| @timestamps << transition['utc_timestamp'] end @timestamps << +Float::INFINITY @timestamps end
transition_ranges()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 44 def transition_ranges # rubocop:disable Metrics/AbcSize return @transition_ranges if defined? @transition_ranges ini = -Float::INFINITY fin = +Float::INFINITY return @transition_ranges = [Util.range_item(ini, fin, 0)] if transitions.empty? @transition_ranges = transitions.map do |transition| Util.range_item(ini, (ini = transition['utc_timestamp']), transition['utc_prev_offset']) end @transition_ranges << Util.range_item(@transition_ranges.last[:fin], fin, transitions.last['utc_offset']) @transition_ranges end
transitions()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 38 def transitions return @transitions if defined? @transitions @transitions = version_data['transitions'] end
version_data()
click to toggle source
# File lib/a0/tzmigration/tzversion.rb, line 19 def version_data return @version_data if defined? @version_data raise "Version #{@version} not found for #{@name}." unless (@version_data = data.dig('versions', @version)) if @version_data['alias'] @link = TZVersion.new(@version_data['alias'], @version) @version_data = @link.version_data end @version_data end