3
4
5
6
7
8
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
|
# File 'lib/crony/parser.rb', line 3
def self.parse(element)
@element = element
case @element
when '*' then { :every => true }
when /^l$/i then { :last => true }
when /(\d|\w{3})l$/i
@element = @element.sub(/l$/i, '')
{ :last => true, :collection => parse_collection }
when /.*#\d$/
@element, nth_week = @element.scan(/(.*)#(\d)$/)[0]
{ :nth_week => nth_week, :collection => parse_collection }
when /\d+w$/i
@element = @element.sub(/w$/i, '')
{ :nearest => true, :collection => parse_collection }
when /\//
start, frequency = @element.scan(/(.*)\/(.*)/)[0]
case start
when '*'
{ :frequency => frequency }
when /^\d+$/ { :frequency => frequency, :start => start }
when /^\w+-\w+$/
range_start, range_end = *start.scan(/(\w+)-(\w+)/)[0]
{ :frequency => frequency, :start => range_start, :stop => range_end }
end
when /^\w+-\w+$/
range_start, range_end = *@element.scan(/(\w+)-(\w+)/)[0]
{ :start => range_start, :stop => range_end }
else { :collection => parse_collection }
end
end
|