class Arel::Nodes::Node - arel-4.0.2 Documentation

# class Arel::Nodes::Node

Abstract base class for all AST nodes

### Public Class Methods

new() click to toggle source

    # File lib/arel/nodes/node.rb, line 14
    def initialize
      @caller = caller.dup
    end

### Public Instance Methods

_caller() click to toggle source

    # File lib/arel/nodes/node.rb, line 10
    def _caller
      @caller
    end

and(right) click to toggle source

Factory method to create an Nodes::And node.

    # File lib/arel/nodes/node.rb, line 35
    def and right
      Nodes::And.new [self, right]
    end

each(&block) click to toggle source

Iterate through AST, nodes will be yielded depth-first

    # File lib/arel/nodes/node.rb, line 49
    def each &block
      return enum_for(:each) unless block_given?

      ::Arel::Visitors::DepthFirst.new(block).accept self
    end

not() click to toggle source

Factory method to create a Nodes::Not node that has the recipient of the caller as a child.

    # File lib/arel/nodes/node.rb, line 22
    def not
      Nodes::Not.new self
    end

or(right) click to toggle source

Factory method to create a Nodes::Grouping node that has an Nodes::Or node as a child.

    # File lib/arel/nodes/node.rb, line 29
    def or right
      Nodes::Grouping.new Nodes::Or.new(self, right)
    end

to_sql(engine = Table.engine) click to toggle source

FIXME: this method should go away. I don't like people calling #to_sql on non-head nodes. This forces us to walk the AST until we can find a node that has a “relation” member.

Maybe we should just use `Table.engine`? :'(

    # File lib/arel/nodes/node.rb, line 44
    def to_sql engine = Table.engine
      engine.connection.visitor.accept self
    end