class Chronic::Repeater
Public Class Methods
scan(tokens, options)
click to toggle source
Scan an Array of Token objects and apply any necessary Repeater tags to each token.
tokens - An Array of tokens to scan. options - The Hash of options specified in Chronic.parse.
Returns an Array of tokens.
# File lib/chronic/repeater.rb, line 11 def self.scan(tokens, options) tokens.each do |token| if t = scan_for_season_names(token, options) then token.tag(t); next end if t = scan_for_month_names(token, options) then token.tag(t); next end if t = scan_for_day_names(token, options) then token.tag(t); next end if t = scan_for_day_portions(token, options) then token.tag(t); next end if t = scan_for_times(token, options) then token.tag(t); next end if t = scan_for_units(token, options) then token.tag(t); next end end end
scan_for_day_names(token, options = {})
click to toggle source
token - The Token object we want to scan.
Returns a new Repeater object.
# File lib/chronic/repeater.rb, line 59 def self.scan_for_day_names(token, options = {}) scan_for token, RepeaterDayName, { /^m[ou]n(day)?$/ => :monday, /^t(ue|eu|oo|u|)s?(day)?$/ => :tuesday, /^we(d|dnes|nds|nns)(day)?$/ => :wednesday, /^th(u|ur|urs|ers)(day)?$/ => :thursday, /^fr[iy](day)?$/ => :friday, /^sat(t?[ue]rday)?$/ => :saturday, /^su[nm](day)?$/ => :sunday }, options end
scan_for_day_portions(token, options = {})
click to toggle source
token - The Token object we want to scan.
Returns a new Repeater object.
# File lib/chronic/repeater.rb, line 75 def self.scan_for_day_portions(token, options = {}) scan_for token, RepeaterDayPortion, { /^ams?$/ => :am, /^pms?$/ => :pm, /^mornings?$/ => :morning, /^afternoons?$/ => :afternoon, /^evenings?$/ => :evening, /^(night|nite)s?$/ => :night }, options end
scan_for_month_names(token, options = {})
click to toggle source
token - The Token object we want to scan.
Returns a new Repeater object.
# File lib/chronic/repeater.rb, line 38 def self.scan_for_month_names(token, options = {}) scan_for token, RepeaterMonthName, { /^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 }, options end
scan_for_season_names(token, options = {})
click to toggle source
token - The Token object we want to scan.
Returns a new Repeater object.
# File lib/chronic/repeater.rb, line 25 def self.scan_for_season_names(token, options = {}) scan_for token, RepeaterSeasonName, { /^springs?$/ => :spring, /^summers?$/ => :summer, /^(autumn)|(fall)s?$/ => :autumn, /^winters?$/ => :winter }, options end
scan_for_times(token, options = {})
click to toggle source
scan_for_units(token, options = {})
click to toggle source
token - The Token object we want to scan.
Returns a new Repeater object.
# File lib/chronic/repeater.rb, line 97 def self.scan_for_units(token, options = {}) { /^years?$/ => :year, /^seasons?$/ => :season, /^months?$/ => :month, /^fortnights?$/ => :fortnight, /^weeks?$/ => :week, /^weekends?$/ => :weekend, /^(week|business)days?$/ => :weekday, /^days?$/ => :day, /^hrs?$/ => :hour, /^hours?$/ => :hour, /^mins?$/ => :minute, /^minutes?$/ => :minute, /^secs?$/ => :second, /^seconds?$/ => :second }.each do |item, symbol| if item =~ token.word klass_name = 'Repeater' + symbol.to_s.capitalize klass = Chronic.const_get(klass_name) return klass.new(symbol, options) end end return nil end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/chronic/repeater.rb, line 123 def <=>(other) width <=> other.width end
next(pointer)
click to toggle source
returns the next occurance of this repeatable.
# File lib/chronic/repeater.rb, line 133 def next(pointer) raise("Start point must be set before calling #next") unless @now end
this(pointer)
click to toggle source
# File lib/chronic/repeater.rb, line 137 def this(pointer) raise("Start point must be set before calling #this") unless @now end
to_s()
click to toggle source
# File lib/chronic/repeater.rb, line 141 def to_s 'repeater' end
width()
click to toggle source
returns the width (in seconds or months) of this repeatable.
# File lib/chronic/repeater.rb, line 128 def width raise("Repeater#width must be overridden in subclasses") end