class MSFLVisitors::Visitor::TermFilterVisitor
Constants
- BINARY_OPERATORS
- ITERATOR_OPERATORS
Attributes
visitor[R]
Public Class Methods
new(visitor)
click to toggle source
# File lib/msfl_visitors/visitor.rb, line 80 def initialize(visitor) @visitor = visitor end
Public Instance Methods
visit(node)
click to toggle source
# File lib/msfl_visitors/visitor.rb, line 99 def visit(node) case node when Nodes::Field node.value.to_s when Nodes::Regex regex_escape node.value.to_s when Nodes::Word "\"#{node.value}\"" when Nodes::Date, Nodes::Time "\"#{node.value.iso8601}\"" when Nodes::Number, Nodes::Boolean node.value when Nodes::QueryString %(q(query_string:{default_field:"#{node.left.accept(visitor)}", query:#{node.right.accept(visitor)}})) when Nodes::Match if node.right.is_a? Nodes::Set escaped_str_frags = node.right.contents.map { |right_child| composable_expr_for(MSFLVisitors::Nodes::Regex.new(right_child.value.to_s).accept(visitor).inspect) } escaped_str = "(" + escaped_str_frags.join('|') + ")" "#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} " + %r[.*#{escaped_str}.*].inspect else "#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} " + MSFLVisitors::Nodes::Regex.new(node.right.value.to_s).accept(visitor).inspect end when Nodes::Containment, Nodes::GreaterThan, Nodes::GreaterThanEqual, Nodes::Equal, Nodes::LessThan, Nodes::LessThanEqual "#{node.left.accept(visitor)} #{BINARY_OPERATORS[node.class]} #{node.right.accept(visitor)}" when Nodes::Set "[ " + node.contents.map { |n| n.accept(visitor) }.join(" , ") + " ]" when Nodes::Filter if node.contents.count == 1 node.contents.first.accept(visitor) else node.contents.map { |n| "( " + n.accept(visitor) + " )" }.join(" & ") end when Nodes::Iterator if node.set.contents.count == 1 node.set.contents.first.accept(visitor) else node.set.contents.map { |n| "( " + n.accept(visitor) + " )" }.join(" #{ITERATOR_OPERATORS[node.class]} ") end when Nodes::Foreign "#{node.left.accept visitor}.filter { #{node.right.accept visitor} }" when Nodes::Dataset "has_child( :#{node.value} )" else fail ArgumentError, "TERMFILTER cannot visit: #{node.class.name}" end end