Class: Day::Ru
- Inherits:
-
Object
- Object
- Day::Ru
- Defined in:
- lib/day.rb,
lib/ru/parse.rb,
lib/ru/parse_methods.rb
Instance Attribute Summary collapse
-
#date ⇒ Object
Returns the value of attribute date.
Instance Method Summary collapse
-
#initialize(string) ⇒ Ru
constructor
A new instance of Ru.
- #parse ⇒ Object
Constructor Details
#initialize(string) ⇒ Ru
Returns a new instance of Ru.
48 49 50 51 52 |
# File 'lib/day.rb', line 48 def initialize string @string = string.strip.to_downcase.encode! @now = Time.now @week_start = @now - @now.wday.days end |
Instance Attribute Details
#date ⇒ Object
Returns the value of attribute date.
54 55 56 |
# File 'lib/day.rb', line 54 def date @date end |
Instance Method Details
#parse ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/ru/parse.rb', line 9 def parse case @string # вчера, сегодня, завтра when /^(позавчера|вчера|сегодня|завтра|послезавтра)$/i then yesterday_today_tomorrow # через (1 день | 2 дня | 5 дней) when /^через\s(\d{1,})\sд(н(|я|ей)|ень)$/i then future_days $1 # через (один день | два дня | пять дней) when /^через\s(#{@@simple_numerics.keys.join('|')})\sд(н(|я|ей)|ень)$/ then future_days @@simple_numerics[$1] # (1 день | 2 дня | 5 дней) назад when /^(\d{1,})\sд(н(|я|ей)|ень)\sназад/i then previous_days $1 # (два дня | пять дней) назад when /^(#{@@simple_numerics.keys.join('|')})\sд(н(|я|ей)|ень)\sназад$/ then previous_days @@simple_numerics[$1] # в понедельник, во вторник, в воскресенье, в эту среду when /^во?\s(эт(о|от|у)\s)?(#{@@week_days.join('|')})$/i then in_week_day $3 # пн (вт ... вс) when /^(#{@@short_week_days.join('|')})$/i then in_week_day_short_notation $1 # в прошлый понедельник, в прошлую среду, в прошлое воскресенье when /^в\sпрошл(ый|ую|ое)\s(#{@@week_days.join('|')})/i then in_past_week_day $2 # в следующий понедельник, в следующую пятницу, в следующее воскресенье when /^в\sследующ(ий|ую|ее)\s(#{@@week_days.join('|')})/i then in_next_week_day $2 # через (неделю | 1 неделю | 2 недели | 5 недель) when /^через\s(\d{1,})?\s?недел(и|ю|ь)$/i then next_weeks $1 # через (две недели | десять недель) when /^через\s(#{@@simple_numerics.keys.join('|')})\sнедел(и|ю|ь)$/ then next_weeks @@simple_numerics[$1] # неделю назад, 1 неделю назад, 2 недели назад, 5 недель назад when /^(\d{1,})?\s?недел(и|ю|ь)\sназад$/i then previous_weeks $1 # две недели назад, десять недель назад when /^(#{@@simple_numerics.keys.join('|')})\sнедел(и|ю|ь)\sназад$/ then previous_weeks @@simple_numerics[$1] # через (месяц | 1 месяц | 2 месяца | 5 месяцев) when /^через\s(\d{1,})?\s?месяц(|а|ев)$/i then next_month $1 # через (два месяца | десять месяцев) when /^через\s(#{@@simple_numerics.keys.join('|')})\sмесяц(|а|ев)$/i then next_month @@simple_numerics[$1] # месяц назад, 1 месяц назад, 2 месяца назад, 5 месяцев назад when /^(\d{1,})?\s?месяц(|а|ев)\sназад$/i then previous_month $1 # два месяца назад, десять месяцев назад when /^(#{@@simple_numerics.keys.join('|')})\sмесяц(|а|ев)\sназад$/i then previous_month @@simple_numerics[$1] # 2 октября, 2 окт, 2 окт 2011 else if @string =~ /\s?(#{@@month_vocabulary.keys.join('|')})/ @string.gsub!($1, @@month_vocabulary[$1]) end begin tmp_date = Date.parse @string @date = Time.mktime(tmp_date.year, tmp_date.mon, tmp_date.day) # TODO: raise an error: Date not recognized rescue => err puts err end end @date end |