Sha256: 3b498e9f155fec0d0c355d38d301f552dc9020bc27b8ff7c3ac3fff4ea9dff8f

Contents?: true

Size: 864 Bytes

Versions: 19

Compression:

Stored size: 864 Bytes

Contents

module Elastic::Nodes
  class And < Base
    def self.build(_children)
      new.tap { |node| node.children = _children }
    end

    def add_child(_child)
      @children << _child
    end

    def children=(_value)
      @children = _value.dup.to_a
    end

    def traverse(&_block)
      super
      @children.each { |c| c.traverse(&_block) }
    end

    def clone
      prepare_clone super, @children.map(&:clone)
    end

    def simplify
      new_children = @children.map(&:simplify)
      return new_children.first if new_children.count == 1
      prepare_clone(super, new_children)
    end

    def render(_options = {})
      { operation => @children.map { |c| c.render(_options) } }
    end

    private

    def prepare_clone(_clone, _children)
      _clone.children = _children
      _clone
    end

    def operation
      'and'
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
elastic-rails-1.0.4 lib/elastic/nodes/and.rb
elastic-rails-1.0.3 lib/elastic/nodes/and.rb
elastic-rails-1.0.2 lib/elastic/nodes/and.rb
elastic-rails-1.0.1 lib/elastic/nodes/and.rb
elastic-rails-1.0.0 lib/elastic/nodes/and.rb
elastic-rails-0.8.7 lib/elastic/nodes/and.rb
elastic-rails-0.8.6 lib/elastic/nodes/and.rb
elastic-rails-0.8.5 lib/elastic/nodes/and.rb
elastic-rails-0.8.4 lib/elastic/nodes/and.rb
elastic-rails-0.8.3 lib/elastic/nodes/and.rb
elastic-rails-0.8.2 lib/elastic/nodes/and.rb
elastic-rails-0.8.1 lib/elastic/nodes/and.rb
elastic-rails-0.8.0 lib/elastic/nodes/and.rb
elastic-rails-0.7.0 lib/elastic/nodes/and.rb
elastic-rails-0.6.4 lib/elastic/nodes/and.rb
elastic-rails-0.6.3 lib/elastic/nodes/and.rb
elastic-rails-0.6.2 lib/elastic/nodes/and.rb
elastic-rails-0.6.1 lib/elastic/nodes/and.rb
elastic-rails-0.6.0 lib/elastic/nodes/and.rb