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_REGEXP =
/^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
- .data(*args) ⇒ Object
- .extension(previous, zone) ⇒ Object
- .from_rule(zone, rule) ⇒ Object
- .from_zone(previous, zone) ⇒ Object
- .link(line) ⇒ Object
- .parse(file) ⇒ Object
-
.rule(line) ⇒ Object
Given a rule from a TZDATA file, generate the appropriate rule objects.
-
.rules ⇒ Object
Get a list of all processed rules.
-
.select_rules(name, end_date) ⇒ Object
Select rules based on a name and end date.
-
.zone(line) ⇒ Object
Given a line from the TZDATA file, generate an Entry object.
-
.zones ⇒ Object
Get a list of all processed entries.
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 |
.link(line) ⇒ Object
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 |
.rules ⇒ Object
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 |
.zones ⇒ Object
Get a list of all processed entries.
9 |
# File 'lib/timezone/parser/zone.rb', line 9 def self.zones ; Zone.zones ; end |