This commit is contained in:
Loic Nageleisen 2017-03-01 09:31:23 +01:00
parent 3415cf8ad4
commit 2155aa8d43
5 changed files with 75 additions and 5 deletions

View file

@ -6,3 +6,4 @@ gem 'minitest'
gem 'pry'
gem 'rake'
gem 'rubocop'
gem 'sqlite3'

View file

@ -27,6 +27,7 @@ GEM
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
slop (3.6.0)
sqlite3 (1.3.13)
unicode-display_width (1.1.3)
PLATFORMS
@ -38,6 +39,7 @@ DEPENDENCIES
rake
rebel!
rubocop
sqlite3
BUNDLED WITH
1.14.5

View file

@ -9,13 +9,17 @@ module Rebel::SQL
exec(Rebel::SQL.create_table(table_name, desc))
end
def drop_table(table_name)
exec(Rebel::SQL.drop_table(table_name))
end
def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
exec(Rebel::SQL.select(*fields,
from: from,
where: where,
inner: inner,
left: left,
right: right))
from: from,
where: where,
inner: inner,
left: left,
right: right))
end
def insert_into(table_name, *rows)
@ -77,6 +81,12 @@ module Rebel::SQL
SQL
end
def drop_table(table_name)
<<-SQL
DROP TABLE #{Rebel::SQL.name(table_name)};
SQL
end
def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
<<-SQL
SELECT #{names(*fields)} FROM #{name(from)}

8
test/helper.rb Normal file
View file

@ -0,0 +1,8 @@
require 'pry'
require 'sqlite3'
def memdb
SQLite3::Database.new(':memory:').tap do |db|
db.class.instance_eval { alias_method :exec, :execute }
end
end

49
test/test_exec.rb Normal file
View file

@ -0,0 +1,49 @@
require 'minitest/autorun'
require 'helper'
require 'rebel'
class TestExec < Minitest::Test
include Rebel::SQL
def setup
@conn = memdb
end
def test_create_table
assert_raises(SQLite3::SQLException) { conn.execute('SELECT * FROM foo') }
create_table :foo, id: 'INT', col: 'VARCHAR(255)'
assert_equal(conn.execute('SELECT * FROM foo'), [])
end
def test_drop_table
create_table :foo, id: 'INT', col: 'VARCHAR(255)'
assert_equal(conn.execute('SELECT * FROM foo'), [])
drop_table :foo
assert_raises(SQLite3::SQLException) { conn.execute('SELECT * FROM foo') }
end
def test_insert_into
create_table :foo, id: 'INT', col: 'VARCHAR(255)'
insert_into :foo, id: 1, col: 'whatevs'
assert_equal(conn.execute('SELECT * FROM foo'), [[1, 'whatevs']])
end
def test_insert_into_with_many_values
create_table :foo, id: 'INT', col: 'VARCHAR(255)'
insert_into :foo,
{ id: 1, col: 'more' },
{ id: 2, col: 'rows' },
{ id: 3, col: 'for the win' }
assert_equal(conn.execute('SELECT * FROM foo'), [
[1, 'more'],
[2, 'rows'],
[3, 'for the win'],
])
end
def test_select
create_table :foo, id: 'INT', col: 'VARCHAR(255)'
insert_into :foo, id: 1, col: 'whatevs'
assert_equal(select('*', from: :foo), [[1, 'whatevs']])
end
end