Class: CassandraModel::QueryBuilder

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/cassandra_model/query_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(record_klass) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



8
9
10
11
12
# File 'lib/cassandra_model/query_builder.rb', line 8

def initialize(record_klass)
  @record_klass = record_klass
  @params = {}
  @options = {}
end

Instance Method Details

#asyncObject



14
15
16
# File 'lib/cassandra_model/query_builder.rb', line 14

def async
  @record_klass.request_async(@params, @options)
end

#check_existsObject



61
62
63
64
# File 'lib/cassandra_model/query_builder.rb', line 61

def check_exists
  @options.merge!(check_exists: true)
  self
end

#create(attributes = {}, create_options = {}) ⇒ Object



43
44
45
# File 'lib/cassandra_model/query_builder.rb', line 43

def create(attributes = {}, create_options = {})
  @record_klass.create(@params.merge(attributes), @options.merge(create_options))
end

#create_async(attributes = {}, create_options = {}) ⇒ Object



39
40
41
# File 'lib/cassandra_model/query_builder.rb', line 39

def create_async(attributes = {}, create_options = {})
  @record_klass.create_async(@params.merge(attributes), @options.merge(create_options))
end

#each_slice(slice_size = nil, &block) ⇒ Object



75
76
77
# File 'lib/cassandra_model/query_builder.rb', line 75

def each_slice(slice_size = nil, &block)
  paginate(slice_size).async.each_slice(&block)
end

#firstObject



35
36
37
# File 'lib/cassandra_model/query_builder.rb', line 35

def first
  @record_klass.first(@params, @options)
end

#first_asyncObject



31
32
33
# File 'lib/cassandra_model/query_builder.rb', line 31

def first_async
  @record_klass.first_async(@params, @options)
end

#first_or_new(attributes) ⇒ Object



57
58
59
# File 'lib/cassandra_model/query_builder.rb', line 57

def first_or_new(attributes)
  first_or_new_async(attributes).get
end

#first_or_new_async(attributes) ⇒ Object



51
52
53
54
55
# File 'lib/cassandra_model/query_builder.rb', line 51

def first_or_new_async(attributes)
  first_async.then do |result|
    result || new(attributes)
  end
end

#getObject



18
19
20
# File 'lib/cassandra_model/query_builder.rb', line 18

def get
  @record_klass.request(@params, @options)
end

#inspectObject



26
27
28
29
# File 'lib/cassandra_model/query_builder.rb', line 26

def inspect
  results = limit(@options[:limit] || 10).get
  "#<#{self.class.to_s}: #{inspected_results(results)}>"
end

#limit(limit) ⇒ Object



92
93
94
95
# File 'lib/cassandra_model/query_builder.rb', line 92

def limit(limit)
  @options[:limit] = limit
  self
end

#new(attributes) ⇒ Object



47
48
49
# File 'lib/cassandra_model/query_builder.rb', line 47

def new(attributes)
  @record_klass.new(@params.merge(attributes))
end

#order(*columns) ⇒ Object



88
89
90
# File 'lib/cassandra_model/query_builder.rb', line 88

def order(*columns)
  append_option(columns, :order_by)
end

#paginate(page_size) ⇒ Object



102
103
104
105
# File 'lib/cassandra_model/query_builder.rb', line 102

def paginate(page_size)
  @options[:page_size] = page_size
  self
end

#pluck(*columns) ⇒ Object



66
67
68
69
70
71
72
73
# File 'lib/cassandra_model/query_builder.rb', line 66

def pluck(*columns)
  query = select(*columns)
  if columns.length == 1
    query.map { |result| pluck_values(columns, result).first }
  else
    query.map { |result| pluck_values(columns, result) }
  end
end

#select(*columns) ⇒ Object



84
85
86
# File 'lib/cassandra_model/query_builder.rb', line 84

def select(*columns)
  append_option(columns, :select)
end

#to_cqlObject



22
23
24
# File 'lib/cassandra_model/query_builder.rb', line 22

def to_cql
  @record_klass.request_meta(@params, @options).first
end

#trace(trace) ⇒ Object



97
98
99
100
# File 'lib/cassandra_model/query_builder.rb', line 97

def trace(trace)
  @options[:trace] = trace
  self
end

#where(params) ⇒ Object



79
80
81
82
# File 'lib/cassandra_model/query_builder.rb', line 79

def where(params)
  @params.merge!(params)
  self
end