Class: QueryBuilder::Core::Statement Abstract

Inherits:
Base
  • Object
show all
Defined in:
lib/query_builder/core/statement.rb

Overview

This class is abstract.

Abstract base class for CQL statemens (roots of AST)

The statement can belong to some context (keyspace, table). It is created with several clauses (like WHERE, SET etc.)

Direct Known Subclasses

QueryBuilder::CQL::Statements::Base

Instance Attribute Summary

Attributes inherited from Base

#attributes

Instance Method Summary collapse

Methods inherited from Base

#attribute, attribute, attributes, inherited, #to_s

Constructor Details

#initialize(type, *attributes, &block) ⇒ Statement

Initializes the statement with a type, attributes and block

Parameters:

  • block (Proc)

    The block that returns an array of clauses for the statement



23
24
25
26
# File 'lib/query_builder/core/statement.rb', line 23

def initialize(*)
  @clauses = block_given? ? Array[*yield] : []
  super
end

Instance Method Details

#<<(clause) ⇒ QueryBuilder::Statement

Returns a new statement where the clause is added

Parameters:

  • clause (QueryBuilder::Clause)

Returns:

  • (QueryBuilder::Statement)


47
48
49
50
51
# File 'lib/query_builder/core/statement.rb', line 47

def <<(clause)
  new_clauses = @clauses.dup
  new_clauses.delete clause
  self.class.new(attributes) { new_clauses + [clause] }
end

#clauses(type = nil) ⇒ Array<String>

Returns array of chunks of code for the statement’s clauses

Parameters:

  • type (Symbol) (defaults to: nil)

    The optional type to select clauses by

Returns:

  • (Array<String>)


35
36
37
38
# File 'lib/query_builder/core/statement.rb', line 35

def clauses(cond = nil)
  (cond ? @clauses.select { |item| cond.equal? item.type } : @clauses)
    .map(&:to_s)
end