class Qiita::Elasticsearch::Nodes::OrSeparatableNode

Public Class Methods

new(tokens) click to toggle source

@param [Array<Qiita::Elasticsearch::Tokens>] tokens

# File lib/qiita/elasticsearch/nodes/or_separatable_node.rb, line 9
def initialize(tokens)
  @tokens = tokens
end

Public Instance Methods

to_hash() click to toggle source
# File lib/qiita/elasticsearch/nodes/or_separatable_node.rb, line 13
def to_hash
  case tokens_grouped_by_or_token.size
  when 0
    Nodes::AnyNode.new.to_hash
  when 1
    Nodes::FilterableNode.new(tokens_grouped_by_or_token.first).to_hash
  else
    {
      "bool" => {
        "should" => tokens_grouped_by_or_token.map do |tokens|
          Nodes::FilterableNode.new(tokens).to_hash
        end,
      },
    }
  end
end

Private Instance Methods

tokens_grouped_by_or_token() click to toggle source

@return [Array<Array<Qiita::Elasticsearch::Token>>]

# File lib/qiita/elasticsearch/nodes/or_separatable_node.rb, line 33
def tokens_grouped_by_or_token
  @tokens_grouped_by_or_token ||= @tokens.select(&:query?).each_with_object([[]]) do |token, groups|
    if token.or?
      groups << []
    else
      groups.last << token
    end
  end.reject(&:empty?)
end