class RailsNewsfeed::Connection

Public Class Methods

batch_cqls(cqls, options = {}) click to toggle source

executes batch

# File lib/rails_newsfeed/connection.rb, line 54
def self.batch_cqls(cqls, options = {})
  return true if cqls.empty?
  batch = connection.batch do |b|
    cqls.each do |cql|
      b.add(cql)
    end
  end
  exec_cql(batch, options)
end
config() click to toggle source

gets config

# File lib/rails_newsfeed/connection.rb, line 37
def self.config
  YAML.load_file('config/cassandra.yml')[Rails.env]
end
connection() click to toggle source

gets cassandra connection

# File lib/rails_newsfeed/connection.rb, line 42
def self.connection
  return @connection if @connection
  cfg = config
  @connection = Cassandra.cluster(cfg || {}).connect(cfg['keyspace'])
end
delete(tbl, schema, conditions, to_cql = false) click to toggle source

deletes

# File lib/rails_newsfeed/connection.rb, line 84
def self.delete(tbl, schema, conditions, to_cql = false)
  cql = "DELETE FROM #{tbl} WHERE #{exported_col_val(schema, conditions).join(' AND ')}"
  return cql if to_cql
  exec_cql(cql)
  true
end
exec_cql(cql, options = {}) click to toggle source

executes cql

# File lib/rails_newsfeed/connection.rb, line 49
def self.exec_cql(cql, options = {})
  connection.execute(cql, options)
end
insert(tbl, schema, vals, to_cql = false) click to toggle source

inserts

# File lib/rails_newsfeed/connection.rb, line 65
def self.insert(tbl, schema, vals, to_cql = false)
  cql = "INSERT INTO #{tbl} (#{vals.keys.join(',')}) VALUES (#{cass_vals(schema, vals)})"
  return cql if to_cql
  exec_cql(cql)
  true
end
select(tbl, schema = {}, columns = '*', conditions = {}, options = {}) click to toggle source

selects

# File lib/rails_newsfeed/connection.rb, line 92
def self.select(tbl, schema = {}, columns = '*', conditions = {}, options = {})
  cql = 'SELECT '
  cql += columns unless columns.is_a?(Array)
  cql += columns.join(',') if columns.is_a?(Array)
  cql += " FROM #{tbl}"
  cql += " WHERE #{exported_col_val(schema, conditions).join(' AND ')}" unless conditions.empty?
  if options[:filtering]
    cql += ' ALLOW FILTERING'
    options.delete(:filtering)
  end
  exec_cql(cql, options)
end
update(tbl, schema, conditions, vals, to_cql = false) click to toggle source

updates

# File lib/rails_newsfeed/connection.rb, line 73
def self.update(tbl, schema, conditions, vals, to_cql = false)
  # unsets primary keys
  conditions.keys.each { |k| vals.delete(k) }
  val_s = exported_col_val(schema, vals).join(',')
  cql = "UPDATE #{tbl} SET #{val_s} WHERE #{exported_col_val(schema, conditions).join(' AND ')}"
  return cql if to_cql
  exec_cql(cql)
  true
end

Private Class Methods

cass_val(val, type) click to toggle source

exports a value to cassandra value

# File lib/rails_newsfeed/connection.rb, line 7
def cass_val(val, type)
  return 'null' if val.nil?
  case type
  when :ascii, :text, :varchar, :timestamp
    return "'#{val.to_s.gsub("'", "''")}'"
  else
    val
  end
end
cass_vals(schema, vals) click to toggle source

exports values to cassandra values

# File lib/rails_newsfeed/connection.rb, line 18
def cass_vals(schema, vals)
  cass_vals = []
  vals.each do |col, val|
    cass_vals.push(cass_val(val, schema[col]))
  end
  cass_vals.join(',')
end
exported_col_val(schema, col_val_pair) click to toggle source

exports column value pair

# File lib/rails_newsfeed/connection.rb, line 27
def exported_col_val(schema, col_val_pair)
  a = []
  col_val_pair.each do |col, val|
    a.push("#{col}=#{cass_val(val, schema[col])}")
  end
  a
end