swift 0.10.0 → 0.11.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/lib/swift/adapter.rb CHANGED
@@ -4,10 +4,6 @@ module Swift
4
4
  #
5
5
  # @abstract
6
6
  # @see Swift::DB See Swift::DB for concrete adapters.
7
- # @todo For the time being all adapters are SQL and DBIC++ centric. It would be super easy to abstract though I
8
- # don't know if you would be better off doing it at the Ruby or DBIC++ level (or both).
9
- #--
10
- # TODO: Extension methods are undocumented.
11
7
  class Adapter
12
8
  attr_reader :options
13
9
 
@@ -29,69 +25,6 @@ module Swift
29
25
  prepare_get(scheme).execute(*resource.tuple.values_at(*scheme.header.keys)).first
30
26
  end
31
27
 
32
- # Select one or more.
33
- #
34
- # @example All.
35
- # Swif.db.all(User)
36
- # @example All with conditions and binds.
37
- # Swift.db.all(User, ':name = ? and :age > ?', 'Apple Arthurton', 32)
38
- # @example Block form iterator.
39
- # Swift.db.all(User, ':age > ?', 32) do |user|
40
- # puts user.name
41
- # end
42
- #
43
- # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
44
- # @param [String] conditions Optional SQL 'where' fragment.
45
- # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
46
- # @param [Proc] &block Optional 'each' iterator block.
47
- # @return [Swift::Result]
48
- # @see Swift::Scheme.all
49
- def all scheme, conditions = '', *binds, &block
50
- where = "where #{exchange_names(scheme, conditions)}" unless conditions.empty?
51
- prepare(scheme, "select * from #{scheme.store} #{where}").execute(*binds, &block)
52
- end
53
-
54
- # Select one.
55
- #
56
- # @example First.
57
- # Swif.db.first(User)
58
- # @example First with conditions and binds.
59
- # Swift.db.first(User, ':name = ? and :age > ?', 'Apple Arthurton', 32)
60
- # @example Block form iterator.
61
- # Swift.db.first(User, ':age > ?', 32) do |user|
62
- # puts user.name
63
- # end
64
- #
65
- # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
66
- # @param [String] conditions Optional SQL 'where' fragment.
67
- # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
68
- # @param [Proc] &block Optional 'each' iterator block.
69
- # @return [Swift::Scheme, nil]
70
- # @see Swift::Scheme.first
71
- def first scheme, conditions = '', *binds, &block
72
- where = "where #{exchange_names(scheme, conditions)}" unless conditions.empty?
73
- prepare(scheme, "select * from #{scheme.store} #{where} limit 1").execute(*binds, &block).first
74
- end
75
-
76
- # Delete one or more.
77
- #
78
- # The SQL condition form of Swift::Adapter.destroy.
79
- #
80
- # @example All.
81
- # Swift.db.delete(User)
82
- # @example All with conditions and binds.
83
- # Swift.db.delete(User, ':name = ? and :age > ?', 'Apple Arthurton', 32)
84
- #
85
- # @param [Swift::Scheme] scheme Concrete scheme subclass
86
- # @param [String] conditions Optional SQL 'where' fragment.
87
- # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
88
- # @return [Swift::Result]
89
- def delete scheme, conditions = '', *binds
90
- sql = "delete from #{scheme.store}"
91
- sql += " where #{exchange_names(scheme, conditions)}" unless conditions.empty?
92
- execute(sql, *binds)
93
- end
94
-
95
28
  # Create one or more.
96
29
  #
97
30
  # @example Scheme.
@@ -152,7 +85,7 @@ module Swift
152
85
  #
153
86
  # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
154
87
  # @param [Swift::Scheme, Hash, Array<Swift::Scheme, Hash>] resources The resources to be updated.
155
- # @return [Swift::Scheme, Swift::Result<Swift::Scheme>]
88
+ # @return [Swift::Scheme, Swift::Result]
156
89
  # @note Hashes will be coerced into a Swift::Scheme resource via Swift::Scheme#new
157
90
  # @note Passing a scalar will result in a scalar.
158
91
  # @see Swift::Scheme#update
@@ -172,33 +105,33 @@ module Swift
172
105
  resources.kind_of?(Array) ? result : result.first
173
106
  end
174
107
 
175
- # Destroy one or more.
108
+ # Delete one or more.
176
109
  #
177
110
  # @example Scheme.
178
111
  # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
179
112
  # user.name = 'Arthur Appleton'
180
- # Swift.db.destroy(User, user)
113
+ # Swift.db.delete(User, user)
181
114
  # @example Coerce hash to scheme.
182
115
  # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
183
116
  # user.name = 'Arthur Appleton'
184
- # Swif.db.destroy(User, user.tuple)
117
+ # Swif.db.delete(User, user.tuple)
185
118
  # @example Multiple resources.
186
119
  # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
187
120
  # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
188
- # Swift.db.destroy(User, [apple, benny])
121
+ # Swift.db.delete(User, [apple, benny])
189
122
  # @example Coerce multiple resources.
190
123
  # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
191
124
  # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
192
- # Swift.db.destroy(User, [apple.tuple, benny.tuple])
125
+ # Swift.db.delete(User, [apple.tuple, benny.tuple])
193
126
  #
194
127
  # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
195
- # @param [Swift::Scheme, Hash, Array<Swift::Scheme, Hash>] resources The resources to be destroyed.
128
+ # @param [Swift::Scheme, Hash, Array<Swift::Scheme, Hash>] resources The resources to be deleteed.
196
129
  # @return [Swift::Scheme, Array<Swift::Scheme>]
197
130
  # @note Hashes will be coerced into a Swift::Scheme resource via Swift::Scheme#new
198
131
  # @note Passing a scalar will result in a scalar.
199
- # @see Swift::Scheme#destroy
200
- def destroy scheme, resources
201
- statement = prepare_destroy(scheme)
132
+ # @see Swift::Scheme#delete
133
+ def delete scheme, resources
134
+ statement = prepare_delete(scheme)
202
135
  result = [resources].flatten.map do |resource|
203
136
  resource = scheme.new(resource) unless resource.kind_of?(scheme)
204
137
  keys = resource.tuple.values_at(*scheme.header.keys)
@@ -215,76 +148,22 @@ module Swift
215
148
  resources.kind_of?(Array) ? result : result.first
216
149
  end
217
150
 
218
-
219
- def migrate! scheme
220
- keys = scheme.header.keys
221
- fields = scheme.header.map{|p| field_definition(p)}.join(', ')
222
- fields += ", primary key (#{keys.join(', ')})" unless keys.empty?
223
-
224
- execute("drop table if exists #{scheme.store} cascade")
225
- execute("create table #{scheme.store} (#{fields})")
226
- end
227
-
228
151
  protected
229
- def exchange_names scheme, query
230
- query.gsub(/:(\w+)/){ scheme.send($1.to_sym).field }
231
- end
232
-
233
- def returning?
234
- raise NotImplementedError
235
- end
236
-
237
- def prepare_cached scheme, name, &block
238
- @prepared ||= Hash.new{|h,k| h[k] = Hash.new} # Autovivification please Matz!
239
- @prepared[scheme][name] ||= prepare(scheme, yield)
240
- end
241
-
242
152
  def prepare_get scheme
243
- prepare_cached(scheme, :get) do
244
- where = scheme.header.keys.map{|key| "#{key} = ?"}.join(' and ')
245
- "select * from #{scheme.store} where #{where} limit 1"
246
- end
153
+ raise NotImplementedError
247
154
  end
248
155
 
249
156
  def prepare_create scheme
250
- prepare_cached(scheme, :create) do
251
- values = (['?'] * scheme.header.insertable.size).join(', ')
252
- returning = "returning #{scheme.header.serial}" if scheme.header.serial and returning?
253
- "insert into #{scheme.store} (#{scheme.header.insertable.join(', ')}) values (#{values}) #{returning}"
254
- end
157
+ raise NotImplementedError
255
158
  end
256
159
 
257
160
  def prepare_update scheme
258
- prepare_cached(scheme, :update) do
259
- set = scheme.header.updatable.map{|field| "#{field} = ?"}.join(', ')
260
- where = scheme.header.keys.map{|key| "#{key} = ?"}.join(' and ')
261
- "update #{scheme.store} set #{set} where #{where}"
262
- end
263
- end
264
-
265
- def prepare_destroy scheme
266
- prepare_cached(scheme, :destroy) do
267
- where = scheme.header.keys.map{|key| "#{key} = ?"}.join(' and ')
268
- "delete from #{scheme.store} where #{where}"
269
- end
161
+ raise NotImplementedError
270
162
  end
271
163
 
272
- def field_definition attribute
273
- "#{attribute.field} " + field_type(attribute)
164
+ def prepare_delete scheme
165
+ raise NotImplementedError
274
166
  end
275
167
 
276
- def field_type attribute
277
- case attribute
278
- when Type::String then 'text'
279
- when Type::Integer then attribute.serial ? 'serial' : 'integer'
280
- when Type::Float then 'float'
281
- when Type::BigDecimal then 'numeric'
282
- when Type::Time then 'timestamp'
283
- when Type::Date then 'date'
284
- when Type::Boolean then 'boolean'
285
- when Type::IO then 'blob'
286
- else 'text'
287
- end
288
- end
289
168
  end # Adapter
290
169
  end # Swift
@@ -29,6 +29,13 @@ module Swift
29
29
  define_scheme_methods(scheme)
30
30
  end
31
31
 
32
+ # The attributes field.
33
+ #
34
+ # @return [String]
35
+ def to_s
36
+ field.to_s
37
+ end
38
+
32
39
  # Evals attribute accessors for this attribute into the scheme.
33
40
  def define_scheme_methods scheme
34
41
  scheme.class_eval <<-RUBY, __FILE__, __LINE__ + 1
data/lib/swift/db.rb CHANGED
@@ -1,6 +1,8 @@
1
+ require 'swift/adapter/sql'
2
+
1
3
  module Swift
2
4
  module DB
3
- class Mysql < Adapter
5
+ class Mysql < Adapter::Sql
4
6
  def initialize options = {}
5
7
  super options.update(driver: 'mysql')
6
8
  end
@@ -20,7 +22,7 @@ module Swift
20
22
  end
21
23
  end # Mysql
22
24
 
23
- class Sqlite3 < Adapter
25
+ class Sqlite3 < Adapter::Sql
24
26
  def initialize options = {}
25
27
  super options.update(driver: 'sqlite3')
26
28
  end
@@ -54,7 +56,7 @@ module Swift
54
56
  end
55
57
  end # Sqlite3
56
58
 
57
- class Postgres < Adapter
59
+ class Postgres < Adapter::Sql
58
60
  def initialize options = {}
59
61
  super options.update(driver: 'postgresql')
60
62
  end
@@ -1,15 +1,58 @@
1
1
  module Swift
2
- class Scheme
3
- def self.migrations &migrations
4
- (class << self; self end).send :define_method, :migrate!, lambda{|db = Swift.db| migrations.call(db) }
5
- end
2
+ module Migrations
3
+ module ClassMethods
4
+ # @example
5
+ # class User < Swift::Scheme
6
+ # migrations do |db|
7
+ # db.execute %q{create table users(id serial, name text, age int)}
8
+ # end
9
+ # end
10
+ #
11
+ # @param [Proc] &migrations
12
+ #
13
+ # @see Swift::Scheme
14
+ def migrations &migrations
15
+ define_singleton_method(:migrate!, lambda{|db = Swift.db| migrations.call(db)})
16
+ end
17
+
18
+ # @example
19
+ # User.migrate!
20
+ #
21
+ # @param [Swift::Adapter] db
22
+ #
23
+ # @see Swift::Scheme
24
+ def migrate! db = Swift.db
25
+ db.migrate! self
26
+ end
27
+ end # ClassMethods
6
28
 
7
- def self.migrate! db = Swift.db
8
- db.migrate! self
9
- end
10
- end # Scheme
29
+ module InstanceMethods
30
+ # @example
31
+ # db.migrate! User
32
+ #
33
+ # @param [Swift::Scheme] scheme
34
+ #
35
+ # @see Swift::Adapter::Sql
36
+ def migrate! scheme
37
+ keys = scheme.header.keys
38
+ fields = scheme.header.map{|p| field_definition(p)}.join(', ')
39
+ fields += ", primary key (#{keys.join(', ')})" unless keys.empty?
40
+
41
+ execute("drop table if exists #{scheme.store} cascade")
42
+ execute("create table #{scheme.store} (#{fields})")
43
+ end
44
+ end # InstanceMethods
45
+ end # Migrations
11
46
 
12
47
  def self.migrate! name = nil
13
48
  schema.each{|scheme| scheme.migrate!(db(name)) }
14
49
  end
50
+
51
+ class Scheme
52
+ extend Migrations::ClassMethods
53
+ end
54
+
55
+ class Adapter::Sql
56
+ include Migrations::InstanceMethods
57
+ end
15
58
  end # Swift
data/lib/swift/scheme.rb CHANGED
@@ -23,7 +23,7 @@ module Swift
23
23
  # @param [Hash] options Create resource and set attributes. <tt>{name: value}</tt>
24
24
  def initialize options = {}
25
25
  @tuple = scheme.header.new_tuple
26
- options.each{|k, v| send(:"#{k}=", v)}
26
+ options.each{|k, v| public_send(:"#{k}=", v)}
27
27
  end
28
28
 
29
29
  # @example
@@ -36,7 +36,7 @@ module Swift
36
36
  #
37
37
  # @param [Hash] options Update attributes. <tt>{name: value}</tt>
38
38
  def update options = {}
39
- options.each{|k, v| send(:"#{k}=", v)}
39
+ options.each{|k, v| public_send(:"#{k}=", v)}
40
40
  Swift.db.update(scheme, self)
41
41
  end
42
42
 
@@ -46,9 +46,9 @@ module Swift
46
46
  # email: 'apple@arthurton.local',
47
47
  # updated_at: Time.now
48
48
  # )
49
- # apple.destroy
50
- def destroy resources = self
51
- Swift.db.destroy(scheme, resources)
49
+ # apple.delete
50
+ def delete resources = self
51
+ Swift.db.delete(scheme, resources)
52
52
  end
53
53
 
54
54
  class << self
@@ -75,7 +75,7 @@ module Swift
75
75
  # @see Swift::Attribute#new
76
76
  def attribute name, type, options = {}
77
77
  header.push(attribute = type.new(self, name, options))
78
- (class << self; self end).send(:define_method, name, lambda{ attribute })
78
+ define_singleton_method(name, lambda{ attribute })
79
79
  end
80
80
 
81
81
  # Define the store (table).
@@ -86,6 +86,13 @@ module Swift
86
86
  name ? @store = name : @store
87
87
  end
88
88
 
89
+ # Store (table) name.
90
+ #
91
+ # @return [String]
92
+ def to_s
93
+ store.to_s
94
+ end
95
+
89
96
  # Create (insert).
90
97
  #
91
98
  # @example
@@ -113,42 +120,31 @@ module Swift
113
120
  Swift.db.get(self, keys)
114
121
  end
115
122
 
116
- # Select one or more.
123
+ # Prepare a statement for on or more executions.
117
124
  #
118
- # @example All.
119
- # User.all
120
- # @example All with conditions and binds.
121
- # User.all(':name = ? and :age > ?', 'Apple Arthurton', 32)
122
- # @example Block form iterator.
123
- # User.all(':age > ?', 32) do |user|
124
- # puts user.name
125
- # end
125
+ # @example
126
+ # sth = User.prepare("select * from #{User} where #{User.name} = ?")
127
+ # sth.execute('apple') #=> Result
128
+ # sth.execute('benny') #=> Result
126
129
  #
127
- # @param [String] conditions Optional SQL 'where' fragment.
128
- # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
129
- # @param [Proc] &block Optional 'each' iterator block.
130
- # @return [Swift::Result]
131
- def all conditions = '', *binds, &block
132
- Swift.db.all(self, conditions, *binds, &block)
130
+ # @param [String] statement Query statement.
131
+ # @return [Swift::Statement]
132
+ def prepare statement = ''
133
+ Swift.db.prepare(self, statement)
133
134
  end
134
135
 
135
- # Select one.
136
+ # Execute a single statement.
136
137
  #
137
- # @example First.
138
- # User.first
139
- # @example First with conditions and binds.
140
- # User.first(':name = ? and :age > ?', 'Apple Arthurton', 32)
141
- # @example Block form iterator.
142
- # User.first(User, 'age > ?', 32) do |user|
143
- # puts user.name
144
- # end
138
+ # @example
139
+ # result = User.execute("select * from #{User} where #{User.name} = ?", 'apple')
140
+ # sth.first # User object.
145
141
  #
146
- # @param [String] conditions Optional SQL 'where' fragment.
147
- # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
148
- # @param [Proc] &block Optional 'each' iterator block.
149
- # @return [Swift::Scheme, nil]
150
- def first conditions = '', *binds, &block
151
- Swift.db.first(self, conditions, *binds, &block)
142
+ # @param [String] statement Query statement.
143
+ # @param [*Object] binds Bind values.
144
+ # @yield [Swift::Result]
145
+ # @return [Swift::Result]
146
+ def execute statement = '', *binds, &block
147
+ Swift.db.execute(self, statement, *binds, &block)
152
148
  end
153
149
  end
154
150
  end # Scheme
data/lib/swift.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # Extension.
2
2
  require_relative '../ext/swift'
3
3
  require_relative 'swift/adapter'
4
+ require_relative 'swift/adapter/sql'
4
5
  require_relative 'swift/attribute'
5
6
  require_relative 'swift/db'
6
7
  require_relative 'swift/header'
@@ -40,7 +41,7 @@ require_relative 'swift/type'
40
41
  # user.update
41
42
  #
42
43
  # # Destroy
43
- # user.destroy
44
+ # user.delete
44
45
  #
45
46
  # == See
46
47
  # * README.rdoc has more usage examples.
data/swift.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{swift}
8
- s.version = "0.10.0"
8
+ s.version = "0.11.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Shane Hanna", "Bharanee 'Barney' Rathna"]
12
- s.date = %q{2011-04-04}
11
+ s.authors = [%q{Shane Hanna}, %q{Bharanee 'Barney' Rathna}]
12
+ s.date = %q{2011-09-30}
13
13
  s.description = %q{A rational rudimentary database abstraction.}
14
- s.email = ["shane.hanna@gmail.com", "deepfryed@gmail.com"]
15
- s.extensions = ["ext/extconf.rb"]
14
+ s.email = [%q{shane.hanna@gmail.com}, %q{deepfryed@gmail.com}]
15
+ s.extensions = [%q{ext/extconf.rb}]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE",
18
18
  "README.rdoc"
@@ -44,6 +44,7 @@ Gem::Specification.new do |s|
44
44
  "ext/swift.h",
45
45
  "lib/swift.rb",
46
46
  "lib/swift/adapter.rb",
47
+ "lib/swift/adapter/sql.rb",
47
48
  "lib/swift/attribute.rb",
48
49
  "lib/swift/db.rb",
49
50
  "lib/swift/header.rb",
@@ -56,6 +57,7 @@ Gem::Specification.new do |s|
56
57
  "swift.gemspec",
57
58
  "test/helper.rb",
58
59
  "test/house-explode.jpg",
60
+ "test/minitest_teardown_hack.rb",
59
61
  "test/test_adapter.rb",
60
62
  "test/test_encoding.rb",
61
63
  "test/test_error.rb",
@@ -63,35 +65,18 @@ Gem::Specification.new do |s|
63
65
  "test/test_io.rb",
64
66
  "test/test_pool.rb",
65
67
  "test/test_scheme.rb",
68
+ "test/test_swift.rb",
66
69
  "test/test_timestamps.rb",
67
70
  "test/test_transactions.rb",
68
71
  "test/test_types.rb",
69
72
  "test/test_validations.rb"
70
73
  ]
71
74
  s.homepage = %q{http://github.com/shanna/swift}
72
- s.require_paths = ["lib"]
73
- s.rubygems_version = %q{1.3.7}
75
+ s.require_paths = [%q{lib}]
76
+ s.rubygems_version = %q{1.8.5}
74
77
  s.summary = %q{A rational rudimentary database abstraction.}
75
- s.test_files = [
76
- "examples/async.rb",
77
- "examples/db.rb",
78
- "examples/scheme.rb",
79
- "test/helper.rb",
80
- "test/test_adapter.rb",
81
- "test/test_encoding.rb",
82
- "test/test_error.rb",
83
- "test/test_identity_map.rb",
84
- "test/test_io.rb",
85
- "test/test_pool.rb",
86
- "test/test_scheme.rb",
87
- "test/test_timestamps.rb",
88
- "test/test_transactions.rb",
89
- "test/test_types.rb",
90
- "test/test_validations.rb"
91
- ]
92
78
 
93
79
  if s.respond_to? :specification_version then
94
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
95
80
  s.specification_version = 3
96
81
 
97
82
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
data/test/helper.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
2
3
 
3
4
  require 'minitest/spec'
4
5
  require 'minitest/unit'
6
+ require 'minitest_teardown_hack'
5
7
  require 'swift'
8
+ require 'swift/migrations'
6
9
  require 'etc'
7
10
 
8
11
  class MiniTest::Spec
@@ -21,6 +24,9 @@ class MiniTest::Spec
21
24
  before do
22
25
  Swift.setup :default, adapter, connection_defaults.merge(adapter_defaults.fetch(adapter, {}))
23
26
  end
27
+ after do
28
+ Swift.db.close
29
+ end
24
30
  block.call(adapter)
25
31
  end
26
32
  end
@@ -0,0 +1,20 @@
1
+ # TODO remove this once the patch gets applied to stock ruby 1.9
2
+ class MiniTest::Spec < MiniTest::Unit::TestCase
3
+
4
+ def self.define_inheritable_method name, &block # :nodoc:
5
+ super_method = self.superclass.instance_method name
6
+
7
+ case name
8
+ when :teardown
9
+ define_method(name) do
10
+ instance_eval(&block)
11
+ super_method.bind(self).call if super_method
12
+ end
13
+ else
14
+ define_method(name) do
15
+ super_method.bind(self).call if super_method
16
+ instance_eval(&block)
17
+ end
18
+ end
19
+ end
20
+ end
data/test/test_scheme.rb CHANGED
@@ -11,6 +11,12 @@ describe 'scheme' do
11
11
  attribute :email, Swift::Type::String
12
12
  attribute :verified, Swift::Type::Boolean, default: false
13
13
  attribute :created_at, Swift::Type::Time, default: proc { Time.now }
14
+
15
+ migrations do |db|
16
+ db.execute %q{
17
+ create users(id serial, name text, age int, height real, email text, verified bool, created_at timestamp)
18
+ }
19
+ end
14
20
  end
15
21
  end
16
22
 
@@ -62,33 +68,16 @@ describe 'scheme' do
62
68
  assert_equal 1, Swift.db.execute(@user, 'select * from users').first.id
63
69
  end
64
70
 
65
- it 'adapter should destroy valid instance' do
71
+ it 'adapter should delete valid instance' do
66
72
  user = @user.create
67
73
  assert_equal 1, user.id
68
74
 
69
- assert Swift.db.destroy @user, user
75
+ assert Swift.db.delete @user, user
70
76
  assert_nil @user.get(id: 1)
71
77
  end
72
78
 
73
- it 'adapter should barf when trying to destroy invalid instance' do
74
- assert_raises(ArgumentError) { Swift.db.destroy @user, {id: nil, name: 'foo'} }
75
- end
76
-
77
- it 'adapter should delete all rows given scheme' do
78
- user = @user.create
79
- assert_equal 1, user.id
80
-
81
- Swift.db.delete @user
82
- assert_nil @user.get(id: 1)
83
- end
84
-
85
- it 'adapter should delete only relevant rows given condition & scheme' do
86
- Swift.db.create(@user, [{name: 'dave'}, {name: 'mike'}])
87
- assert_equal 2, @user.all.rows
88
-
89
- Swift.db.delete @user, ':name = ?', 'dave'
90
- assert_nil @user.first ':name = ?', 'dave'
91
- assert @user.first ':name = ?', 'mike'
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'} }
92
81
  end
93
82
 
94
83
  it 'should not update without valid keys' do
@@ -99,7 +88,13 @@ describe 'scheme' do
99
88
  it 'should update with valid keys' do
100
89
  user = @user.create
101
90
  assert user.update(name: 'dave')
102
- assert_equal 'dave', @user.first.name
91
+ assert_equal 'dave', @user.execute("select * from #{@user}").first.name
92
+ end
93
+
94
+ it 'should destroy' do
95
+ user = @user.create
96
+ assert user.update(name: 'dave')
97
+ assert user.delete
103
98
  end
104
99
  end
105
100
  end