class SetBuilder::Constraint

Attributes

direct_object[R]
modifiers[R]
negative[R]
trait[R]

Public Class Methods

new(trait, *args, &block) click to toggle source

Sample constraints:

[:awesome],
[:attended, "school"],
[:died],
[:name, {:is => "Jerome"}]]
# File lib/set_builder/constraint.rb, line 16
def initialize(trait, *args, &block)
  @trait, @block = trait, block
  @direct_object = args.shift if trait.requires_direct_object?
  @modifiers = trait.modifiers.collect {|modifier_type| modifier_type.new(args.shift)}
end

Public Instance Methods

negate(value) click to toggle source
# File lib/set_builder/constraint.rb, line 52
def negate(value)
  @negative = value
  @negative = false if trait.noun?
  self
end
perform(scope) click to toggle source
# File lib/set_builder/constraint.rb, line 60
def perform(scope)
  scope.scoped(@block.call(self, scope))
end
to_s() click to toggle source
# File lib/set_builder/constraint.rb, line 40
def to_s
  # p "ValueMap.to_s(#{direct_object_type} (#{direct_object_type.class}), #{direct_object} (#{direct_object.class}))"
  @description ||= begin
    description = trait.to_s(@negative)
    description << " #{ValueMap.to_s(direct_object_type, direct_object)}" if direct_object_required?
    description << " #{modifiers.collect{|m| m.to_s(@negative)}.join(" ")}" unless modifiers.empty?
    description
  end
end
valid?() click to toggle source
# File lib/set_builder/constraint.rb, line 34
def valid?
  (!direct_object_required? or !direct_object.nil?) and modifiers.all?(&:valid?)
end