class ScheduleChecker::Parser
Constants
- ALLOWED_KEYS
Attributes
config[R]
schedule[R]
Public Class Methods
new(s)
click to toggle source
# File lib/schedule-checker/parser.rb, line 13 def initialize(s) session_string_pairs = [] nonstop = false @config = Parser.downcase_keys(YAML.load(s)) check_keys is_utc = is_utc? raise "no sessions specified" unless @config["sessions"] and @config["sessions"].length > 0 sessions = [] raise "sessions should be a list" unless @config["sessions"].is_a? Array @config["sessions"].each do |session_string| s = session_string.downcase.strip #TODO - come back later and make this nonstop-session processing better # Should probably have non-stop be a property of Session, not Schedule, and # rely on Schedule to check for timed/nonstop session conflicts. if ["nonstop","non-stop"].include?(s) raise "config can't simultaneously be non-stop and have scheduled sessions" if sessions.length>0 nonstop = true else raise "config can't simultaneously be non-stop and have scheduled sessions" if nonstop sessions << Parser.parse_session(s,is_utc) end end if(nonstop) @schedule = ScheduleChecker::Schedule.nonstop else @schedule = ScheduleChecker::Schedule.new sessions.each{|s| @schedule.add_session(s)} end end
Private Class Methods
downcase_keys(h)
click to toggle source
# File lib/schedule-checker/parser.rb, line 53 def self.downcase_keys(h) rv = {} h.each{|k,v| rv[k.downcase] = v } rv end
parse_session(s,is_utc)
click to toggle source
# File lib/schedule-checker/parser.rb, line 75 def self.parse_session(s,is_utc) raise "malformed session value: #{s}" unless s.include?("-") starttime,endtime = s.split("-",2) raise "malformed session value: #{s}" if starttime.nil? or endtime.nil? starttime.strip! endtime.strip! ScheduleChecker::Session.new( ScheduleChecker::Timepoint.from_string(starttime,is_utc), ScheduleChecker::Timepoint.from_string(endtime,is_utc)) end
Private Instance Methods
check_keys()
click to toggle source
# File lib/schedule-checker/parser.rb, line 59 def check_keys @config.keys.each{|k| raise "unsupported setting '#{k}'" unless ALLOWED_KEYS.include?(k) } end
is_utc?()
click to toggle source
# File lib/schedule-checker/parser.rb, line 63 def is_utc? return true unless @config.has_key?("timezone") case @config["timezone"].downcase when "utc" true when "local" return false else raise "unsupported timezone value: #{s}" end end