baza 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +157 -0
  3. data/Gemfile +11 -9
  4. data/Gemfile.lock +41 -9
  5. data/README.md +1 -1
  6. data/Rakefile +19 -16
  7. data/VERSION +1 -1
  8. data/baza.gemspec +31 -7
  9. data/config/best_project_practice_rubocop.yml +2 -0
  10. data/config/best_project_practice_rubocop_todo.yml +157 -0
  11. data/lib/baza/base_sql_driver.rb +79 -20
  12. data/lib/baza/cloner.rb +2 -2
  13. data/lib/baza/column.rb +6 -0
  14. data/lib/baza/database.rb +33 -0
  15. data/lib/baza/database_model.rb +26 -0
  16. data/lib/baza/database_model_functionality.rb +10 -0
  17. data/lib/baza/database_model_name.rb +16 -0
  18. data/lib/baza/db.rb +210 -413
  19. data/lib/baza/dbtime.rb +20 -20
  20. data/lib/baza/driver.rb +3 -3
  21. data/lib/baza/drivers/active_record/columns.rb +1 -1
  22. data/lib/baza/drivers/active_record/indexes.rb +1 -1
  23. data/lib/baza/drivers/active_record/result.rb +3 -5
  24. data/lib/baza/drivers/active_record/tables.rb +2 -2
  25. data/lib/baza/drivers/active_record.rb +30 -16
  26. data/lib/baza/drivers/mysql/column.rb +51 -48
  27. data/lib/baza/drivers/mysql/columns.rb +8 -8
  28. data/lib/baza/drivers/mysql/database.rb +28 -0
  29. data/lib/baza/drivers/mysql/databases.rb +35 -0
  30. data/lib/baza/drivers/mysql/index.rb +32 -22
  31. data/lib/baza/drivers/mysql/result.rb +24 -24
  32. data/lib/baza/drivers/mysql/sqlspecs.rb +1 -1
  33. data/lib/baza/drivers/mysql/table.rb +80 -91
  34. data/lib/baza/drivers/mysql/tables.rb +30 -32
  35. data/lib/baza/drivers/mysql/unbuffered_result.rb +5 -5
  36. data/lib/baza/drivers/mysql.rb +127 -220
  37. data/lib/baza/drivers/mysql2/database.rb +2 -0
  38. data/lib/baza/drivers/mysql2/databases.rb +2 -0
  39. data/lib/baza/drivers/mysql2/result.rb +3 -5
  40. data/lib/baza/drivers/mysql2.rb +21 -106
  41. data/lib/baza/drivers/mysql_java/database.rb +2 -0
  42. data/lib/baza/drivers/mysql_java/databases.rb +2 -0
  43. data/lib/baza/drivers/mysql_java.rb +16 -12
  44. data/lib/baza/drivers/sqlite3/column.rb +33 -33
  45. data/lib/baza/drivers/sqlite3/columns.rb +6 -6
  46. data/lib/baza/drivers/sqlite3/database.rb +2 -0
  47. data/lib/baza/drivers/sqlite3/databases.rb +25 -0
  48. data/lib/baza/drivers/sqlite3/index.rb +20 -6
  49. data/lib/baza/drivers/sqlite3/result.rb +16 -17
  50. data/lib/baza/drivers/sqlite3/sqlspecs.rb +1 -1
  51. data/lib/baza/drivers/sqlite3/table.rb +99 -100
  52. data/lib/baza/drivers/sqlite3/tables.rb +30 -23
  53. data/lib/baza/drivers/sqlite3/unbuffered_result.rb +2 -2
  54. data/lib/baza/drivers/sqlite3.rb +27 -14
  55. data/lib/baza/drivers/sqlite3_java/database.rb +2 -0
  56. data/lib/baza/drivers/sqlite3_java/unbuffered_result.rb +2 -2
  57. data/lib/baza/drivers/sqlite3_java.rb +12 -10
  58. data/lib/baza/drivers/sqlite3_rhodes.rb +9 -7
  59. data/lib/baza/dump.rb +55 -55
  60. data/lib/baza/errors.rb +5 -0
  61. data/lib/baza/idquery.rb +25 -25
  62. data/lib/baza/index.rb +6 -0
  63. data/lib/baza/jdbc_driver.rb +6 -8
  64. data/lib/baza/jdbc_result.rb +1 -1
  65. data/lib/baza/model.rb +299 -309
  66. data/lib/baza/model_custom.rb +74 -72
  67. data/lib/baza/model_handler.rb +244 -255
  68. data/lib/baza/model_handler_sqlhelper.rb +122 -132
  69. data/lib/baza/mysql_base_driver.rb +112 -0
  70. data/lib/baza/query_buffer.rb +23 -23
  71. data/lib/baza/result_base.rb +2 -2
  72. data/lib/baza/revision.rb +67 -67
  73. data/lib/baza/row.rb +82 -84
  74. data/lib/baza/sqlspecs.rb +1 -1
  75. data/lib/baza/table.rb +31 -0
  76. data/lib/baza.rb +43 -10
  77. data/shippable.yml +1 -0
  78. data/spec/cloner_spec.rb +4 -4
  79. data/spec/drivers/active_record_mysql2_spec.rb +3 -3
  80. data/spec/drivers/active_record_mysql_spec.rb +2 -2
  81. data/spec/drivers/active_record_sqlite3_spec.rb +2 -2
  82. data/spec/drivers/mysql2_spec.rb +1 -0
  83. data/spec/drivers/mysql_spec.rb +1 -0
  84. data/spec/drivers/sqlite3_spec.rb +4 -5
  85. data/spec/info_active_record_example.rb +4 -6
  86. data/spec/info_active_record_mysql.rb +6 -7
  87. data/spec/info_active_record_mysql2.rb +2 -4
  88. data/spec/info_active_record_mysql2_shippable.rb +2 -4
  89. data/spec/info_active_record_mysql_shippable.rb +2 -4
  90. data/spec/info_active_record_sqlite3.rb +5 -6
  91. data/spec/info_mysql2_example.rb +1 -1
  92. data/spec/info_mysql2_shippable.rb +1 -1
  93. data/spec/info_mysql_example.rb +1 -1
  94. data/spec/info_mysql_shippable.rb +1 -1
  95. data/spec/info_sqlite3.rb +4 -3
  96. data/spec/model_handler_spec.rb +102 -115
  97. data/spec/spec_helper.rb +5 -5
  98. data/spec/support/driver_collection.rb +98 -95
  99. data/spec/support/driver_columns_collection.rb +18 -22
  100. data/spec/support/driver_databases_collection.rb +29 -0
  101. data/spec/support/driver_indexes_collection.rb +7 -6
  102. data/spec/support/driver_tables_collection.rb +38 -26
  103. metadata +49 -3
@@ -5,18 +5,16 @@ shared_examples_for "a baza driver" do
5
5
  let(:db2) { driver2.db }
6
6
  let(:db_with_type_translation) { constant.new(type_translation: true, debug: false).db }
7
7
  let(:row) do
8
- test_table.insert(text: 'Kasper', number: 30, float: 4.5)
9
- db.select(:test, text: 'Kasper').fetch
8
+ test_table.insert(text: "Kasper", number: 30, float: 4.5)
9
+ db.select(:test, text: "Kasper").fetch
10
10
  end
11
11
  let(:test_table) do
12
- db.tables.create("test", {
13
- columns: [
14
- {name: 'id', type: :int, autoincr: true, primarykey: true},
15
- {name: 'text', type: :varchar},
16
- {name: 'number', type: :int, default: 0},
17
- {name: 'float', type: :float, default: 0.0}
18
- ]
19
- })
12
+ db.tables.create("test", columns: [
13
+ {name: "id", type: :int, autoincr: true, primarykey: true},
14
+ {name: "text", type: :varchar},
15
+ {name: "number", type: :int, default: 0},
16
+ {name: "float", type: :float, default: 0.0}
17
+ ])
20
18
  db.tables[:test]
21
19
  end
22
20
 
@@ -59,11 +57,11 @@ shared_examples_for "a baza driver" do
59
57
  rev.init_db(schema: schema, debug: false, db: db)
60
58
 
61
59
  test_table = db.tables[:test_table]
62
- test_table.columns.keys.should include :age
63
- test_table.columns.keys.should include :nickname
60
+ expect(test_table.columns.map(&:name)).to include "age"
61
+ expect(test_table.columns.map(&:name)).to include "nickname"
64
62
  end
65
63
 
66
- it "should do id-queries" do
64
+ it "does id-queries" do
67
65
  test_table
68
66
 
69
67
  rows_count = 1250
@@ -74,21 +72,21 @@ shared_examples_for "a baza driver" do
74
72
  end
75
73
 
76
74
  block_ran = 0
77
- idq = Baza::Idquery.new(db: db, debug: false, table: :test, query: "SELECT id FROM test") do |data|
75
+ idq = Baza::Idquery.new(db: db, debug: false, table: :test, query: "SELECT id FROM test") do |_data|
78
76
  block_ran += 1
79
77
  end
80
78
 
81
79
  raise "Block with should have ran too little: #{block_ran}." if block_ran < rows_count
82
80
 
83
81
  block_ran = 0
84
- db.select(:test, {}, idquery: true) do |data|
82
+ db.select(:test, {}, idquery: true) do |_data|
85
83
  block_ran += 1
86
84
  end
87
85
 
88
86
  raise "Block with should have ran too little: #{block_ran}." if block_ran < rows_count
89
87
  end
90
88
 
91
- it 'does unbuffered queries' do
89
+ it "does unbuffered queries" do
92
90
  test_table
93
91
 
94
92
  10.times do |count|
@@ -104,10 +102,10 @@ shared_examples_for "a baza driver" do
104
102
  expect(count_results).to eq 10
105
103
  end
106
104
 
107
- it "should do upserting" do
105
+ it "does upserting" do
108
106
  test_table.create_columns([{name: "nickname", type: :varchar}])
109
107
 
110
- #Test upserting.
108
+ # Test upserting.
111
109
  data = {text: "upsert - Kasper Johansen"}
112
110
  data2 = {text: "upsert - Kasper Nielsen Johansen"}
113
111
  sel = {nickname: "upsert - kaspernj"}
@@ -131,85 +129,94 @@ shared_examples_for "a baza driver" do
131
129
  table.rows_count.should eq rows_count + 1
132
130
  end
133
131
 
134
- it "should dump as SQL" do
132
+ it "dumps as SQL" do
135
133
  dump = Baza::Dump.new(db: db, debug: false)
136
134
  str_io = StringIO.new
137
135
  dump.dump(str_io)
138
136
  str_io.rewind
139
137
 
140
- #Remember some numbers for validation.
138
+ # Remember some numbers for validation.
141
139
  tables_count = db.tables.list.length
142
140
 
143
- #Remove everything in the db.
141
+ # Remove everything in the db.
144
142
  db.tables.list do |table|
145
143
  table.drop unless table.native?
146
144
  end
147
145
 
148
- #Run the exported SQL.
146
+ # Run the exported SQL.
149
147
  db.transaction do
150
148
  str_io.each_line do |sql|
151
149
  db.q(sql)
152
150
  end
153
151
  end
154
152
 
155
- #Vaildate import.
153
+ # Vaildate import.
156
154
  raise "Not same amount of tables: #{tables_count}, #{db.tables.list.length}" if tables_count != db.tables.list.length
157
155
  end
158
156
 
159
- it "should rename tables in revisions" do
157
+ it "renames tables in revisions" do
160
158
  test_table
161
159
 
162
- Baza::Revision.new.init_db(db: db, debug: false, schema: {
163
- tables: {
164
- new_test_table: {
165
- renames: [:test]
160
+ Baza::Revision.new.init_db(
161
+ db: db,
162
+ debug: false,
163
+ schema: {
164
+ tables: {
165
+ new_test_table: {
166
+ renames: [:test]
167
+ }
166
168
  }
167
169
  }
168
- })
169
- tables = db.tables.list
170
- raise "Didnt expect table 'test' to exist but it did." if tables.key?(:test)
171
- raise "Expected 'new_test_table' to exist but it didnt." if !tables.key?(:new_test_table)
170
+ )
171
+
172
+ tables = db.tables.list.map(&:name)
173
+
174
+ expect(tables).to_not include "test"
175
+ expect(tables).to include "new_test_table"
172
176
  end
173
177
 
174
- it "should rename columns in revisions" do
178
+ it "renames columns in revisions" do
175
179
  test_table
176
180
 
177
- Baza::Revision.new.init_db(db: db, debug: false, schema: {
178
- tables: {
179
- new_test_table: {
180
- columns: [
181
- {name: :new_name, type: :varchar, renames: [:text]}
182
- ]
181
+ Baza::Revision.new.init_db(
182
+ db: db,
183
+ debug: false,
184
+ schema: {
185
+ tables: {
186
+ new_test_table: {
187
+ columns: [
188
+ {name: :new_name, type: :varchar, renames: [:text]}
189
+ ]
190
+ }
183
191
  }
184
192
  }
185
- })
186
- columns = db.tables[:new_test_table].columns
187
- raise "Didnt expect 'text' to exist but it did." if columns.key?(:text)
188
- raise "Expected 'new_name'-column to exist but it didnt." unless columns.key?(:new_name)
193
+ )
194
+
195
+ columns = db.tables[:new_test_table].columns.map(&:name)
196
+ expect(columns).to_not include "text"
197
+ expect(columns).to include "new_name"
189
198
  end
190
199
 
191
- it "should generate proper sql" do
200
+ it "generates proper sql" do
192
201
  time = Time.new(1985, 6, 17, 10, 30)
193
- db.insert(:test, {:date => time}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17 10:30:00')")
202
+ db.insert(:test, {date: time}, return_sql: true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17 10:30:00')")
194
203
 
195
204
  date = Date.new(1985, 6, 17)
196
- db.insert(:test, {:date => date}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17')")
205
+ db.insert(:test, {date: date}, return_sql: true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17')")
197
206
  end
198
207
 
199
- it "should be able to make new connections based on given objects" do
208
+ it "is able to make new connections based on given objects" do
200
209
  # Mysql doesn't support it...
201
210
  unless db.opts.fetch(:type) == :mysql
202
- new_db = Baza::Db.from_object(object: db.conn.conn)
211
+ new_db = Baza::Db.from_object(object: db.driver.conn)
203
212
  end
204
213
  end
205
214
 
206
- it "should be able to do ID-queries through the select-method" do
207
- db.tables.create(:test_table, {
208
- :columns => [
209
- {:name => :idrow, :type => :int, :autoincr => true, :primarykey => true},
210
- {:name => :name, :type => :varchar}
211
- ]
212
- })
215
+ it "is able to do ID-queries through the select-method" do
216
+ db.tables.create(:test_table, columns: [
217
+ {name: :idrow, type: :int, autoincr: true, primarykey: true},
218
+ {name: :name, type: :varchar}
219
+ ])
213
220
 
214
221
  count = 0
215
222
  100.times do
@@ -229,26 +236,24 @@ shared_examples_for "a baza driver" do
229
236
  row[:name].should eq "Kasper #{count_found}"
230
237
  end
231
238
 
232
- expect(count_found).to eq 10000
239
+ expect(count_found).to eq 10_000
233
240
  end
234
241
 
235
242
  it "should be able to use query buffers" do
236
- db.tables.create(:test_table, {
237
- columns: [
238
- {name: :id, type: :int, autoincr: true, primarykey: true},
239
- {name: :name, type: :varchar}
240
- ]
241
- })
243
+ db.tables.create(:test_table, columns: [
244
+ {name: :id, type: :int, autoincr: true, primarykey: true},
245
+ {name: :name, type: :varchar}
246
+ ])
242
247
 
243
248
  upsert = false
244
249
  count_inserts = 0
245
250
  db.q_buffer do |buffer|
246
251
  2500.times do |count|
247
252
  if upsert
248
- buffer.upsert(:test_table, {name: "Kasper #{count}"}, {name: "Kasper #{count}"})
253
+ buffer.upsert(:test_table, {name: "Kasper #{count}"}, name: "Kasper #{count}")
249
254
  upsert = false
250
255
  else
251
- buffer.insert(:test_table, {name: "Kasper #{count}"})
256
+ buffer.insert(:test_table, name: "Kasper #{count}")
252
257
  upsert = true
253
258
  end
254
259
 
@@ -290,34 +295,31 @@ shared_examples_for "a baza driver" do
290
295
 
291
296
  expect(count).to eq 2500
292
297
 
293
- #Test the flush-async which flushes transactions in a thread asyncronous.
298
+ # Test the flush-async which flushes transactions in a thread asyncronous.
294
299
  db.q_buffer(flush_async: true) do |buffer|
295
300
  count = 0
296
301
  db.select(:test_table) do |row|
297
302
  count += 1
298
303
 
299
- if count == 1000
300
- time_start = Time.now.to_f
301
- end
304
+ time_start = Time.now.to_f if count == 1000
302
305
 
303
306
  buffer.delete(:test_table, id: row[:id])
304
307
 
305
- if count == 1000
306
- time_end = Time.now.to_f
308
+ next unless count == 1000
309
+ time_end = Time.now.to_f
307
310
 
308
- time_spent = time_end - time_start
309
- raise "Too much time spent: '#{time_spent}'." if time_spent > 0.01
310
- end
311
+ time_spent = time_end - time_start
312
+ raise "Too much time spent: '#{time_spent}'." if time_spent > 0.01
311
313
  end
312
314
  end
313
315
 
314
316
  expect(test_table.rows_count).to eq 0
315
317
  end
316
318
 
317
- describe 'results' do
319
+ describe "results" do
318
320
  before do
319
- test_table.insert(text: 'test 1')
320
- test_table.insert(text: 'test 2')
321
+ test_table.insert(text: "test 1")
322
+ test_table.insert(text: "test 2")
321
323
  end
322
324
 
323
325
  it '#to_a' do
@@ -342,37 +344,38 @@ shared_examples_for "a baza driver" do
342
344
  end
343
345
  end
344
346
 
345
- it 'counts' do
346
- test_table.insert(text: 'test 1')
347
- expect(db.count(:test, text: 'test 1')).to eq 1
347
+ it "counts" do
348
+ test_table.insert(text: "test 1")
349
+ expect(db.count(:test, text: "test 1")).to eq 1
348
350
  end
349
351
 
350
- it 'doesnt do type translation by default' do
352
+ it "doesnt do type translation by default" do
351
353
  expect(row.fetch(:text).class).to eq String
352
354
  expect(row.fetch(:number).class).to eq String
353
355
  expect(row.fetch(:float).class).to eq String
354
356
  end
355
357
 
356
- it 'does type translation' do
357
- db_with_type_translation.tables.create(:test, {
358
- columns: [
359
- {name: "id", type: :int, autoincr: true, primarykey: true},
360
- {name: "text", type: :varchar},
361
- {name: 'number', type: :int},
362
- {name: 'float', type: :float},
363
- {name: 'created_at', type: :datetime},
364
- {name: 'date', type: :date}
365
- ]
366
- })
358
+ it "does type translation" do
359
+ db_with_type_translation.tables.create(:test, columns: [
360
+ {name: "id", type: :int, autoincr: true, primarykey: true},
361
+ {name: "text", type: :varchar},
362
+ {name: "number", type: :int},
363
+ {name: "float", type: :float},
364
+ {name: "created_at", type: :datetime},
365
+ {name: "date", type: :date}
366
+ ])
367
367
 
368
- db_with_type_translation.insert(:test, text: 'Kasper', number: 30, float: 4.5, created_at: Time.now, date: Date.new(2015, 06, 17))
368
+ db_with_type_translation.insert(:test, text: "Kasper", number: 30, float: 4.5, created_at: Time.now, date: Date.new(2015, 06, 17))
369
369
 
370
- row = db_with_type_translation.select(:test, text: 'Kasper').fetch
370
+ row = db_with_type_translation.select(:test, text: "Kasper").fetch
371
371
 
372
372
  expect(row.fetch(:text).class).to eq String
373
373
  expect(row.fetch(:number).class).to eq Fixnum
374
374
  expect(row.fetch(:float).class).to eq Float
375
- expect(row.fetch(:created_at).class).to eq Time
376
- expect(row.fetch(:date).class).to eq Date
375
+
376
+ unless db.driver.conn.class.name == "ActiveRecord::ConnectionAdapters::SQLite3Adapter"
377
+ expect(row.fetch(:created_at).class).to eq Time
378
+ expect(row.fetch(:date).class).to eq Date
379
+ end
377
380
  end
378
381
  end
@@ -1,15 +1,13 @@
1
1
  shared_examples_for "a baza columns driver" do
2
- let(:driver){ constant.new }
3
- let(:db){ driver.db }
4
- let(:test_table){
5
- db.tables.create("test", {
6
- columns: [
7
- {name: "id", type: :int, autoincr: true, primarykey: true},
8
- {name: "text", type: :varchar}
9
- ]
10
- })
2
+ let(:driver) { constant.new }
3
+ let(:db) { driver.db }
4
+ let(:test_table) do
5
+ db.tables.create("test", columns: [
6
+ {name: "id", type: :int, autoincr: true, primarykey: true},
7
+ {name: "text", type: :varchar}
8
+ ])
11
9
  db.tables[:test]
12
- }
10
+ end
13
11
 
14
12
  before do
15
13
  driver.before
@@ -20,19 +18,17 @@ shared_examples_for "a baza columns driver" do
20
18
  end
21
19
 
22
20
  it "renames columns for renamed tables" do
23
- # Load up columns to make them set table-name.
24
- test_table.columns.each do |name, column|
25
- end
21
+ test_table.columns # Load up columns to make them set table-name.
26
22
 
27
23
  test_table.rename("test2")
28
- test_table.columns[:text].change(name: "text2")
24
+ test_table.column(:text).change(name: "text2")
29
25
 
30
26
  table = db.tables[:test2]
31
- column = table.columns[:text2]
32
- column.table.name.should eq :test2
27
+ column = table.column(:text2)
28
+ column.table.name.should eq "test2"
33
29
  end
34
30
 
35
- it "should create columns right" do
31
+ it "creates columns right" do
36
32
  col_id = test_table.column(:id)
37
33
  col_id.type.should eq :int
38
34
 
@@ -40,20 +36,20 @@ shared_examples_for "a baza columns driver" do
40
36
  col_text.type.should eq :varchar
41
37
  end
42
38
 
43
- it "should be able to change columns" do
39
+ it "is able to change columns" do
44
40
  col_text = test_table.column(:text)
45
41
  col_text.change(name: "text2", type: :int, default: 5)
46
42
 
47
43
  col_text.type.should eq :int
48
44
  col_text.default.should eq "5"
49
- col_text.name.should eq :text2
45
+ col_text.name.should eq "text2"
50
46
  end
51
47
 
52
- it "should be able to drop a column" do
48
+ it "is able to drop a column" do
53
49
  test_table.column(:text).drop
54
50
 
55
- expect {
51
+ expect do
56
52
  test_table.column(:text)
57
- }.to raise_error(Errno::ENOENT)
53
+ end.to raise_error(Baza::Errors::ColumnNotFound)
58
54
  end
59
55
  end
@@ -0,0 +1,29 @@
1
+ shared_examples_for "a baza databases driver" do
2
+ let(:driver) { constant.new }
3
+ let(:driver2) { constant.new }
4
+ let(:db) { driver.db }
5
+ let(:db2) { driver2.db }
6
+ let(:test_database) do
7
+ db.databases.create(name: "baza-test-create", if_not_exists: true)
8
+ db.databases["baza-test-create"]
9
+ end
10
+
11
+ it "renames database" do
12
+ begin
13
+ db.databases["renamed-db"].drop
14
+ rescue Baza::Errors::DatabaseNotFound
15
+ # Ignore - it shouldn't exist
16
+ end
17
+
18
+ test_database.name = "renamed-db"
19
+ test_database.save!
20
+
21
+ expect(test_database.name).to eq "renamed-db"
22
+ end
23
+
24
+ it "drops databases" do
25
+ test_database.drop
26
+
27
+ expect { db.databases["baza-test-create"] }.to raise_error(Baza::Errors::DatabaseNotFound)
28
+ end
29
+ end
@@ -2,7 +2,8 @@ shared_examples_for "a baza indexes driver" do
2
2
  let(:driver) { constant.new }
3
3
  let(:db) { driver.db }
4
4
  let(:test_table) do
5
- db.tables.create("test", {
5
+ db.tables.create(
6
+ "test",
6
7
  columns: [
7
8
  {name: "id", type: :int, autoincr: true, primarykey: true},
8
9
  {name: "text", type: :varchar},
@@ -12,7 +13,7 @@ shared_examples_for "a baza indexes driver" do
12
13
  :text,
13
14
  {name: :email, unique: true, columns: [:email]}
14
15
  ]
15
- })
16
+ )
16
17
  db.tables[:test]
17
18
  end
18
19
 
@@ -35,13 +36,13 @@ shared_examples_for "a baza indexes driver" do
35
36
 
36
37
  table = db.tables[:test2]
37
38
  index = table.index(:index_on_text2)
38
- index.table.name.should eq :test2
39
+ expect(index.table.name).to eq "test2"
39
40
  end
40
41
 
41
- it "should raise an error when index is not found" do
42
- expect {
42
+ it "raises an error when an index isn't found" do
43
+ expect do
43
44
  test_table.index("index_that_doesnt_exist")
44
- }.to raise_error(Errno::ENOENT)
45
+ end.to raise_error(Baza::Errors::IndexNotFound)
45
46
  end
46
47
 
47
48
  describe "#unique?" do
@@ -1,17 +1,15 @@
1
1
  shared_examples_for "a baza tables driver" do
2
- let(:driver){ constant.new }
3
- let(:driver2){ constant.new }
4
- let(:db){ driver.db }
5
- let(:db2){ driver2.db }
6
- let(:test_table){
7
- db.tables.create("test", {
8
- columns: [
9
- {name: "id", type: :int, autoincr: true, primarykey: true},
10
- {name: "text", type: :varchar}
11
- ]
12
- })
2
+ let(:driver) { constant.new }
3
+ let(:driver2) { constant.new }
4
+ let(:db) { driver.db }
5
+ let(:db2) { driver2.db }
6
+ let(:test_table) do
7
+ db.tables.create("test", columns: [
8
+ {name: "id", type: :int, autoincr: true, primarykey: true},
9
+ {name: "text", type: :varchar}
10
+ ])
13
11
  db.tables[:test]
14
- }
12
+ end
15
13
 
16
14
  before do
17
15
  driver.before
@@ -21,36 +19,40 @@ shared_examples_for "a baza tables driver" do
21
19
  driver.after
22
20
  end
23
21
 
24
- it "should create tables" do
25
- test_table.name.should eq :test
26
- db.tables[:test].should_not eq nil
22
+ it "creates tables" do
23
+ expect(test_table.name).to eq "test"
24
+ expect(db.tables[:test]).to_not eq nil
27
25
  end
28
26
 
29
- it "should list tables" do
27
+ it "#list" do
30
28
  test_table
31
- db.tables.list.values.should include test_table
29
+ expect(db.tables.list).to include test_table
32
30
  end
33
31
 
34
- it "should optimize tables" do
32
+ it "#optimize" do
35
33
  test_table.optimize
36
34
  # FIXME: How to validate?
37
35
  end
38
36
 
39
- it "should truncate tables" do
37
+ it "#truncate" do
40
38
  test_table
41
39
 
42
40
  db.insert(:test, text: "test")
43
- test_table.rows_count.should eq 1
41
+ expect(db.select(:test).fetch.fetch(:id).to_i).to eq 1
42
+ expect(test_table.rows_count).to eq 1
44
43
 
45
44
  # Throw out invalid encoding because it will make dumping fail.
46
45
  db.tables[:test].truncate
47
- test_table.rows_count.should eq 0
46
+ expect(test_table.rows_count).to eq 0
47
+
48
+ db.insert(:test, text: "test")
49
+ expect(db.select(:test).fetch.fetch(:id).to_i).to eq 1
48
50
  end
49
51
 
50
52
  it "#clone" do
51
53
  test_table
52
54
  test_table.create_indexes([{name: "index_on_text", columns: ["text"]}])
53
- test_table.indexes.length.should eq 1
55
+ expect(test_table.indexes.length).to eq 1
54
56
 
55
57
  test_table.insert(text: "test1")
56
58
  test_table.insert(text: "test2")
@@ -58,9 +60,19 @@ shared_examples_for "a baza tables driver" do
58
60
  test_table.clone("test2")
59
61
  test_table2 = db.tables[:test2]
60
62
 
61
- test_table2.columns.length.should eq test_table.columns.length
62
- test_table2.indexes.length.should eq test_table.indexes.length
63
- test_table2.rows_count.should eq test_table.rows_count
64
- test_table2.rows_count.should eq 2
63
+ expect(test_table2.columns.length).to eq test_table.columns.length
64
+ expect(test_table2.indexes.length).to eq test_table.indexes.length
65
+ expect(test_table2.rows_count).to eq test_table.rows_count
66
+ expect(test_table2.rows_count).to eq 2
67
+ end
68
+
69
+ describe "#reload" do
70
+ it "reloads the data on the table" do
71
+ test_table.reload
72
+ expect(test_table.name).to eq "test"
73
+
74
+ test_table.drop
75
+ expect { test_table.reload }.to raise_error(Baza::Errors::TableNotFound)
76
+ end
65
77
  end
66
78
  end