def self.parse(str)
if str =~ /\A(?:@(?:#{SHORTCUTS.keys.join("|")})\s+|(?:\S+\s+){5})(.*)\Z$/
command = $+
SHORTCUTS.collect{|shortcut, snippet| str.sub!(/\A\s*@#{shortcut}/, snippet)}
min, hour, mday, mon, wday = str.split(/\s+/).first(5)
wday = wday.downcase.gsub(/\b(#{WDAY.join("|")})[a-z]*/){
WDAY.index($1)
}
mon = mon.downcase.gsub(/\b(#{MON.join("|")})[a-z]*/){
MON.index($1)+1
}
self.new(min, hour, mday, mon, wday, command)
else
raise CrontabFormatError, "Badly formatted line: #{str.inspect}"
end
end