Class: Chronic::Repeater
- Inherits:
-
Tag
- Object
- Tag
- Chronic::Repeater
show all
- Defined in:
- lib/chronic/repeater.rb
Overview
Direct Known Subclasses
RepeaterDay, RepeaterDayName, RepeaterDayPortion, RepeaterFortnight, RepeaterHour, RepeaterMinute, RepeaterMonth, RepeaterMonthName, RepeaterSeason, RepeaterSecond, RepeaterTime, RepeaterWeek, RepeaterWeekday, RepeaterWeekend, RepeaterYear
Instance Attribute Summary
Attributes inherited from Tag
#type
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Tag
#initialize, #start=
Constructor Details
This class inherits a constructor from Chronic::Tag
Class Method Details
.scan(tokens, options) ⇒ Object
2
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/chronic/repeater.rb', line 2
def self.scan(tokens, options)
tokens.each_index do |i|
if t = self.scan_for_season_names(tokens[i]) then tokens[i].tag(t); next end
if t = self.scan_for_month_names(tokens[i]) then tokens[i].tag(t); next end
if t = self.scan_for_day_names(tokens[i]) then tokens[i].tag(t); next end
if t = self.scan_for_day_portions(tokens[i]) then tokens[i].tag(t); next end
if t = self.scan_for_times(tokens[i], options) then tokens[i].tag(t); next end
if t = self.scan_for_units(tokens[i]) then tokens[i].tag(t); next end
end
tokens
end
|
.scan_for_day_names(token) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/chronic/repeater.rb', line 46
def self.scan_for_day_names(token)
scanner = {/^m[ou]n(day)?$/ => :monday,
/^t(ue|eu|oo|u|)s(day)?$/ => :tuesday,
/^tue$/ => :tuesday,
/^we(dnes|nds|nns)day$/ => :wednesday,
/^wed$/ => :wednesday,
/^th(urs|ers)day$/ => :thursday,
/^thu$/ => :thursday,
/^fr[iy](day)?$/ => :friday,
/^sat(t?[ue]rday)?$/ => :saturday,
/^su[nm](day)?$/ => :sunday}
scanner.keys.each do |scanner_item|
return Chronic::RepeaterDayName.new(scanner[scanner_item]) if scanner_item =~ token.word
end
return nil
end
|
.scan_for_day_portions(token) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/chronic/repeater.rb', line 63
def self.scan_for_day_portions(token)
scanner = {/^ams?$/ => :am,
/^pms?$/ => :pm,
/^mornings?$/ => :morning,
/^afternoons?$/ => :afternoon,
/^evenings?$/ => :evening,
/^(night|nite)s?$/ => :night}
scanner.keys.each do |scanner_item|
return Chronic::RepeaterDayPortion.new(scanner[scanner_item]) if scanner_item =~ token.word
end
return nil
end
|
.scan_for_month_names(token) ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/chronic/repeater.rb', line 27
def self.scan_for_month_names(token)
scanner = {/^jan\.?(uary)?$/ => :january,
/^feb\.?(ruary)?$/ => :february,
/^mar\.?(ch)?$/ => :march,
/^apr\.?(il)?$/ => :april,
/^may$/ => :may,
/^jun\.?e?$/ => :june,
/^jul\.?y?$/ => :july,
/^aug\.?(ust)?$/ => :august,
/^sep\.?(t\.?|tember)?$/ => :september,
/^oct\.?(ober)?$/ => :october,
/^nov\.?(ember)?$/ => :november,
/^dec\.?(ember)?$/ => :december}
scanner.keys.each do |scanner_item|
return Chronic::RepeaterMonthName.new(scanner[scanner_item]) if scanner_item =~ token.word
end
return nil
end
|
.scan_for_season_names(token) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/chronic/repeater.rb', line 15
def self.scan_for_season_names(token)
scanner = {/^springs?$/ => :spring,
/^summers?$/ => :summer,
/^(autumn)|(fall)s?$/ => :autumn,
/^winters?$/ => :winter}
scanner.keys.each do |scanner_item|
return Chronic::RepeaterSeasonName.new(scanner[scanner_item]) if scanner_item =~ token.word
end
return nil
end
|
.scan_for_times(token, options) ⇒ Object
76
77
78
79
80
81
|
# File 'lib/chronic/repeater.rb', line 76
def self.scan_for_times(token, options)
if token.word =~ /^\d{1,2}(:?\d{2})?([\.:]?\d{2})?$/
return Chronic::RepeaterTime.new(token.word, options)
end
return nil
end
|
.scan_for_units(token) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/chronic/repeater.rb', line 83
def self.scan_for_units(token)
scanner = {/^years?$/ => :year,
/^seasons?$/ => :season,
/^months?$/ => :month,
/^fortnights?$/ => :fortnight,
/^weeks?$/ => :week,
/^weekends?$/ => :weekend,
/^(week|business)days?$/ => :weekday,
/^days?$/ => :day,
/^hours?$/ => :hour,
/^minutes?$/ => :minute,
/^seconds?$/ => :second}
scanner.keys.each do |scanner_item|
if scanner_item =~ token.word
klass_name = 'Chronic::Repeater' + scanner[scanner_item].to_s.capitalize
klass = eval(klass_name)
return klass.new(scanner[scanner_item])
end
end
return nil
end
|
Instance Method Details
#<=>(other) ⇒ Object
105
106
107
|
# File 'lib/chronic/repeater.rb', line 105
def <=>(other)
width <=> other.width
end
|
#next(pointer) ⇒ Object
returns the next occurance of this repeatable.
115
116
117
118
119
|
# File 'lib/chronic/repeater.rb', line 115
def next(pointer)
!@now.nil? || raise("Start point must be set before calling #next")
[:future, :none, :past].include?(pointer) || raise("First argument 'pointer' must be one of :past or :future")
end
|
#this(pointer) ⇒ Object
121
122
123
124
|
# File 'lib/chronic/repeater.rb', line 121
def this(pointer)
!@now.nil? || raise("Start point must be set before calling #this")
[:future, :past, :none].include?(pointer) || raise("First argument 'pointer' must be one of :past, :future, :none")
end
|
#to_s ⇒ Object
126
127
128
|
# File 'lib/chronic/repeater.rb', line 126
def to_s
'repeater'
end
|
#width ⇒ Object
returns the width (in seconds or months) of this repeatable.
110
111
112
|
# File 'lib/chronic/repeater.rb', line 110
def width
raise("Repeatable#width must be overridden in subclasses")
end
|