Sha256: 19f28bb862252b9c0d8869ef77e9fc9c4caae03c5748eb0376f79ac35624f91d

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

require 'cassanity/argument_generators/where_clause'
require 'cassanity/argument_generators/using_clause'

module Cassanity
  module ArgumentGenerators
    class ColumnFamilyDelete

      # Internal
      def initialize(args = {})
        @using_clause = args.fetch(:using_clause) { UsingClause.new }
        @where_clause = args.fetch(:where_clause) { WhereClause.new }
      end

      # Internal
      def call(args = {})
        name    = args.fetch(:column_family_name)
        where   = args.fetch(:where)
        columns = args.fetch(:columns) { [] }
        using   = args[:using]

        if (keyspace_name = args[:keyspace_name])
          name = "#{keyspace_name}.#{name}"
        end

        column_clause, variables = '', []
        columns ||= []

        cols = []
        [columns].flatten.each do |c|
          if Hash === c
            column_name = c.keys.first
            keys = c.values.first
            [keys].flatten.each do |k| 
              cols << "#{column_name}[?]"
              variables << k
            end
          elsif Cassanity::CollectionItem === c
            cols << "#{c.value}[?]"
            variables << c.key
          else
            cols << c
          end
        end
        column_clause = " #{cols.join(', ')}".rstrip

        cql = "DELETE#{column_clause} FROM #{name}"

        using_cql, *using_variables = @using_clause.call(using: using)
        cql << using_cql
        variables.concat(using_variables)

        where_cql, *where_variables = @where_clause.call(where: where)
        cql << where_cql
        variables.concat(where_variables)

        [cql, *variables]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cassanity-0.6.0 lib/cassanity/argument_generators/column_family_delete.rb