knjrbfw 0.0.27 → 0.0.28

Sign up to get free protection for your applications and to get access to all the features.
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: