swift 0.14.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/API.rdoc +14 -14
- data/README.md +110 -61
- data/Rakefile +2 -5
- data/VERSION +1 -1
- data/lib/swift/adapter/mysql.rb +30 -0
- data/lib/swift/adapter/postgres.rb +27 -0
- data/lib/swift/adapter/sql.rb +23 -29
- data/lib/swift/adapter/sqlite3.rb +59 -0
- data/lib/swift/adapter.rb +129 -70
- data/lib/swift/attribute.rb +19 -8
- data/lib/swift/eventmachine.rb +49 -0
- data/lib/swift/identity_map.rb +7 -7
- data/lib/swift/migrations.rb +12 -12
- data/lib/swift/{scheme.rb → record.rb} +16 -17
- data/lib/swift/result.rb +24 -0
- data/lib/swift/statement.rb +25 -0
- data/lib/swift/synchrony.rb +38 -0
- data/lib/swift/validations.rb +2 -2
- data/lib/swift.rb +8 -6
- data/swift.gemspec +19 -31
- data/test/helper.rb +11 -6
- data/test/test_adapter.rb +11 -25
- data/test/test_async.rb +9 -12
- data/test/test_encoding.rb +2 -2
- data/test/test_error.rb +8 -8
- data/test/test_io.rb +2 -2
- data/test/{test_scheme.rb → test_record.rb} +6 -6
- data/test/test_swift.rb +9 -51
- data/test/test_timestamps.rb +1 -1
- data/test/test_transactions.rb +2 -2
- data/test/test_types.rb +3 -3
- data/test/test_validations.rb +2 -2
- metadata +20 -27
- data/ext/adapter.cc +0 -479
- data/ext/adapter.h +0 -13
- data/ext/adapter_io.cc +0 -62
- data/ext/adapter_io.h +0 -24
- data/ext/attribute.cc +0 -22
- data/ext/attribute.h +0 -8
- data/ext/datetime.cc +0 -96
- data/ext/datetime.h +0 -12
- data/ext/extconf.rb +0 -61
- data/ext/query.cc +0 -104
- data/ext/query.h +0 -20
- data/ext/result.cc +0 -229
- data/ext/result.h +0 -27
- data/ext/statement.cc +0 -116
- data/ext/statement.h +0 -22
- data/ext/swift.cc +0 -114
- data/ext/swift.h +0 -60
- data/lib/swift/db.rb +0 -89
data/lib/swift/validations.rb
CHANGED
@@ -7,7 +7,7 @@ module Swift
|
|
7
7
|
end
|
8
8
|
end # Errors
|
9
9
|
|
10
|
-
class
|
10
|
+
class Record
|
11
11
|
def self.validations &validations
|
12
12
|
define_method :validate do
|
13
13
|
errors = Errors.new(self)
|
@@ -23,5 +23,5 @@ module Swift
|
|
23
23
|
def valid?
|
24
24
|
validate.empty?
|
25
25
|
end
|
26
|
-
end #
|
26
|
+
end # Record
|
27
27
|
end # Swift
|
data/lib/swift.rb
CHANGED
@@ -8,13 +8,11 @@ unless %r{^1\.9\.[3-9]|^2\.}.match(RUBY_VERSION)
|
|
8
8
|
end
|
9
9
|
|
10
10
|
# Extension.
|
11
|
-
require_relative '../ext/swift'
|
12
11
|
require_relative 'swift/adapter'
|
13
12
|
require_relative 'swift/adapter/sql'
|
14
13
|
require_relative 'swift/attribute'
|
15
|
-
require_relative 'swift/db'
|
16
14
|
require_relative 'swift/header'
|
17
|
-
require_relative 'swift/
|
15
|
+
require_relative 'swift/record'
|
18
16
|
require_relative 'swift/type'
|
19
17
|
|
20
18
|
# A rational rudimentary object relational mapper.
|
@@ -26,7 +24,7 @@ require_relative 'swift/type'
|
|
26
24
|
# Swift.trace true # Debugging.
|
27
25
|
# Swift.setup :default, Swift::DB::Postgres, db: 'swift'
|
28
26
|
#
|
29
|
-
# class User < Swift::
|
27
|
+
# class User < Swift::Record
|
30
28
|
# store :users
|
31
29
|
# attribute :id, Swift::Type::Integer, serial: true, key: true
|
32
30
|
# attribute :name, Swift::Type::String
|
@@ -99,8 +97,8 @@ module Swift
|
|
99
97
|
# other_users.execute(32)
|
100
98
|
# end
|
101
99
|
#
|
102
|
-
# @param [Symbol] name
|
103
|
-
# @param [Proc]
|
100
|
+
# @param [Symbol] name Adapter name.
|
101
|
+
# @param [Proc] block Scope this block to the named adapter instead of <tt>:default</tt>.
|
104
102
|
# @return [Swift::Adapter]
|
105
103
|
#--
|
106
104
|
# I pilfered the logic from DM but I don't really understand what is/isn't thread safe.
|
@@ -131,5 +129,9 @@ module Swift
|
|
131
129
|
def schema
|
132
130
|
@schema ||= []
|
133
131
|
end
|
132
|
+
|
133
|
+
def trace io = $stdout, &block
|
134
|
+
Swift.db.trace(io, &block)
|
135
|
+
end
|
134
136
|
end
|
135
137
|
end # Swift
|
data/swift.gemspec
CHANGED
@@ -4,15 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "swift"
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email = [
|
15
|
-
s.extensions = [%q{ext/extconf.rb}]
|
11
|
+
s.authors = ["Shane Hanna", "Bharanee 'Barney' Rathna"]
|
12
|
+
s.date = "2012-08-01"
|
13
|
+
s.description = "A rational rudimentary database abstraction."
|
14
|
+
s.email = ["shane.hanna@gmail.com", "deepfryed@gmail.com"]
|
16
15
|
s.extra_rdoc_files = [
|
17
16
|
"LICENSE",
|
18
17
|
"README.md"
|
@@ -23,32 +22,21 @@ Gem::Specification.new do |s|
|
|
23
22
|
"README.md",
|
24
23
|
"Rakefile",
|
25
24
|
"VERSION",
|
26
|
-
"ext/adapter.cc",
|
27
|
-
"ext/adapter.h",
|
28
|
-
"ext/adapter_io.cc",
|
29
|
-
"ext/adapter_io.h",
|
30
|
-
"ext/attribute.cc",
|
31
|
-
"ext/attribute.h",
|
32
|
-
"ext/datetime.cc",
|
33
|
-
"ext/datetime.h",
|
34
|
-
"ext/extconf.rb",
|
35
|
-
"ext/query.cc",
|
36
|
-
"ext/query.h",
|
37
|
-
"ext/result.cc",
|
38
|
-
"ext/result.h",
|
39
|
-
"ext/statement.cc",
|
40
|
-
"ext/statement.h",
|
41
|
-
"ext/swift.cc",
|
42
|
-
"ext/swift.h",
|
43
25
|
"lib/swift.rb",
|
44
26
|
"lib/swift/adapter.rb",
|
27
|
+
"lib/swift/adapter/mysql.rb",
|
28
|
+
"lib/swift/adapter/postgres.rb",
|
45
29
|
"lib/swift/adapter/sql.rb",
|
30
|
+
"lib/swift/adapter/sqlite3.rb",
|
46
31
|
"lib/swift/attribute.rb",
|
47
|
-
"lib/swift/
|
32
|
+
"lib/swift/eventmachine.rb",
|
48
33
|
"lib/swift/header.rb",
|
49
34
|
"lib/swift/identity_map.rb",
|
50
35
|
"lib/swift/migrations.rb",
|
51
|
-
"lib/swift/
|
36
|
+
"lib/swift/record.rb",
|
37
|
+
"lib/swift/result.rb",
|
38
|
+
"lib/swift/statement.rb",
|
39
|
+
"lib/swift/synchrony.rb",
|
52
40
|
"lib/swift/type.rb",
|
53
41
|
"lib/swift/validations.rb",
|
54
42
|
"swift.gemspec",
|
@@ -62,17 +50,17 @@ Gem::Specification.new do |s|
|
|
62
50
|
"test/test_error.rb",
|
63
51
|
"test/test_identity_map.rb",
|
64
52
|
"test/test_io.rb",
|
65
|
-
"test/
|
53
|
+
"test/test_record.rb",
|
66
54
|
"test/test_swift.rb",
|
67
55
|
"test/test_timestamps.rb",
|
68
56
|
"test/test_transactions.rb",
|
69
57
|
"test/test_types.rb",
|
70
58
|
"test/test_validations.rb"
|
71
59
|
]
|
72
|
-
s.homepage =
|
73
|
-
s.require_paths = [
|
74
|
-
s.rubygems_version =
|
75
|
-
s.summary =
|
60
|
+
s.homepage = "http://github.com/shanna/swift"
|
61
|
+
s.require_paths = ["lib"]
|
62
|
+
s.rubygems_version = "1.8.23"
|
63
|
+
s.summary = "A rational rudimentary database abstraction."
|
76
64
|
|
77
65
|
if s.respond_to? :specification_version then
|
78
66
|
s.specification_version = 3
|
data/test/helper.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
1
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
require 'etc'
|
7
|
+
require 'minitest/autorun'
|
6
8
|
require 'minitest_teardown_hack'
|
7
9
|
require 'swift'
|
10
|
+
require 'swift/adapter/mysql'
|
11
|
+
require 'swift/adapter/postgres'
|
12
|
+
require 'swift/adapter/sqlite3'
|
8
13
|
require 'swift/migrations'
|
9
|
-
require 'etc'
|
10
14
|
|
11
15
|
class MiniTest::Spec
|
12
16
|
def self.supported_by *adapters, &block
|
13
|
-
adapter_defaults = { Swift::
|
17
|
+
adapter_defaults = { Swift::Adapter::Sqlite3 => { db: ':memory:' } }
|
14
18
|
connection_defaults = { db: 'swift_test', user: Etc.getlogin, host: '127.0.0.1' }
|
15
19
|
adapters.each do |adapter|
|
16
20
|
begin
|
21
|
+
#next if Swift::Adapter::Sqlite3 == adapter
|
22
|
+
#next if Swift::Adapter::Mysql == adapter
|
23
|
+
#next if Swift::Adapter::Postgres == adapter
|
17
24
|
Swift.setup :default, adapter, connection_defaults.merge(adapter_defaults.fetch(adapter, {}))
|
18
25
|
rescue => error
|
19
26
|
warn "Unable to setup 'swift_test' db for #{adapter}, #{error.message}. Skipping..."
|
@@ -32,5 +39,3 @@ class MiniTest::Spec
|
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
35
|
-
|
36
|
-
MiniTest::Unit.autorun
|
data/test/test_adapter.rb
CHANGED
@@ -2,13 +2,13 @@ require_relative 'helper'
|
|
2
2
|
require 'stringio'
|
3
3
|
|
4
4
|
describe 'Adapter' do
|
5
|
-
supported_by Swift::
|
5
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
6
6
|
describe 'db' do
|
7
7
|
before do
|
8
8
|
@db = Swift.db
|
9
9
|
@db.execute('drop table if exists users')
|
10
10
|
serial = case @db
|
11
|
-
when Swift::
|
11
|
+
when Swift::Adapter::Sqlite3 then 'integer primary key'
|
12
12
|
else 'serial'
|
13
13
|
end
|
14
14
|
@db.execute %Q{create table users(id #{serial}, name text, email text, created_at timestamp)}
|
@@ -20,12 +20,6 @@ describe 'Adapter' do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
it 'reconnects to db' do
|
24
|
-
Swift.trace true, open('/dev/null', 'w')
|
25
|
-
assert_block { @db.reconnect }
|
26
|
-
Swift.trace false
|
27
|
-
end
|
28
|
-
|
29
23
|
it 'records closed state' do
|
30
24
|
assert !Swift.db.closed?
|
31
25
|
Swift.db.close
|
@@ -43,9 +37,9 @@ describe 'Adapter' do
|
|
43
37
|
end
|
44
38
|
|
45
39
|
describe 'prepared statements' do
|
46
|
-
it 'executes via
|
40
|
+
it 'executes via Adapter#prepare' do
|
47
41
|
result = []
|
48
|
-
|
42
|
+
@db.prepare('select count(*) as n from users').execute.each {|r| result << r[:n] }
|
49
43
|
assert_kind_of Fixnum, result[0]
|
50
44
|
end
|
51
45
|
|
@@ -53,12 +47,6 @@ describe 'Adapter' do
|
|
53
47
|
assert @db.prepare(%q{insert into users (name) values ('Apple Arthurton')}).execute
|
54
48
|
end
|
55
49
|
|
56
|
-
it 'returns the command' do
|
57
|
-
sql = 'select * from users where id = ?'
|
58
|
-
assert_equal sql, @db.prepare(sql).command
|
59
|
-
assert_equal sql, @db.prepare(sql).to_s
|
60
|
-
end
|
61
|
-
|
62
50
|
it 'executes with bind values' do
|
63
51
|
assert @db.prepare(%q{insert into users (name) values (?)}).execute('Apple Arthurton')
|
64
52
|
end
|
@@ -71,12 +59,11 @@ describe 'Adapter' do
|
|
71
59
|
|
72
60
|
it 'has insert_id' do
|
73
61
|
sql = case @db
|
74
|
-
when Swift::
|
62
|
+
when Swift::Adapter::Postgres then %q{insert into users (name) values (?) returning id}
|
75
63
|
else %q{insert into users (name) values (?)}
|
76
64
|
end
|
77
65
|
statement = @db.prepare(sql)
|
78
66
|
assert 1, statement.execute('Connie Arthurton').insert_id
|
79
|
-
assert 1, statement.insert_id # caches insert_id, just interface compatibility with dbic++
|
80
67
|
end
|
81
68
|
end
|
82
69
|
|
@@ -111,8 +98,8 @@ describe 'Adapter' do
|
|
111
98
|
@db.execute('select * from users') {|r| assert_kind_of Hash, r }
|
112
99
|
end
|
113
100
|
|
114
|
-
it 'returns a result set on Adapter#
|
115
|
-
|
101
|
+
it 'returns a result set on Adapter#execute' do
|
102
|
+
assert_respond_to @db.execute('select * from users'), :each
|
116
103
|
end
|
117
104
|
|
118
105
|
it 'returns fields' do
|
@@ -131,16 +118,15 @@ describe 'Adapter' do
|
|
131
118
|
end
|
132
119
|
end
|
133
120
|
|
134
|
-
|
135
|
-
describe 'bulk writes!' do
|
121
|
+
describe 'bulk writes' do
|
136
122
|
it 'writes from an IO object' do
|
137
123
|
data = StringIO.new "Sally Arthurton\tsally@local\nJonas Arthurton\tjonas@local\n"
|
138
|
-
assert_equal 2, @db.write('users', %w{name email}, data)
|
124
|
+
assert_equal 2, @db.write('users', %w{name email}, data).affected_rows
|
139
125
|
end
|
140
126
|
|
141
127
|
it 'writes from a string' do
|
142
128
|
data = "Sally Arthurton\tsally@local\nJonas Arthurton\tjonas@local\n"
|
143
|
-
assert_equal 2, @db.write('users', %w{name email}, data)
|
129
|
+
assert_equal 2, @db.write('users', %w{name email}, data).affected_rows
|
144
130
|
end
|
145
131
|
|
146
132
|
it 'writes with no columns specified' do
|
@@ -148,7 +134,7 @@ describe 'Adapter' do
|
|
148
134
|
data = "1\tSally Arthurton\tsally@local\t#{ts}\n"
|
149
135
|
row = {id: 1, name: 'Sally Arthurton', email: 'sally@local', created_at: ts}
|
150
136
|
|
151
|
-
assert_equal 1, @db.write('users',
|
137
|
+
assert_equal 1, @db.write('users', data).affected_rows
|
152
138
|
assert_equal row, @db.execute('select * from users limit 1').first
|
153
139
|
end
|
154
140
|
end
|
data/test/test_async.rb
CHANGED
@@ -1,26 +1,23 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Adapter' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql do
|
5
5
|
describe 'async operations' do
|
6
6
|
it 'can runs queries async' do
|
7
7
|
rows = []
|
8
|
-
pool = 3.times.map.with_index {|n| Swift.setup n, Swift
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
Thread.new do
|
15
|
-
pool[1].async_execute('select pg_sleep(0.2), 2 as query_id') {|row| rows << row[:query_id]}
|
8
|
+
pool = 3.times.map.with_index {|n| Swift.setup n, Swift.db.class, db: 'swift_test' }
|
9
|
+
func = case Swift.db
|
10
|
+
when Swift::Adapter::Mysql then 'sleep'
|
11
|
+
when Swift::Adapter::Postgres then 'pg_sleep'
|
16
12
|
end
|
17
13
|
|
18
|
-
|
19
|
-
|
14
|
+
3.times do |n|
|
15
|
+
Thread.new do
|
16
|
+
pool[n].query("select #{func}(#{(3 - n) / 10.0}), #{n + 1} as query_id") {|row| rows << row[:query_id]}
|
17
|
+
end
|
20
18
|
end
|
21
19
|
|
22
20
|
Thread.list.reject {|thread| Thread.current == thread}.each(&:join)
|
23
|
-
|
24
21
|
assert_equal [3, 2, 1], rows
|
25
22
|
end
|
26
23
|
end
|
data/test/test_encoding.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Adapter' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
5
5
|
describe 'character encoding' do
|
6
6
|
before do
|
7
7
|
Swift.db do |db|
|
@@ -9,7 +9,7 @@ describe 'Adapter' do
|
|
9
9
|
db.execute %q{create table users(name text)}
|
10
10
|
|
11
11
|
# Mysql on debian at least doesn't default to utf8.
|
12
|
-
if db.kind_of? Swift::
|
12
|
+
if db.kind_of? Swift::Adapter::Mysql
|
13
13
|
db.execute %q{alter table users default character set utf8}
|
14
14
|
db.execute %q{alter table users change name name text charset utf8}
|
15
15
|
end
|
data/test/test_error.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Error' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
5
5
|
describe 'prepare' do
|
6
6
|
before do
|
7
7
|
Swift.db do |db|
|
@@ -11,20 +11,20 @@ describe 'Error' do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'throws a runtime error on invalid sql' do
|
14
|
-
assert_raises(
|
14
|
+
assert_raises(Swift::RuntimeError) do
|
15
15
|
Swift.db.prepare('garble garble garble')
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'throws a runtime error on invalid bind parameters' do
|
20
|
-
assert_raises(
|
20
|
+
assert_raises(Swift::ArgumentError) do
|
21
21
|
Swift.db.prepare('select * from users where id > ?').execute
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
supported_by Swift::
|
27
|
+
supported_by Swift::Adapter::Postgres do
|
28
28
|
describe 'execute' do
|
29
29
|
before do
|
30
30
|
Swift.db do |db|
|
@@ -39,10 +39,10 @@ describe 'Error' do
|
|
39
39
|
|
40
40
|
Swift.db.close
|
41
41
|
|
42
|
-
assert_raises(
|
43
|
-
assert_raises(
|
44
|
-
assert_raises(
|
45
|
-
assert_raises(
|
42
|
+
assert_raises(Swift::ConnectionError) { select1.execute }
|
43
|
+
assert_raises(Swift::ConnectionError) { select2.execute(1) }
|
44
|
+
assert_raises(Swift::ConnectionError) { Swift.db.execute("select * from users") }
|
45
|
+
assert_raises(Swift::ConnectionError) { Swift.db.execute("select * from users where id > ?", 1) }
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
data/test/test_io.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Adapter' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
5
5
|
describe 'Storing binary objects' do
|
6
6
|
before do
|
7
|
-
user = Class.new(Swift::
|
7
|
+
user = Class.new(Swift::Record) do
|
8
8
|
store :users
|
9
9
|
attribute :id, Swift::Type::Integer, serial: true, key: true
|
10
10
|
attribute :name, Swift::Type::String
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
|
-
describe '
|
3
|
+
describe 'record' do
|
4
4
|
before do
|
5
|
-
@user = Class.new(Swift::
|
5
|
+
@user = Class.new(Swift::Record) do
|
6
6
|
store :users
|
7
7
|
attribute :id, Swift::Type::Integer, serial: true, key: true
|
8
8
|
attribute :name, Swift::Type::String, default: "dave"
|
@@ -57,13 +57,13 @@ describe 'scheme' do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
supported_by Swift::
|
60
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
61
61
|
describe 'adapter operations' do
|
62
62
|
before do
|
63
63
|
Swift.db.migrate! @user
|
64
64
|
end
|
65
65
|
|
66
|
-
it 'should return
|
66
|
+
it 'should return record instance when given record in #execute' do
|
67
67
|
user = @user.create
|
68
68
|
assert_equal 1, Swift.db.execute(@user, 'select * from users').first.id
|
69
69
|
end
|
@@ -77,12 +77,12 @@ describe 'scheme' do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'adapter should barf when trying to delete an invalid instance' do
|
80
|
-
assert_raises(ArgumentError) { Swift.db.delete @user, {id: nil, name: 'foo'} }
|
80
|
+
assert_raises(Swift::ArgumentError) { Swift.db.delete @user, {id: nil, name: 'foo'} }
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'should not update without valid keys' do
|
84
84
|
user = @user.new
|
85
|
-
assert_raises(ArgumentError) { user.update(name: 'dave') }
|
85
|
+
assert_raises(Swift::ArgumentError) { user.update(name: 'dave') }
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'should update with valid keys' do
|
data/test/test_swift.rb
CHANGED
@@ -1,70 +1,28 @@
|
|
1
|
-
require 'tempfile'
|
2
1
|
require_relative 'helper'
|
3
2
|
|
4
3
|
describe 'Swift' do
|
5
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Sqlite3 do
|
6
5
|
describe 'Trace' do
|
7
|
-
before do
|
8
|
-
Swift.trace(false)
|
9
|
-
@file = Tempfile.new('swift-test')
|
10
|
-
end
|
11
|
-
|
12
|
-
after do
|
13
|
-
@file.unlink
|
14
|
-
end
|
15
|
-
|
16
6
|
it 'should trace commands' do
|
17
7
|
sql = 'create table users (id integer, name text)'
|
18
|
-
|
19
|
-
Swift.db.execute(sql)
|
20
|
-
|
21
|
-
log = @file.rewind && @file.read
|
22
|
-
assert_match sql, log
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should trace commands in block form' do
|
26
|
-
sql1 = 'create table users (id integer, name text)'
|
27
|
-
sql2 = 'drop table users'
|
28
|
-
|
29
|
-
res = Swift.trace(true, @file) { Swift.db.execute(sql1) && 'foobar' }
|
30
|
-
assert_equal 'foobar', res
|
8
|
+
io = StringIO.new
|
31
9
|
|
32
|
-
Swift.
|
33
|
-
|
34
|
-
log = @file.rewind && @file.read
|
35
|
-
assert_match sql1, log
|
36
|
-
refute_match sql2, log
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'should trace commands in block form and preserve state' do
|
40
|
-
sql1 = 'create table users (id integer, name text)'
|
41
|
-
sql2 = 'drop table users'
|
42
|
-
|
43
|
-
Swift.trace(true, @file)
|
44
|
-
|
45
|
-
Swift.trace(false) do
|
46
|
-
Swift.db.execute(sql1)
|
10
|
+
Swift.trace(io) do
|
11
|
+
Swift.db.execute(sql)
|
47
12
|
end
|
48
13
|
|
49
|
-
|
50
|
-
|
51
|
-
log = @file.rewind && @file.read
|
52
|
-
refute_match sql1, log
|
53
|
-
assert_match sql2, log
|
14
|
+
assert_match sql, io.rewind && io.read
|
54
15
|
end
|
55
16
|
|
56
|
-
it 'should cascade exceptions in
|
57
|
-
|
17
|
+
it 'should cascade exceptions in trace' do
|
18
|
+
sql = 'create table users (id integer, name text)'
|
58
19
|
|
59
20
|
assert_raises(RuntimeError) do
|
60
|
-
Swift.trace(
|
61
|
-
Swift.db.execute(
|
21
|
+
Swift.trace(StringIO.new) do
|
22
|
+
Swift.db.execute(sql)
|
62
23
|
raise "foo"
|
63
24
|
end
|
64
25
|
end
|
65
|
-
|
66
|
-
log = @file.rewind && @file.read
|
67
|
-
assert_match sql1, log
|
68
26
|
end
|
69
27
|
end
|
70
28
|
end
|
data/test/test_timestamps.rb
CHANGED
data/test/test_transactions.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Adapter' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
5
5
|
describe 'transactions' do
|
6
6
|
before do
|
7
7
|
@name = 'test1 - transaction 1'
|
@@ -10,7 +10,7 @@ describe 'Adapter' do
|
|
10
10
|
@db.execute %q{create table users(name text, created_at timestamp)}
|
11
11
|
|
12
12
|
# In case of MyISAM default.
|
13
|
-
@db.kind_of?(Swift::
|
13
|
+
@db.kind_of?(Swift::Adapter::Mysql) && @db.execute('alter table users engine=innodb')
|
14
14
|
|
15
15
|
@sth = @db.prepare('select count(*) as c from users where name = ?')
|
16
16
|
end
|
data/test/test_types.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
3
|
describe 'Adapter' do
|
4
|
-
supported_by Swift::
|
4
|
+
supported_by Swift::Adapter::Postgres, Swift::Adapter::Mysql, Swift::Adapter::Sqlite3 do
|
5
5
|
describe 'typecasting' do
|
6
6
|
before do
|
7
7
|
@db = Swift.db
|
8
8
|
@db.execute %q{drop table if exists users}
|
9
9
|
serial = case @db
|
10
|
-
when Swift::
|
10
|
+
when Swift::Adapter::Sqlite3 then 'integer primary key'
|
11
11
|
else 'serial'
|
12
12
|
end
|
13
13
|
@db.execute %Q{
|
@@ -40,7 +40,7 @@ describe 'Adapter' do
|
|
40
40
|
assert_kind_of DateTime, result[:updated]
|
41
41
|
|
42
42
|
assert_equal dt, result[:updated].strftime('%F %T')
|
43
|
-
assert_equal 65000, result[:updated].to_time.usec unless @db.kind_of?(Swift::
|
43
|
+
assert_equal 65000, result[:updated].to_time.usec unless @db.kind_of?(Swift::Adapter::Mysql)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/test/test_validations.rb
CHANGED
@@ -3,7 +3,7 @@ require 'swift/validations'
|
|
3
3
|
|
4
4
|
describe 'validations' do
|
5
5
|
before do
|
6
|
-
@user = Class.new(Swift::
|
6
|
+
@user = Class.new(Swift::Record) do
|
7
7
|
store :users
|
8
8
|
attribute :id, Swift::Type::Integer, serial: true, key: true
|
9
9
|
attribute :name, Swift::Type::String
|
@@ -40,7 +40,7 @@ describe 'validations' do
|
|
40
40
|
|
41
41
|
describe 'errors' do
|
42
42
|
it 'has relation' do
|
43
|
-
assert_kind_of Swift::
|
43
|
+
assert_kind_of Swift::Record, @user.new.validate.relation
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|