Module: Runt::TExpr

Included in:
AfterTE, BeforeTE, Collection, DIMonth, DIWeek, DayIntervalTE, Diff, EveryTE, REDay, REMonth, REWeek, REYear, Spec, WIMonth, YearTE
Defined in:
lib/runt/temporalexpression.rb

Overview

‘TExpr’ is short for ‘TemporalExpression’ and are inspired by the recurring event pattern[http://martinfowler.com/apsupp/recurring.pdf] described by Martin Fowler. Essentially, they provide a pattern language for specifying recurring events using set expressions.

See also [tutorial_te.rdoc]

Instance Method Summary collapse

Instance Method Details

#&(expr) ⇒ Object



56
57
58
# File 'lib/runt/temporalexpression.rb', line 56

def & (expr)
  self.and(expr){|adjusted| adjusted }
end

#-(expr) ⇒ Object



60
61
62
# File 'lib/runt/temporalexpression.rb', line 60

def - (expr)
  self.minus(expr){|adjusted| adjusted }
end

#and(arg) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/runt/temporalexpression.rb', line 38

def and (arg)

  if self.kind_of?(Intersect)
    self.add(arg)
  else
    yield Intersect.new.add(self).add(arg)
  end

end

#dates(date_range, limit = 0) ⇒ Object

Contributed by Emmett Shear: Returns an Array of Date-like objects which occur within the supplied DateRange. Will stop calculating dates once a number of dates equal to the optional attribute limit are found. (A limit of zero will collect all matching dates in the date range.)



69
70
71
72
73
74
75
76
77
78
# File 'lib/runt/temporalexpression.rb', line 69

def dates(date_range, limit=0)
  result = []
  date_range.each do |date|
    result << date if self.include? date
    if limit > 0 and result.size == limit
      break
    end
  end
  result
end

#include?(date_expr) ⇒ Boolean

Returns true or false depending on whether this TExpr includes the supplied date expression.

Returns:

  • (Boolean)


24
# File 'lib/runt/temporalexpression.rb', line 24

def include?(date_expr); false end

#minus(arg) {|Diff.new(self,arg)| ... } ⇒ Object

Yields:

  • (Diff.new(self,arg))


48
49
50
# File 'lib/runt/temporalexpression.rb', line 48

def minus (arg)
    yield Diff.new(self,arg)
end

#or(arg) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/runt/temporalexpression.rb', line 28

def or (arg)

  if self.kind_of?(Union)
    self.add(arg)
  else
    yield Union.new.add(self).add(arg)
  end

end

#to_sObject



26
# File 'lib/runt/temporalexpression.rb', line 26

def to_s; "TExpr" end

#|(expr) ⇒ Object



52
53
54
# File 'lib/runt/temporalexpression.rb', line 52

def | (expr)
  self.or(expr){|adjusted| adjusted }
end