class Djoini::Table

Holds basic table info and low-level operations

Attributes

columns[RW]
db[RW]
name[RW]
primary_key[RW]

Public Class Methods

new(params) click to toggle source
# File lib/djoini/table.rb, line 6
def initialize(params)
  self.name = params.fetch(:name)
  self.db = Djoini.db
  self.columns = {}

  parse_table_info
end

Public Instance Methods

all() click to toggle source
# File lib/djoini/table.rb, line 40
def all
  db.exec "select * from #{name}"
end
delete(params) click to toggle source
# File lib/djoini/table.rb, line 44
def delete(params)
  db.exec "delete from #{name} where #{bind_vars(params, ', ')}"
end
delete_all() click to toggle source
# File lib/djoini/table.rb, line 48
def delete_all
  db.exec "delete from #{name}"
end
insert(params) click to toggle source
# File lib/djoini/table.rb, line 14
def insert(params)
  check_keys params

  _field_names = params.keys.join(', ')

  _values = params.values.map { |a| %('#{a}') }.join(', ')

  db.exec "insert into #{name} (#{_field_names}) values (#{_values})
           returning #{primary_key}"
end
update(params) click to toggle source
# File lib/djoini/table.rb, line 25
def update(params)
  check_keys params[:fields]

  db.exec "update #{name}
           set #{bind_vars(params[:fields], ', ')}
           where #{bind_vars(params[:where], ' AND ')}"
end
where(params) click to toggle source
# File lib/djoini/table.rb, line 33
def where(params)
  check_keys params

  db.exec "select * from #{name}
           where #{bind_vars(params, ' AND ')}"
end

Private Instance Methods

bind_vars(params, separator) click to toggle source
# File lib/djoini/table.rb, line 61
def bind_vars(params, separator)
  check_keys params

  params.map { |k, v| "#{k} = #{evaluate_value(v)}" }.join(separator)
end
check_keys(params) click to toggle source
# File lib/djoini/table.rb, line 57
def check_keys(params)
  fail unless params.keys.all? { |e| columns.key?(e.to_s) }
end
evaluate_value(value) click to toggle source
# File lib/djoini/table.rb, line 67
def evaluate_value(value)
  return "'#{value}'" unless value.to_s.empty?
  'NULL'
end
parse_table_info() click to toggle source
# File lib/djoini/table.rb, line 72
def parse_table_info
  _raw_data = db.exec("SELECT *
                       FROM information_schema.columns
                       WHERE table_schema = 'public'
                       AND table_name   = '#{name}'")
  _raw_data.each do |row|
    column_name = row['column_name']

    self.primary_key ||= column_name

    columns[column_name] = { type: row['data_type'] }
  end
end