Class: Day::Ru

Inherits:
Object
  • Object
show all
Defined in:
lib/day.rb,
lib/ru/parse.rb,
lib/ru/parse_methods.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#dateObject

Returns the value of attribute date.



54
55
56
# File 'lib/day.rb', line 54

def date
  @date
end

Instance Method Details

#parseObject



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