Sha256: 120f785ce745cc4c7651eea3b2a8f721cd6e437e596c84cbc01fca474126ccb7

Contents?: true

Size: 1.39 KB

Versions: 3

Compression:

Stored size: 1.39 KB

Contents

module AQL
  class Node
    class Operation
      # Base class for unary operations
      class Unary < self
        include Concord.new(:expression)

      private

        # Emit node
        #
        # @param [Buffer] buffer
        #
        # @return [undefined]
        #
        # @api private
        #
        def emit(buffer)
          buffer.append("#{keyword} ")
          expression.visit(buffer)
        end

        # Return keyword
        #
        # @return [Symbol]
        #
        # @api private
        #
        def keyword
          self.class::KEYWORD
        end

        # Filter operation
        class Filter < self
          KEYWORD = :FILTER
        end

        # Return operation
        class Return < self
          KEYWORD = :RETURN
        end

        # Abstract base class for sort orders
        class Direction < self

        private

          # Emit node
          #
          # @param [Buffer] buffer
          #
          # @return [undefined]
          #
          # @api private
          #
          def emit(buffer)
            expression.visit(buffer)
            buffer.append(" #{keyword}")
          end

          # Asecnding sort direction
          class Ascending < self
            KEYWORD = :ASC
          end

          # Descending sort direction
          class Descending < self
            KEYWORD = :DESC
          end

        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aql-0.0.3 lib/aql/node/operation/unary.rb
aql-0.0.2 lib/aql/node/operation/unary.rb
aql-0.0.1 lib/aql/node/operation/unary.rb