class MSFLVisitors::Visitor::ESTermFilterVisitor
ESTermFilterVisitor
is not currently used and so not all node types are implemented
Constants
- RANGE_OPERATORS
Attributes
visitor[R]
Public Class Methods
new(visitor)
click to toggle source
# File lib/msfl_visitors/visitor.rb, line 258 def initialize(visitor) @visitor = visitor end
Public Instance Methods
visit(node)
click to toggle source
# File lib/msfl_visitors/visitor.rb, line 269 def visit(node) case node when Nodes::Partial { given: Hash[[node.left.accept(visitor), node.right.accept(visitor)]] } when Nodes::Equal { term: { node.left.accept(visitor) => node.right.accept(visitor) } } when Nodes::QueryString { query: { query_string: { default_field: node.left.accept(visitor).to_s, query: node.right.accept(visitor).to_s }}} when Nodes::Field node.value.to_sym when Nodes::Date, Nodes::Time node.value.iso8601 when Nodes::Word, Nodes::Number, Nodes::Boolean, Nodes::Dataset node.value when Nodes::GreaterThan, Nodes::GreaterThanEqual, Nodes::LessThan, Nodes::LessThanEqual { range: { node.left.accept(visitor) => { RANGE_OPERATORS[node.class] => node.right.accept(visitor) } } } when Nodes::Given [:filter, node.contents.first.accept(visitor)] when Nodes::ExplicitFilter [:filter, node.contents.map { |n| n.accept(visitor) }.reduce({}) { |hsh, x| hsh.merge!(x); hsh } ] when Nodes::NamedValue [:aggs, {node.name.accept(visitor).to_sym => Hash[[node.value.accept(visitor)]]}] when Nodes::Containment { terms: {node.left.accept(visitor).to_sym => node.right.accept(visitor)} } when Nodes::Set node.contents.map { |n| n.accept(visitor) } when Nodes::Filter if node.contents.count == 1 node.contents.first.accept visitor else { and: node.contents.map { |n| n.accept(visitor) } } end when Nodes::And { and: node.set.accept(visitor) } when Nodes::Foreign { has_child: Hash[[[:type, node.left.accept(visitor)], node.right.accept(visitor)]] } else fail ArgumentError, "ES TermFilter Visitor cannot visit: #{node.class.name}" end end