class Predicate::ToS

Public Instance Methods

on_and(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 28
def on_and(sexpr)
  sexpr.sexpr_body.map{|term|
    apply(term, sexpr)
  }.join(" AND ")
end
on_contradiction(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 8
def on_contradiction(sexpr)
  "false"
end
on_dyadic(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 40
def on_dyadic(sexpr)
  sexpr.sexpr_body.map{|term|
    apply(term, sexpr)
  }.join(" #{sexpr.operator_symbol} ")
end
Also aliased as: on_eq, on_neq, on_lt, on_lte, on_gt, on_gte
on_empty(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 80
def on_empty(sexpr)
  "EMPTY(#{commalist(sexpr.body)})"
end
on_eq(sexpr)
Alias for: on_dyadic
on_gt(sexpr)
Alias for: on_dyadic
on_gte(sexpr)
Alias for: on_dyadic
on_identifier(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 16
def on_identifier(sexpr)
  if s = options[:scope]
    "#{s}.#{sexpr.last.to_s}"
  else
    "@#{sexpr.last.to_s}"
  end
end
on_in(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 52
def on_in(sexpr)
  "#{apply(sexpr.identifier)} IN #{apply(sexpr.right)}"
end
on_intersect(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 56
def on_intersect(sexpr)
  "#{apply(sexpr.identifier)} INTERSECTS #{to_literal(sexpr.values)}"
end
on_literal(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 68
def on_literal(sexpr)
  to_literal(sexpr.last)
end
on_lt(sexpr)
Alias for: on_dyadic
on_lte(sexpr)
Alias for: on_dyadic
on_match(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 76
def on_match(sexpr)
  "#{apply(sexpr.left)} =~ #{apply(sexpr.right)}"
end
on_missing(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 100
def on_missing(sexpr)
  raise "Unimplemented: #{sexpr.first}"
end
on_native(sexpr) click to toggle source

jeny(predicate) def on_${op_name}(sexpr) jeny(predicate) “${OP_NAME}(#{commalist(sexpr.body)})” jeny(predicate) end

# File lib/predicate/processors/to_s.rb, line 92
def on_native(sexpr)
  sexpr.last.inspect
end
on_neq(sexpr)
Alias for: on_dyadic
on_not(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 24
def on_not(sexpr)
  "not(" << apply(sexpr.last, sexpr) << ")"
end
on_opaque(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 72
def on_opaque(sexpr)
  "OPAQUE #{sexpr.last}"
end
on_or(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 34
def on_or(sexpr)
  sexpr.sexpr_body.map{|term|
    apply(term, sexpr)
  }.join(" OR ")
end
on_qualified_identifier(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 12
def on_qualified_identifier(sexpr)
  "#{sexpr.qualifier}.#{sexpr.name}"
end
on_size(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 84
def on_size(sexpr)
  "SIZE(#{commalist(sexpr.body)})"
end
on_subset(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 60
def on_subset(sexpr)
  "#{apply(sexpr.identifier)} IS SUBSET OF #{to_literal(sexpr.values)}"
end
on_superset(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 64
def on_superset(sexpr)
  "#{apply(sexpr.identifier)} IS SUPERSET OF #{to_literal(sexpr.values)}"
end
on_tautology(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 4
def on_tautology(sexpr)
  "true"
end
on_var(sexpr) click to toggle source
# File lib/predicate/processors/to_s.rb, line 96
def on_var(sexpr)
  "#{sexpr.semantics}(#{sexpr.formaldef})"
end

Protected Instance Methods

apply(sexpr, parent = nil) click to toggle source
Calls superclass method
# File lib/predicate/processors/to_s.rb, line 118
def apply(sexpr, parent = nil)
  code = super(sexpr)
  if parent && (parent.priority >= sexpr.priority)
    code = "(" << code << ")"
  end
  code
end
commalist(of) click to toggle source
# File lib/predicate/processors/to_s.rb, line 106
def commalist(of)
  of.map{|o| apply(o) }.join(',')
end
to_literal(x) click to toggle source
# File lib/predicate/processors/to_s.rb, line 110
def to_literal(x)
  case x
  when Placeholder then "$#{x.object_id}"
  when Array then "{" << x.map{|y| to_literal(y) }.join(',') << "}"
  else x.inspect
  end
end