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 CHANGED
@@ -1 +1 @@
1
- 0.0.27
1
+ 0.0.28
data/knjrbfw.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.27"
8
+ s.version = "0.0.28"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
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
@@ -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
- raise "No 'data_from_id'-event connected to class." if !self.class.events.connected?(:data_from_id)
76
- data = self.class.events.call(:data_from_id, Knj::Hash_methods.new(:id => data))
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
- return self.class.events.call(:update, Knj::Hash_methods.new(:object => self, :data => data))
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(`#{@driver.esc_table(self.name)}`)") do |d_cols|
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(`#{@driver.esc_table(self.name)}`)") do |d_indexes|
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
@@ -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
@@ -2,6 +2,7 @@ class Knj::Objects
2
2
  attr_reader :args, :events, :data
3
3
 
4
4
  def initialize(args)
5
+ require "monitor"
5
6
  require "#{$knjpath}arrayext"
6
7
  require "#{$knjpath}event_handler"
7
8
  require "#{$knjpath}hash_methods"
data/lib/knjrbfw.rb CHANGED
@@ -2,4 +2,6 @@ module Knj
2
2
  end
3
3
 
4
4
  $knjpath = "knj/" if !$knjpath
5
- $: << File.dirname(__FILE__)
5
+ $: << File.dirname(__FILE__)
6
+
7
+ require "#{$knjpath}knj"
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 '48 hours ago' but got: '#{res}'." if res != "48 hours ago"
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 "tmpdir"
11
- require "sqlite3"
10
+ require "knj/os"
11
+ require "sqlite3" if !Kernel.const_defined?("SQLite3")
12
12
 
13
- db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
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 "knj/autoload"
7
- require "tmpdir"
6
+ require "sqlite3"
8
7
 
9
- db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
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["category_id"]
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
 
@@ -121,7 +121,7 @@ describe "Process_meta" do
121
121
  it "should be able to do slow block-results in JRuby." do
122
122
  $process_meta.str_eval("
123
123
  class Kaspertest
124
- def kaspertest
124
+ def self.kaspertest
125
125
  8.upto(12) do |i|
126
126
  yield(i)
127
127
  sleep 0.5
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.27
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: &11346340 !ruby/object:Gem::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: *11346340
25
+ version_requirements: *15665000
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &11345260 !ruby/object:Gem::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: *11345260
36
+ version_requirements: *15664000
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &11344540 !ruby/object:Gem::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: *11344540
47
+ version_requirements: *15663060
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &11343600 !ruby/object:Gem::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: *11343600
58
+ version_requirements: *15656020
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: sqlite3
61
- requirement: &11342860 !ruby/object:Gem::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: *11342860
69
+ version_requirements: *15655380
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rmagick
72
- requirement: &11338380 !ruby/object:Gem::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: *11338380
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: -881354161211484324
346
+ hash: 894302943033086074
347
347
  required_rubygems_version: !ruby/object:Gem::Requirement
348
348
  none: false
349
349
  requirements: