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