Module: Timezone::Parser

Defined in:
lib/timezone/parser.rb,
lib/timezone/parser/data.rb,
lib/timezone/parser/link.rb,
lib/timezone/parser/rule.rb,
lib/timezone/parser/zone.rb

Defined Under Namespace

Modules: Rule, Zone Classes: Data, Link, NilRule

Constant Summary collapse

COMMENT_REGEXP =
/^\s*#/
RULE_REGEXP =
/^Rule/
/^Link/
ZONE_REGEXP =
/^Zone/
START_DATE =

The very last date ‘9999-12-31T23:59:59Z’.

-377705116800000 # The very last date '9999-12-31T23:59:59Z'.
END_DATE =

The very first date ‘-9999-01-01T00:00:00Z’.

253402300799000

Class Method Summary collapse

Class Method Details

.data(*args) ⇒ Object



5
# File 'lib/timezone/parser/data.rb', line 5

def self.data(*args) ; Data.new(*args) ; end

.extension(previous, zone) ⇒ Object



11
12
13
# File 'lib/timezone/parser/data.rb', line 11

def self.extension(previous, zone)
  data(previous.end_date, nil, zone)
end

.from_rule(zone, rule) ⇒ Object



15
16
17
# File 'lib/timezone/parser/data.rb', line 15

def self.from_rule(zone, rule)
  data(rule.start_date, nil, zone, rule)
end

.from_zone(previous, zone) ⇒ Object



7
8
9
# File 'lib/timezone/parser/data.rb', line 7

def self.from_zone(previous, zone)
  data(previous && previous.end_date, zone.end_date, zone)
end


3
# File 'lib/timezone/parser/link.rb', line 3

def self.link(line) ; Link.new(line) ; end

.parse(file) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/timezone/parser.rb', line 13

def self.parse(file)
  IO.readlines(file).map(&:strip).each do |line|
    if line =~ COMMENT_REGEXP
      next
    elsif line =~ RULE_REGEXP
      rule(line)
    elsif line =~ LINK_REGEXP
      # TODO [panthomakos] Need to add linking.
    elsif line =~ ZONE_REGEXP || (line != '' && !line.nil?)
      zone(line)
    else
      Timezone::Parser::Zone.generate(Timezone::Parser::Zone.last)
    end
  end
end

.rule(line) ⇒ Object

Given a rule from a TZDATA file, generate the appropriate rule objects.



6
# File 'lib/timezone/parser/rule.rb', line 6

def self.rule(line) ; Rule.generate(line) ; end

.rulesObject

Get a list of all processed rules.



9
# File 'lib/timezone/parser/rule.rb', line 9

def self.rules ; Rule.rules ; end

.select_rules(name, end_date) ⇒ Object

Select rules based on a name and end date.



12
13
14
15
# File 'lib/timezone/parser/rule.rb', line 12

def self.select_rules(name, end_date)
  rules.fetch(name){ [] }
    .select{ |rule| end_date.nil? || rule.start_date < end_date }
end

.zone(line) ⇒ Object

Given a line from the TZDATA file, generate an Entry object.



6
# File 'lib/timezone/parser/zone.rb', line 6

def self.zone(line) ; Zone.parse(line) ; end

.zonesObject

Get a list of all processed entries.



9
# File 'lib/timezone/parser/zone.rb', line 9

def self.zones ; Zone.zones ; end