knjrbfw 0.0.27 → 0.0.28
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/VERSION +1 -1
- data/knjrbfw.gemspec +1 -1
- data/lib/knj/datarow.rb +12 -0
- data/lib/knj/datarow_custom.rb +15 -6
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +7 -8
- data/lib/knj/knjdb/revision.rb +4 -1
- data/lib/knj/objects.rb +1 -0
- data/lib/knjrbfw.rb +3 -1
- data/spec/datet_spec.rb +1 -1
- data/spec/db_spec.rb +24 -3
- data/spec/knjrbfw_spec.rb +5 -4
- data/spec/process_meta_spec.rb +1 -1
- metadata +14 -14
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.28
|
data/knjrbfw.gemspec
CHANGED
data/lib/knj/datarow.rb
CHANGED
@@ -1,21 +1,29 @@
|
|
1
1
|
class Knj::Datarow
|
2
2
|
attr_reader :data, :ob, :db
|
3
3
|
|
4
|
+
#This is used by 'Knj::Objects' to find out what data is required for this class. Returns the array that tells about required data.
|
4
5
|
def self.required_data
|
5
6
|
@required_data = [] if !@required_data
|
6
7
|
return @required_data
|
7
8
|
end
|
8
9
|
|
10
|
+
#This is used by 'Knj::Objects' to find out what other objects this class depends on. Returns the array that tells about depending data.
|
9
11
|
def self.depending_data
|
10
12
|
@depending_data = [] if !@depending_data
|
11
13
|
return @depending_data
|
12
14
|
end
|
13
15
|
|
16
|
+
#This is used by 'Knj::Objects' to find out which other objects should be deleted when an object of this class is deleted automatically. Returns the array that tells about autodelete data.
|
14
17
|
def self.autodelete_data
|
15
18
|
@autodelete_data = [] if !@autodelete_data
|
16
19
|
return @autodelete_data
|
17
20
|
end
|
18
21
|
|
22
|
+
#Get the 'Knj::Objects'-object that handels this class.
|
23
|
+
def self.ob
|
24
|
+
return @ob
|
25
|
+
end
|
26
|
+
|
19
27
|
#This helps various parts of the framework determine if this is a datarow class without requiring it.
|
20
28
|
def is_knj?
|
21
29
|
return true
|
@@ -191,16 +199,19 @@ class Knj::Datarow
|
|
191
199
|
@columns_joined_tables.merge!(hash)
|
192
200
|
end
|
193
201
|
|
202
|
+
#Returns the table-name that should be used for this datarow.
|
194
203
|
def self.table
|
195
204
|
return @table if @table
|
196
205
|
return self.name.split("::").last
|
197
206
|
end
|
198
207
|
|
208
|
+
#This can be used to manually set the table-name. Useful when meta-programming classes that extends the datarow-class.
|
199
209
|
def self.table=(newtable)
|
200
210
|
@table = newtable
|
201
211
|
@columns_sqlhelper_args[:table] = @table if @columns_sqlhelper_args.is_a?(Hash)
|
202
212
|
end
|
203
213
|
|
214
|
+
#Returns the class-name but without having to call the class-table-method. To make code look shorter.
|
204
215
|
def table
|
205
216
|
return self.class.table
|
206
217
|
end
|
@@ -365,6 +376,7 @@ class Knj::Datarow
|
|
365
376
|
end
|
366
377
|
end
|
367
378
|
|
379
|
+
#This method helps returning objects and supports various arguments. It should be called by Object#list.
|
368
380
|
def self.list(d, &block)
|
369
381
|
ec_col = d.db.enc_col
|
370
382
|
ec_table = d.db.enc_table
|
data/lib/knj/datarow_custom.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "#{$knjpath}event_handler"
|
2
2
|
|
3
3
|
class Knj::Datarow_custom
|
4
|
+
#Used to determine if this is a knj-datarow-object.
|
4
5
|
def is_knj?
|
5
6
|
return true
|
6
7
|
end
|
@@ -71,17 +72,25 @@ class Knj::Datarow_custom
|
|
71
72
|
|
72
73
|
if data.is_a?(Hash)
|
73
74
|
@data = Knj::ArrayExt.hash_sym(data)
|
75
|
+
@id = self.id
|
74
76
|
else
|
75
|
-
|
76
|
-
|
77
|
-
raise "No data was received from the event: 'data_from_id'." if !data
|
78
|
-
raise "Data expected to be a hash but wasnt: '#{data.class.name}'." if !data.is_a?(Hash)
|
79
|
-
@data = Knj::ArrayExt.hash_sym(data)
|
77
|
+
@id = data
|
78
|
+
self.reload
|
80
79
|
end
|
81
80
|
end
|
82
81
|
|
82
|
+
def reload
|
83
|
+
raise "No 'data_from_id'-event connected to class." if !self.class.events.connected?(:data_from_id)
|
84
|
+
data = self.class.events.call(:data_from_id, Knj::Hash_methods.new(:id => @id))
|
85
|
+
raise "No data was received from the event: 'data_from_id'." if !data
|
86
|
+
raise "Data expected to be a hash but wasnt: '#{data.class.name}'." if !data.is_a?(Hash)
|
87
|
+
@data = Knj::ArrayExt.hash_sym(data)
|
88
|
+
end
|
89
|
+
|
83
90
|
def update(data)
|
84
|
-
|
91
|
+
ret = self.class.events.call(:update, Knj::Hash_methods.new(:object => self, :data => data))
|
92
|
+
self.reload
|
93
|
+
return ret
|
85
94
|
end
|
86
95
|
|
87
96
|
#Returns a key from the hash that this object is holding or raises an error if it doesnt exist.
|
@@ -6,7 +6,6 @@ class KnjDB_sqlite3::Tables
|
|
6
6
|
def initialize(args)
|
7
7
|
@args = args
|
8
8
|
@db = @args[:db]
|
9
|
-
@driver = @args[:driver]
|
10
9
|
|
11
10
|
@list_mutex = Mutex.new
|
12
11
|
@list = Knj::Wref_map.new
|
@@ -38,7 +37,6 @@ class KnjDB_sqlite3::Tables
|
|
38
37
|
if !obj
|
39
38
|
obj = KnjDB_sqlite3::Tables::Table.new(
|
40
39
|
:db => @db,
|
41
|
-
:driver => @driver,
|
42
40
|
:data => d_tables
|
43
41
|
)
|
44
42
|
@list[d_tables[:name]] = obj
|
@@ -83,7 +81,6 @@ end
|
|
83
81
|
class KnjDB_sqlite3::Tables::Table
|
84
82
|
def initialize(args)
|
85
83
|
@db = args[:db]
|
86
|
-
@driver = args[:driver]
|
87
84
|
@data = args[:data]
|
88
85
|
|
89
86
|
@list = Knj::Wref_map.new
|
@@ -117,14 +114,13 @@ class KnjDB_sqlite3::Tables::Table
|
|
117
114
|
@db.cols
|
118
115
|
ret = {}
|
119
116
|
|
120
|
-
@db.q("PRAGMA table_info(`#{@
|
117
|
+
@db.q("PRAGMA table_info(`#{@db.esc_table(self.name)}`)") do |d_cols|
|
121
118
|
obj = @list.get!(d_cols[:name])
|
122
119
|
|
123
120
|
if !obj
|
124
121
|
obj = KnjDB_sqlite3::Columns::Column.new(
|
125
122
|
:table_name => self.name,
|
126
123
|
:db => @db,
|
127
|
-
:driver => @driver,
|
128
124
|
:data => d_cols
|
129
125
|
)
|
130
126
|
@list[d_cols[:name]] = obj
|
@@ -294,9 +290,9 @@ class KnjDB_sqlite3::Tables::Table
|
|
294
290
|
|
295
291
|
def indexes
|
296
292
|
@db.indexes
|
297
|
-
ret = {}
|
293
|
+
ret = {} unless block_given?
|
298
294
|
|
299
|
-
@db.q("PRAGMA index_list(`#{@
|
295
|
+
@db.q("PRAGMA index_list(`#{@db.esc_table(self.name)}`)") do |d_indexes|
|
300
296
|
next if d_indexes[:Key_name] == "PRIMARY"
|
301
297
|
|
302
298
|
obj = @indexes_list.get!(d_indexes[:name])
|
@@ -317,7 +313,6 @@ class KnjDB_sqlite3::Tables::Table
|
|
317
313
|
obj = KnjDB_sqlite3::Indexes::Index.new(
|
318
314
|
:table_name => self.name,
|
319
315
|
:db => @db,
|
320
|
-
:driver => @driver,
|
321
316
|
:data => d_indexes
|
322
317
|
)
|
323
318
|
obj.columns << name
|
@@ -379,4 +374,8 @@ class KnjDB_sqlite3::Tables::Table
|
|
379
374
|
|
380
375
|
return ret
|
381
376
|
end
|
377
|
+
|
378
|
+
def insert(data)
|
379
|
+
@db.insert(self.name, data)
|
380
|
+
end
|
382
381
|
end
|
data/lib/knj/knjdb/revision.rb
CHANGED
@@ -8,6 +8,9 @@ class Knj::Db::Revision
|
|
8
8
|
db = args["db"]
|
9
9
|
table = args["table"]
|
10
10
|
|
11
|
+
raise "No db given." if !db
|
12
|
+
raise "No table given." if !table
|
13
|
+
|
11
14
|
args["rows"].each do |row_data|
|
12
15
|
if row_data["find_by"]
|
13
16
|
find_by = row_data["find_by"]
|
@@ -256,7 +259,7 @@ class Knj::Db::Revision
|
|
256
259
|
table_data["on_create_after"].call("db" => db, "table_name" => table_name, "table_data" => table_data)
|
257
260
|
end
|
258
261
|
|
259
|
-
self.rows_init("table" => table_obj, "rows" => table_data["rows"]) if table_data["rows"]
|
262
|
+
self.rows_init("db" => db, "table" => table_obj, "rows" => table_data["rows"]) if table_data["rows"]
|
260
263
|
end
|
261
264
|
rescue Knj::Errors::Retry
|
262
265
|
retry
|
data/lib/knj/objects.rb
CHANGED
data/lib/knjrbfw.rb
CHANGED
data/spec/datet_spec.rb
CHANGED
@@ -25,6 +25,6 @@ describe "Datet" do
|
|
25
25
|
time = Time.at(Time.now.to_i - 48 * 3600)
|
26
26
|
datet = Knj::Datet.in(time)
|
27
27
|
res = datet.ago_str
|
28
|
-
raise "Expected '
|
28
|
+
raise "Expected '2 days ago' but got: '#{res}'." if res != "2 days ago"
|
29
29
|
end
|
30
30
|
end
|
data/spec/db_spec.rb
CHANGED
@@ -7,10 +7,11 @@ describe "Db" do
|
|
7
7
|
#I never got this test to actually fail... :-(
|
8
8
|
|
9
9
|
require "knj/db"
|
10
|
-
require "
|
11
|
-
require "sqlite3"
|
10
|
+
require "knj/os"
|
11
|
+
require "sqlite3" if !Kernel.const_defined?("SQLite3")
|
12
12
|
|
13
|
-
db_path = "#{
|
13
|
+
db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
14
|
+
File.unlink(db_path) if File.exists?(db_path)
|
14
15
|
|
15
16
|
db = Knj::Db.new(
|
16
17
|
:type => "sqlite3",
|
@@ -26,6 +27,26 @@ describe "Db" do
|
|
26
27
|
]
|
27
28
|
})
|
28
29
|
|
30
|
+
schema = {
|
31
|
+
"tables" => {
|
32
|
+
"test_table" => {
|
33
|
+
"columns" => [
|
34
|
+
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
35
|
+
{"name" => "name", "type" => "varchar"}
|
36
|
+
],
|
37
|
+
"rows" => [
|
38
|
+
{
|
39
|
+
"find_by" => {"id" => 1},
|
40
|
+
"data" => {"id" => 1, "name" => "trala"}
|
41
|
+
}
|
42
|
+
]
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
rev = Knj::Db::Revision.new
|
48
|
+
rev.init_db("schema" => schema, "db" => db)
|
49
|
+
|
29
50
|
begin
|
30
51
|
cont = File.read("#{File.dirname(__FILE__)}/db_spec_encoding_test_file.txt")
|
31
52
|
cont.force_encoding("ASCII-8BIT")
|
data/spec/knjrbfw_spec.rb
CHANGED
@@ -3,10 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe "Knjrbfw" do
|
4
4
|
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
|
5
5
|
require "knjrbfw"
|
6
|
-
require "
|
7
|
-
require "tmpdir"
|
6
|
+
require "sqlite3"
|
8
7
|
|
9
|
-
db_path = "#{
|
8
|
+
db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
10
9
|
|
11
10
|
begin
|
12
11
|
db = Knj::Db.new(
|
@@ -49,7 +48,7 @@ describe "Knjrbfw" do
|
|
49
48
|
table = db.tables["Project"]
|
50
49
|
|
51
50
|
indexes = table.indexes
|
52
|
-
raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["
|
51
|
+
raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["Project__category_id"]
|
53
52
|
|
54
53
|
|
55
54
|
#If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
|
@@ -297,6 +296,8 @@ describe "Knjrbfw" do
|
|
297
296
|
end
|
298
297
|
|
299
298
|
it "should be able to draw rounded transparent corners on images." do
|
299
|
+
require "rmagick"
|
300
|
+
|
300
301
|
pic = Magick::Image.read("#{File.dirname(__FILE__)}/../testfiles/image.jpg").first
|
301
302
|
pic.format = "png"
|
302
303
|
|
data/spec/process_meta_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knjrbfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.28
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
requirement: &
|
17
|
+
requirement: &15665000 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.3.0
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *15665000
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
28
|
-
requirement: &
|
28
|
+
requirement: &15664000 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 1.0.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *15664000
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: jeweler
|
39
|
-
requirement: &
|
39
|
+
requirement: &15663060 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 1.6.3
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *15663060
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rcov
|
50
|
-
requirement: &
|
50
|
+
requirement: &15656020 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *15656020
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: sqlite3
|
61
|
-
requirement: &
|
61
|
+
requirement: &15655380 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *15655380
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rmagick
|
72
|
-
requirement: &
|
72
|
+
requirement: &15654840 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *15654840
|
81
81
|
description: Including stuff for HTTP, SSH and much more.
|
82
82
|
email: k@spernj.org
|
83
83
|
executables: []
|
@@ -343,7 +343,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
343
343
|
version: '0'
|
344
344
|
segments:
|
345
345
|
- 0
|
346
|
-
hash:
|
346
|
+
hash: 894302943033086074
|
347
347
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
348
348
|
none: false
|
349
349
|
requirements:
|