baza 0.0.20 → 0.0.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +84 -0
- data/.rubocop_todo.yml +17 -135
- data/.travis.yml +21 -0
- data/Gemfile +10 -7
- data/Gemfile.lock +39 -44
- data/README.md +61 -3
- data/VERSION +1 -1
- data/baza.gemspec +146 -98
- data/config/best_project_practice_rubocop.yml +8 -0
- data/config/best_project_practice_rubocop_todo.yml +6 -0
- data/lib/baza.rb +8 -12
- data/lib/baza/base_sql_driver.rb +198 -52
- data/lib/baza/cloner.rb +1 -0
- data/lib/baza/column.rb +26 -0
- data/lib/baza/database.rb +19 -3
- data/lib/baza/db.rb +69 -271
- data/lib/baza/driver.rb +1 -6
- data/lib/baza/{drivers → driver}/active_record.rb +65 -21
- data/lib/baza/{drivers → driver}/active_record/columns.rb +0 -0
- data/lib/baza/driver/active_record/commands.rb +10 -0
- data/lib/baza/driver/active_record/databases.rb +10 -0
- data/lib/baza/{drivers → driver}/active_record/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/active_record/result.rb +3 -1
- data/lib/baza/{drivers → driver}/active_record/tables.rb +0 -0
- data/lib/baza/driver/active_record/users.rb +12 -0
- data/lib/baza/{drivers → driver}/mysql.rb +9 -26
- data/lib/baza/{drivers → driver}/mysql/column.rb +14 -35
- data/lib/baza/{drivers → driver}/mysql/columns.rb +9 -12
- data/lib/baza/driver/mysql/commands.rb +39 -0
- data/lib/baza/driver/mysql/database.rb +64 -0
- data/lib/baza/driver/mysql/databases.rb +63 -0
- data/lib/baza/{drivers → driver}/mysql/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/result.rb +15 -7
- data/lib/baza/{drivers → driver}/mysql/sqlspecs.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql/table.rb +27 -43
- data/lib/baza/{drivers → driver}/mysql/tables.rb +5 -34
- data/lib/baza/{drivers → driver}/mysql/unbuffered_result.rb +8 -2
- data/lib/baza/driver/mysql/user.rb +22 -0
- data/lib/baza/driver/mysql/users.rb +39 -0
- data/lib/baza/{drivers → driver}/mysql2.rb +19 -49
- data/lib/baza/{drivers → driver}/mysql2/column.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/columns.rb +0 -0
- data/lib/baza/driver/mysql2/commands.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql2/database.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/databases.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/result.rb +3 -1
- data/lib/baza/{drivers → driver}/mysql2/table.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql2/tables.rb +0 -0
- data/lib/baza/driver/mysql2/user.rb +2 -0
- data/lib/baza/driver/mysql2/users.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql_java.rb +60 -38
- data/lib/baza/{drivers → driver}/mysql_java/column.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/columns.rb +0 -0
- data/lib/baza/driver/mysql_java/commands.rb +2 -0
- data/lib/baza/driver/mysql_java/database.rb +2 -0
- data/lib/baza/driver/mysql_java/databases.rb +2 -0
- data/lib/baza/{drivers → driver}/mysql_java/index.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/table.rb +0 -0
- data/lib/baza/{drivers → driver}/mysql_java/tables.rb +0 -0
- data/lib/baza/driver/mysql_java/user.rb +2 -0
- data/lib/baza/driver/mysql_java/users.rb +2 -0
- data/lib/baza/driver/pg.rb +80 -0
- data/lib/baza/driver/pg/column.rb +125 -0
- data/lib/baza/driver/pg/columns.rb +37 -0
- data/lib/baza/driver/pg/commands.rb +35 -0
- data/lib/baza/driver/pg/create_index_sql_creator.rb +51 -0
- data/lib/baza/driver/pg/database.rb +89 -0
- data/lib/baza/driver/pg/databases.rb +79 -0
- data/lib/baza/driver/pg/index.rb +35 -0
- data/lib/baza/driver/pg/indexes.rb +5 -0
- data/lib/baza/driver/pg/result.rb +139 -0
- data/lib/baza/driver/pg/table.rb +184 -0
- data/lib/baza/driver/pg/tables.rb +45 -0
- data/lib/baza/{drivers → driver}/sqlite3.rb +6 -24
- data/lib/baza/{drivers → driver}/sqlite3/column.rb +22 -24
- data/lib/baza/{drivers → driver}/sqlite3/columns.rb +6 -6
- data/lib/baza/driver/sqlite3/commands.rb +28 -0
- data/lib/baza/{drivers → driver}/sqlite3/database.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/databases.rb +0 -1
- data/lib/baza/{drivers → driver}/sqlite3/index.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/result.rb +14 -6
- data/lib/baza/{drivers → driver}/sqlite3/sqlspecs.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3/table.rb +25 -16
- data/lib/baza/{drivers → driver}/sqlite3/tables.rb +5 -6
- data/lib/baza/{drivers → driver}/sqlite3/unbuffered_result.rb +8 -2
- data/lib/baza/{drivers → driver}/sqlite3_java.rb +13 -23
- data/lib/baza/{drivers → driver}/sqlite3_java/column.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/columns.rb +0 -0
- data/lib/baza/driver/sqlite3_java/commands.rb +2 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/database.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/index.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/indexes.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/table.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/tables.rb +0 -0
- data/lib/baza/{drivers → driver}/sqlite3_java/unbuffered_result.rb +14 -9
- data/lib/baza/{drivers → driver}/sqlite3_rhodes.rb +6 -24
- data/lib/baza/errors.rb +2 -0
- data/lib/baza/idquery.rb +15 -8
- data/lib/baza/index.rb +7 -0
- data/lib/baza/jdbc_driver.rb +4 -16
- data/lib/baza/jdbc_result.rb +20 -12
- data/lib/baza/mysql_base_driver.rb +7 -7
- data/lib/baza/query_buffer.rb +20 -19
- data/lib/baza/row.rb +16 -16
- data/lib/baza/sql_queries.rb +3 -0
- data/lib/baza/sql_queries/generic_insert.rb +81 -0
- data/lib/baza/sql_queries/generic_update.rb +31 -0
- data/lib/baza/sql_queries/mysql_upsert.rb +52 -0
- data/lib/baza/sql_queries/mysql_upsert_duplicate_key.rb +57 -0
- data/lib/baza/sql_queries/non_atomic_upsert.rb +25 -0
- data/lib/baza/sql_queries/postgres_upsert_duplicate_key.rb +118 -0
- data/lib/baza/sql_queries/select.rb +170 -0
- data/lib/baza/sql_queries/sqlite_upsert_duplicate_key.rb +99 -0
- data/lib/baza/table.rb +35 -8
- data/spec/active_record/models/user.rb +3 -0
- data/spec/{cloner_spec.rb → baza/cloner_spec.rb} +0 -0
- data/spec/drivers/active_record_mysql2_spec.rb +5 -3
- data/spec/drivers/active_record_mysql_spec.rb +2 -1
- data/spec/drivers/active_record_pg_spec.rb +20 -0
- data/spec/drivers/active_record_sqlite3_spec.rb +2 -1
- data/spec/drivers/mysql2_spec.rb +1 -1
- data/spec/drivers/mysql_spec.rb +10 -10
- data/spec/drivers/pg_spec.rb +18 -0
- data/spec/drivers/sqlite3_spec.rb +7 -8
- data/spec/info_active_record_example.rb +1 -1
- data/spec/{info_active_record_mysql2.rb → info_active_record_mysql2_example.rb} +3 -2
- data/spec/info_active_record_mysql2_travis.rb +35 -0
- data/spec/{info_active_record_mysql.rb → info_active_record_mysql_example.rb} +5 -4
- data/spec/info_active_record_mysql_travis.rb +36 -0
- data/spec/info_active_record_pg_example.rb +36 -0
- data/spec/info_active_record_pg_travis.rb +34 -0
- data/spec/info_active_record_sqlite3.rb +1 -1
- data/spec/info_mysql2_example.rb +1 -3
- data/spec/{info_mysql2_shippable.rb → info_mysql2_travis.rb} +2 -4
- data/spec/info_mysql_example.rb +1 -3
- data/spec/{info_mysql_shippable.rb → info_mysql_travis.rb} +2 -4
- data/spec/info_pg_example.rb +22 -0
- data/spec/info_pg_travis.rb +20 -0
- data/spec/info_sqlite3.rb +1 -3
- data/spec/spec_helper.rb +1 -1
- data/spec/support/driver_active_record_collection.rb +62 -0
- data/spec/support/driver_collection.rb +136 -121
- data/spec/support/driver_columns_collection.rb +19 -10
- data/spec/support/driver_databases_collection.rb +23 -1
- data/spec/support/driver_indexes_collection.rb +2 -2
- data/spec/support/driver_tables_collection.rb +24 -4
- data/spec/support/driver_users_collection.rb +53 -0
- metadata +185 -104
- data/lib/baza/drivers/mysql/database.rb +0 -28
- data/lib/baza/drivers/mysql/databases.rb +0 -35
- data/lib/baza/drivers/mysql_java/database.rb +0 -2
- data/lib/baza/drivers/mysql_java/databases.rb +0 -2
- data/lib/baza/model.rb +0 -875
- data/lib/baza/model_custom.rb +0 -155
- data/lib/baza/model_handler.rb +0 -910
- data/lib/baza/model_handler_sqlhelper.rb +0 -484
- data/lib/baza/revision.rb +0 -383
- data/shippable.yml +0 -17
- data/spec/info_active_record_mysql2_shippable.rb +0 -34
- data/spec/info_active_record_mysql_shippable.rb +0 -34
- data/spec/model_handler_spec.rb +0 -431
data/spec/model_handler_spec.rb
DELETED
@@ -1,431 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "Objects" do
|
4
|
-
let(:db_path) { "#{Dir.tmpdir}/baza_model_handler_test_#{Time.now.to_f}_#{Random.rand}.sqlite3" }
|
5
|
-
let(:db) do
|
6
|
-
require "sqlite3" unless RUBY_ENGINE == "jruby"
|
7
|
-
require "tmpdir"
|
8
|
-
|
9
|
-
File.unlink(db_path) if File.exist?(db_path)
|
10
|
-
db = Baza::Db.new(type: :sqlite3, path: db_path, debug: false)
|
11
|
-
|
12
|
-
schema = {
|
13
|
-
tables: {
|
14
|
-
"Group" => {
|
15
|
-
columns: [
|
16
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
17
|
-
{name: :groupname, type: :varchar}
|
18
|
-
]
|
19
|
-
},
|
20
|
-
"Person" => {
|
21
|
-
columns: [
|
22
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
23
|
-
{name: :name, type: :varchar}
|
24
|
-
]
|
25
|
-
},
|
26
|
-
"Project" => {
|
27
|
-
columns: [
|
28
|
-
{name: :id, type: :int, autoincr: true, primarykey: true}
|
29
|
-
]
|
30
|
-
},
|
31
|
-
"Task" => {
|
32
|
-
columns: [
|
33
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
34
|
-
{name: :name, type: :varchar},
|
35
|
-
{name: :person_id, type: :int},
|
36
|
-
{name: :project_id, type: :int}
|
37
|
-
]
|
38
|
-
},
|
39
|
-
"Timelog" => {
|
40
|
-
columns: [
|
41
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
42
|
-
{name: :person_id, type: :int}
|
43
|
-
]
|
44
|
-
},
|
45
|
-
"User" => {
|
46
|
-
columns: [
|
47
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
48
|
-
{name: :username, type: :varchar}
|
49
|
-
]
|
50
|
-
}
|
51
|
-
}
|
52
|
-
}
|
53
|
-
Baza::Revision.new.init_db(schema: schema, db: db)
|
54
|
-
|
55
|
-
db
|
56
|
-
end
|
57
|
-
|
58
|
-
let(:ob) do
|
59
|
-
ob = Baza::ModelHandler.new(
|
60
|
-
db: db,
|
61
|
-
datarow: true,
|
62
|
-
require: false,
|
63
|
-
array_enum: true,
|
64
|
-
models: {
|
65
|
-
User: {
|
66
|
-
cache_ids: true
|
67
|
-
}
|
68
|
-
}
|
69
|
-
)
|
70
|
-
|
71
|
-
ob.adds(:User, [
|
72
|
-
{username: "User 1"},
|
73
|
-
{username: "User 2"},
|
74
|
-
{username: "User 3"},
|
75
|
-
{username: "User 4"},
|
76
|
-
{username: "User 5"}
|
77
|
-
])
|
78
|
-
|
79
|
-
ob
|
80
|
-
end
|
81
|
-
|
82
|
-
let(:task) { ob.add(:Task, name: "Test task", person_id: person.id) }
|
83
|
-
let(:person) { ob.add(:Person, name: "Kasper") }
|
84
|
-
let(:project) { ob.add(:Project) }
|
85
|
-
|
86
|
-
before(:all) do
|
87
|
-
class User < Baza::Model; end
|
88
|
-
|
89
|
-
class Project < Baza::Model
|
90
|
-
has_many [
|
91
|
-
{class: :Task, col: :project_id, depends: true}
|
92
|
-
]
|
93
|
-
end
|
94
|
-
|
95
|
-
class Task < Baza::Model
|
96
|
-
has_one [
|
97
|
-
{class: :Person, required: true},
|
98
|
-
:Project
|
99
|
-
]
|
100
|
-
end
|
101
|
-
|
102
|
-
class Person < Baza::Model
|
103
|
-
has_one [:Project]
|
104
|
-
|
105
|
-
has_many [
|
106
|
-
{class: :Timelog, autozero: true}
|
107
|
-
]
|
108
|
-
|
109
|
-
def html
|
110
|
-
self[:name]
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class Timelog < Baza::Model; end
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should be able to cache rows" do
|
118
|
-
expect(ob.ids_cache[:User].length).to eq 5
|
119
|
-
|
120
|
-
user = ob.get(:User, 4)
|
121
|
-
raise "No user returned." unless user
|
122
|
-
ob.delete(user)
|
123
|
-
|
124
|
-
expect(ob.ids_cache[:User].length).to eq 4
|
125
|
-
|
126
|
-
ob.deletes([ob.get(:User, 1), ob.get(:User, 2)])
|
127
|
-
expect(ob.ids_cache[:User].length).to eq 2
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should be able to do 'select_col_as_array'" do
|
131
|
-
res = ob.list(:User, "select_col_as_array" => "id").to_a
|
132
|
-
expect(res.length).to eq 5
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should work even though stressed by threads (thread-safe)." do
|
136
|
-
userd = []
|
137
|
-
10.upto(25) do |i|
|
138
|
-
userd << {username: "User #{i}"}
|
139
|
-
end
|
140
|
-
|
141
|
-
ob.adds(:User, userd)
|
142
|
-
users = ob.list(:User).to_a
|
143
|
-
|
144
|
-
# Stress it to test threadsafety...
|
145
|
-
threads = []
|
146
|
-
0.upto(5) do |tc|
|
147
|
-
threads << Thread.new do
|
148
|
-
0.upto(5) do |ic|
|
149
|
-
user = ob.add(:User, username: "User #{tc}-#{ic}")
|
150
|
-
raise "No user returned." unless user
|
151
|
-
ob.delete(user)
|
152
|
-
|
153
|
-
user1 = ob.add(:User, username: "User #{tc}-#{ic}-1")
|
154
|
-
user2 = ob.add(:User, username: "User #{tc}-#{ic}-2")
|
155
|
-
user3 = ob.add(:User, username: "User #{tc}-#{ic}-3")
|
156
|
-
|
157
|
-
expect(user1).to_not eq nil
|
158
|
-
expect(user1.deleted?).to eq false
|
159
|
-
|
160
|
-
expect(user2).to_not eq nil
|
161
|
-
expect(user2.deleted?).to eq false
|
162
|
-
|
163
|
-
expect(user3).to_not eq nil
|
164
|
-
expect(user3.deleted?).to eq false
|
165
|
-
|
166
|
-
ob.deletes([user1, user2, user3])
|
167
|
-
|
168
|
-
count = 0
|
169
|
-
users.each do |user_i|
|
170
|
-
count += 1
|
171
|
-
user_i[:username] = "#{user_i[:username]}." unless user_i.deleted?
|
172
|
-
end
|
173
|
-
|
174
|
-
expect(count).to eq 21
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
threads.each(&:join)
|
180
|
-
end
|
181
|
-
|
182
|
-
it "should be able to skip queries when adding" do
|
183
|
-
class Group < Baza::Model; end
|
184
|
-
|
185
|
-
ob2 = Baza::ModelHandler.new(
|
186
|
-
db: db,
|
187
|
-
datarow: true,
|
188
|
-
require: false
|
189
|
-
)
|
190
|
-
|
191
|
-
threads = []
|
192
|
-
0.upto(5) do
|
193
|
-
threads << Thread.new do
|
194
|
-
Thread.current.abort_on_exception = true
|
195
|
-
|
196
|
-
0.upto(5) do
|
197
|
-
ret = ob2.add(:Group, {groupname: "User 1"}, skip_ret: true)
|
198
|
-
raise "Expected empty return but got something: #{ret}" if ret
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
threads.each(&:join)
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should delete the temporary database." do
|
207
|
-
File.unlink(db_path) if File.exist?(db_path)
|
208
|
-
end
|
209
|
-
|
210
|
-
# Moved from "knjrbfw_spec.rb"
|
211
|
-
it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
|
212
|
-
require "tmpdir"
|
213
|
-
|
214
|
-
db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
215
|
-
db = Baza::Db.new(
|
216
|
-
type: :sqlite3,
|
217
|
-
path: db_path,
|
218
|
-
index_append_table_name: true
|
219
|
-
)
|
220
|
-
|
221
|
-
db.tables.create(
|
222
|
-
"Project",
|
223
|
-
columns: [
|
224
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
225
|
-
{name: :category_id, type: :int},
|
226
|
-
{name: :name, type: :varchar}
|
227
|
-
],
|
228
|
-
indexes: [
|
229
|
-
{name: :category_id, columns: [:category_id]}
|
230
|
-
]
|
231
|
-
)
|
232
|
-
|
233
|
-
db.tables.create(
|
234
|
-
"Task",
|
235
|
-
columns: [
|
236
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
237
|
-
{name: :project_id, type: :int},
|
238
|
-
{name: :person_id, type: :int},
|
239
|
-
{name: :name, type: :varchar}
|
240
|
-
],
|
241
|
-
indexes: [
|
242
|
-
{name: :project_id, columns: [:project_id]}
|
243
|
-
]
|
244
|
-
)
|
245
|
-
|
246
|
-
db.tables.create(
|
247
|
-
"Person",
|
248
|
-
columns: [
|
249
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
250
|
-
{name: :name, type: :varchar}
|
251
|
-
]
|
252
|
-
)
|
253
|
-
|
254
|
-
db.tables.create(
|
255
|
-
"Timelog",
|
256
|
-
columns: [
|
257
|
-
{name: :id, type: :int, autoincr: true, primarykey: true},
|
258
|
-
{name: :person_id, type: :int}
|
259
|
-
],
|
260
|
-
indexes: [
|
261
|
-
:person_id
|
262
|
-
]
|
263
|
-
)
|
264
|
-
|
265
|
-
table = db.tables[:Project]
|
266
|
-
|
267
|
-
indexes = table.indexes
|
268
|
-
raise "Could not find the sample-index 'category_id' that should have been created." unless indexes.any? { |index| index.name == "Project__category_id" }
|
269
|
-
|
270
|
-
|
271
|
-
# If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
|
272
|
-
db.insert("Project", name: "Test project")
|
273
|
-
|
274
|
-
count = 0
|
275
|
-
db.q("SELECT * FROM Project") do |d|
|
276
|
-
raise "Somehow name was not 'Test project'" if d[:name] != "Test project"
|
277
|
-
raise "ID was not set?" if d[:id].to_i <= 0
|
278
|
-
count += 1
|
279
|
-
end
|
280
|
-
|
281
|
-
raise "Expected count of 1 but it wasnt: #{count}" if count != 1
|
282
|
-
end
|
283
|
-
|
284
|
-
it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
|
285
|
-
ob = Baza::ModelHandler.new(db: db, datarow: true, require: false)
|
286
|
-
|
287
|
-
ob.add(:Person, name: "Kasper")
|
288
|
-
ob.add(:Task, name: "Test task", person_id: person.id, project_id: project.id)
|
289
|
-
|
290
|
-
begin
|
291
|
-
obb.add(:Task, name: "Test task")
|
292
|
-
raise "Method should fail but didnt."
|
293
|
-
rescue
|
294
|
-
# Ignore.
|
295
|
-
end
|
296
|
-
|
297
|
-
|
298
|
-
# Test 'list_invalid_required'.
|
299
|
-
db.insert(:Task, name: "Invalid require")
|
300
|
-
id = db.last_id
|
301
|
-
found = false
|
302
|
-
|
303
|
-
ob.list_invalid_required(class: :Task) do |d|
|
304
|
-
raise "Expected object ID to be #{id} but it wasnt: #{d[:obj].id}" if d[:obj].id.to_i != id.to_i
|
305
|
-
ob.delete(d[:obj])
|
306
|
-
found = true
|
307
|
-
end
|
308
|
-
|
309
|
-
raise "Expected to find a task but didnt." unless found
|
310
|
-
|
311
|
-
|
312
|
-
ret_proc = []
|
313
|
-
ob.list(:Task) do |task|
|
314
|
-
ret_proc << task
|
315
|
-
end
|
316
|
-
|
317
|
-
raise "list with proc should return one task but didnt." if ret_proc.length != 1
|
318
|
-
|
319
|
-
|
320
|
-
tasks = project.tasks
|
321
|
-
raise "No tasks were found on project?" if tasks.empty?
|
322
|
-
|
323
|
-
|
324
|
-
ret_proc = []
|
325
|
-
ret_test = project.tasks do |task|
|
326
|
-
ret_proc << task
|
327
|
-
end
|
328
|
-
|
329
|
-
raise "When given a block the return should be nil so it doesnt hold weak-ref-objects in memory but it didnt return nil." unless ret_test == nil
|
330
|
-
raise "list for project with proc should return one task but didnt (#{ret_proc.length})." if ret_proc.length != 1
|
331
|
-
|
332
|
-
person = tasks.first.person
|
333
|
-
project_second = tasks.first.project
|
334
|
-
|
335
|
-
raise "Returned object was not a person on task." unless person.is_a?(Person)
|
336
|
-
raise "Returned object was not a project on task." unless project_second.is_a?(Project)
|
337
|
-
|
338
|
-
|
339
|
-
# Check that has_many-depending is actually working.
|
340
|
-
begin
|
341
|
-
ob.delete(project)
|
342
|
-
raise "It was possible to delete project 1 even though task 1 depended on it!"
|
343
|
-
rescue
|
344
|
-
# This should happen - it should not possible to delete project 1 because task 1 depends on it."
|
345
|
-
end
|
346
|
-
end
|
347
|
-
|
348
|
-
it "should be able to generate lists for inputs" do
|
349
|
-
task
|
350
|
-
list = ob.list_optshash(:Task)
|
351
|
-
list.length.should eq 1
|
352
|
-
list[1].should eq "Test task"
|
353
|
-
end
|
354
|
-
|
355
|
-
it "should be able to connect to objects 'no-html' callback and test it." do
|
356
|
-
task
|
357
|
-
ob.events.connect(:no_html) do |_event, classname|
|
358
|
-
"[no #{classname.to_s.downcase}]"
|
359
|
-
end
|
360
|
-
|
361
|
-
expect(task.person_html).to eq "Kasper"
|
362
|
-
task.update(person_id: 0)
|
363
|
-
expect(task.person_html).to eq "[no person]"
|
364
|
-
end
|
365
|
-
|
366
|
-
it "should be able to to multiple additions and delete objects through a buffer" do
|
367
|
-
objs = []
|
368
|
-
0.upto(500) do
|
369
|
-
objs << {name: :Kasper}
|
370
|
-
end
|
371
|
-
|
372
|
-
ob.adds(:Person, objs)
|
373
|
-
pers_length = ob.list(:Person, "count" => true)
|
374
|
-
|
375
|
-
count = 0
|
376
|
-
db.q_buffer do |buffer|
|
377
|
-
ob.list(:Person) do |person|
|
378
|
-
count += 1
|
379
|
-
ob.delete(person, db_buffer: buffer)
|
380
|
-
end
|
381
|
-
|
382
|
-
buffer.flush
|
383
|
-
end
|
384
|
-
|
385
|
-
raise "Expected count to be #{pers_length} but it wasnt: #{count}" if count != pers_length
|
386
|
-
|
387
|
-
persons = ob.list(:Person).to_a
|
388
|
-
raise "Expected persons count to be 0 but it wasnt: #{persons.map(&:data)}" if persons.length > 0
|
389
|
-
end
|
390
|
-
|
391
|
-
it "should do autozero when deleting objects" do
|
392
|
-
person1 = ob.add(:Person, name: "Kasper")
|
393
|
-
person2 = ob.add(:Person, name: "Charlotte")
|
394
|
-
|
395
|
-
timelog1 = ob.add(:Timelog, person_id: person1.id)
|
396
|
-
timelog2 = ob.add(:Timelog, person_id: person2.id)
|
397
|
-
|
398
|
-
ob.delete(person1)
|
399
|
-
|
400
|
-
raise "Expected timelog1's person-ID to be zero but it wasnt: '#{timelog1[:person_id]}'." if timelog1[:person_id].to_i != 0
|
401
|
-
raise "Expected timelog2's person-ID to be #{person2.id} but it wasnt: '#{timelog2[:person_id]}'." if timelog2[:person_id].to_i != person2.id.to_i
|
402
|
-
end
|
403
|
-
|
404
|
-
it "should be able to do multiple deletes from ids" do
|
405
|
-
ids = []
|
406
|
-
1.upto(10) do |_count|
|
407
|
-
ids << ob.add(:Person).id
|
408
|
-
end
|
409
|
-
|
410
|
-
ob.delete_ids(class: :Person, ids: ids)
|
411
|
-
end
|
412
|
-
|
413
|
-
it "get_or_add" do
|
414
|
-
person1 = ob.add(:Person, name: "get_or_add")
|
415
|
-
person2 = ob.get_or_add(:Person, name: "get_or_add")
|
416
|
-
|
417
|
-
person2.id.should eql(person1.id)
|
418
|
-
person2[:name].should eql("get_or_add")
|
419
|
-
|
420
|
-
person3 = ob.get_or_add(:Person, name: "get_or_add3")
|
421
|
-
|
422
|
-
raise "Failure ID was the same" if person3.id == person2.id
|
423
|
-
person3[:name].should eql("get_or_add3")
|
424
|
-
end
|
425
|
-
|
426
|
-
it "should delete the temp database again." do
|
427
|
-
require "tmpdir"
|
428
|
-
db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
429
|
-
File.unlink(db_path) if File.exist?(db_path)
|
430
|
-
end
|
431
|
-
end
|