Convenience class for building temporal expressions in a more human-friendly way. Used in conjunction with shortcuts defined in the sugar.rb file, this allows one to create expressions like the following:
b = ExpressionBuilder.new expr = b.define do occurs daily_8_30am_to_9_45am on tuesday possibly wednesday end
This equivalent to:
expr = REDay.new(8,30,9,45) & DIWeek.new(Tuesday) | DIWeek.new(Wednesday)
ExpressionBuilder creates expressions by evaluating a block passed to the :define method. From inside the block, methods :occurs, :on, :every, :possibly, and :maybe can be called with a temporal expression which will be added to a composite expression as follows:
:on - creates an “and” (&)
:possibly - creates an “or” (|)
:except - creates a “not” (-)
:every - alias for :on method
:occurs - alias for :on method
:maybe - alias for :possibly method
# File lib/runt/expressionbuilder.rb, line 36 def initialize @ctx = nil end
# File lib/runt/expressionbuilder.rb, line 48 def add(expr, op) @ctx ||= expr @ctx = @ctx.send(op, expr) unless @ctx == expr @ctx # explicit return, previous line may not execute end
# File lib/runt/expressionbuilder.rb, line 40 def define(&block) instance_eval(&block) end
# File lib/runt/expressionbuilder.rb, line 54 def except(expr) add(expr, :-) end
# File lib/runt/expressionbuilder.rb, line 44 def on(expr) add(expr, :&) end
# File lib/runt/expressionbuilder.rb, line 58 def possibly(expr) add(expr, :|) end