/usr/lib/ruby/1.8/chronic/repeater.rb is in libchronic-ruby 0.2.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 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 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | class Chronic::Repeater < Chronic::Tag #:nodoc:
def self.scan(tokens, options)
# for each token
tokens.each_index do |i|
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
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
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
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
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
def self.scan_for_units(token)
scanner = {/^years?$/ => :year,
/^seasons?$/ => :season,
/^months?$/ => :month,
/^fortnights?$/ => :fortnight,
/^weeks?$/ => :week,
/^weekends?$/ => :weekend,
/^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
def <=>(other)
width <=> other.width
end
# returns the width (in seconds or months) of this repeatable.
def width
raise("Repeatable#width must be overridden in subclasses")
end
# returns the next occurance of this repeatable.
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")
#raise("Repeatable#next must be overridden in subclasses")
end
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
def to_s
'repeater'
end
end
|