Skip to content

Instantly share code, notes, and snippets.

@guilherme
Created March 6, 2012 21:19
Show Gist options
  • Save guilherme/1989028 to your computer and use it in GitHub Desktop.
Save guilherme/1989028 to your computer and use it in GitHub Desktop.
schedule.rb
# encoding : utf-8
class Schedule
TITLE = /([\p{Word} ]*)/
TIME_ADVERB = /(hoje|amanhã|depois de amanhã|semana que vem)/i
DAY_OF_WEEK = /(Domingo|Segunda|Terca|Quarta|Quinta|Sexta|Sabado|Dom|Seg|Ter|Qua|Qui|Sex|Sab)/
MINUTE = /([0-6][0-9])/
HOUR = /([0-2][0-9])/
YEAR = /([0-9]{2}|[0-9]{4})/
MONTH = /([0]?[0-1][0-2])/
DAY = /([0-3]*[0-9]+)/
DATE = /((?<date>#{DAY}\/#{MONTH}\/#{YEAR}) (?<time>#{HOUR}:#{MINUTE}))|((?<date>#{DAY_OF_WEEK}))|((?<time>#{HOUR}:#{MINUTE}) (?<date>#{TIME_ADVERB}))|((?<date>#{TIME_ADVERB}) (?<time>#{HOUR}:#{MINUTE}))|((?<date>#{TIME_ADVERB})|((?<time>#{HOUR}:#{MINUTE})))/u
SCHEDULE = /#{DATE} (?<title>#{TITLE})|(?<title>#{TITLE}) #{DATE}|(?<title>#{TITLE})/u
def self.parse(schedule)
return schedule.match(SCHEDULE)
end
end
p Schedule.parse('amanhã 14:30 reunião do MAF')[:date]
p Schedule.parse('depois de amanhã 14:30 reunião do MAF')[:date]
p Schedule.parse('14:30 reunião do MAF')[:time]
p Schedule.parse('reunião do MAF amanhã 14:30')[:time]
p Schedule.parse('reunião do MAF amanhã 14:30')[:date]
p Schedule.parse('reunião do MAF amanhã 14:30')[:title]
#output =>
# "amanhã"
# "depois de amanhã"
# "14:30"
# "14:30"
# nil
# "reunião do MAF amanhã"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment