baza 0.0.20 → 0.0.21
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.
- 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
|