knjrbfw 0.0.50 → 0.0.51
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 +2 -2
- data/lib/knj/arrayext.rb +14 -6
- data/lib/knj/datarow.rb +1 -1
- data/lib/knj/event_handler.rb +3 -3
- data/lib/knj/gtk2_tv.rb +36 -15
- data/lib/knj/gtk2_window.rb +12 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +3 -1
- data/lib/knj/knjdb/query_buffer.rb +51 -13
- data/lib/knj/knjdb/revision.rb +14 -9
- data/lib/knj/objects/objects_sqlhelper.rb +1 -2
- data/lib/knj/php.rb +3 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.51
|
data/knjrbfw.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{knjrbfw}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.51"
|
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"]
|
12
|
-
s.date = %q{2012-06-
|
12
|
+
s.date = %q{2012-06-28}
|
13
13
|
s.description = %q{Including stuff for HTTP, SSH and much more.}
|
14
14
|
s.email = %q{k@spernj.org}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/knj/arrayext.rb
CHANGED
@@ -287,9 +287,17 @@ module Knj::ArrayExt
|
|
287
287
|
# end
|
288
288
|
#
|
289
289
|
# res.length #=> 3
|
290
|
-
def self.divide(args)
|
290
|
+
def self.divide(args, &block)
|
291
291
|
prev_ele = args[:arr].shift
|
292
292
|
chunk = [prev_ele]
|
293
|
+
|
294
|
+
if !args[:evaluate]
|
295
|
+
callback_eval = block
|
296
|
+
elsif !args[:callback] and args[:evaluate]
|
297
|
+
callback_res = block
|
298
|
+
callback_eval = args[:evaluate]
|
299
|
+
end
|
300
|
+
|
293
301
|
ret = [] if !args[:callback]
|
294
302
|
|
295
303
|
args[:arr].each do |ele|
|
@@ -299,10 +307,10 @@ module Knj::ArrayExt
|
|
299
307
|
next
|
300
308
|
end
|
301
309
|
|
302
|
-
if
|
310
|
+
if callback_eval.call(prev_ele, ele)
|
303
311
|
chunk << ele
|
304
|
-
elsif
|
305
|
-
|
312
|
+
elsif callback_res
|
313
|
+
callback_res.call(chunk)
|
306
314
|
chunk = nil
|
307
315
|
else
|
308
316
|
ret << chunk
|
@@ -313,8 +321,8 @@ module Knj::ArrayExt
|
|
313
321
|
end
|
314
322
|
|
315
323
|
if chunk and !chunk.empty?
|
316
|
-
if
|
317
|
-
|
324
|
+
if callback_res
|
325
|
+
callback_res.call(chunk)
|
318
326
|
else
|
319
327
|
ret << chunk
|
320
328
|
end
|
data/lib/knj/datarow.rb
CHANGED
@@ -251,7 +251,7 @@ class Knj::Datarow
|
|
251
251
|
table_name => {
|
252
252
|
:where => {
|
253
253
|
"object_class" => self.name,
|
254
|
-
"object_id" => {:type => :col, :name =>
|
254
|
+
"object_id" => {:type => :col, :name => :id},
|
255
255
|
"key" => val.to_s,
|
256
256
|
"locale" => proc{|d| _session[:locale]}
|
257
257
|
},
|
data/lib/knj/event_handler.rb
CHANGED
@@ -73,9 +73,9 @@ class Knj::Event_handler
|
|
73
73
|
# events.call(:test_event) #=> Doesnt print 'test event!'.
|
74
74
|
def disconnect(name, callback_id)
|
75
75
|
raise "No such event: '#{name}'." if !@events.key?(name)
|
76
|
-
raise "No such connection: '#{name}' --> '#{callback_id}'" if !@events[name].key?(callback_id)
|
77
|
-
@events[name][callback_id].clear
|
78
|
-
@events[name].delete(callback_id)
|
76
|
+
raise "No such connection: '#{name}' --> '#{callback_id}' (#{@events[name]})" if !@events[name][:callbacks].key?(callback_id)
|
77
|
+
@events[name][:callbacks][callback_id].clear
|
78
|
+
@events[name][:callbacks].delete(callback_id)
|
79
79
|
end
|
80
80
|
|
81
81
|
#Returns how many blocks have been connected to an event.
|
data/lib/knj/gtk2_tv.rb
CHANGED
@@ -35,8 +35,14 @@ module Knj::Gtk2::Tv
|
|
35
35
|
end
|
36
36
|
|
37
37
|
if args[:type] == :string
|
38
|
+
if args[:markup]
|
39
|
+
col_args = {:markup => count}
|
40
|
+
else
|
41
|
+
col_args = {:text => count}
|
42
|
+
end
|
43
|
+
|
38
44
|
renderer = Gtk::CellRendererText.new
|
39
|
-
col = Gtk::TreeViewColumn.new(args[:title], renderer,
|
45
|
+
col = Gtk::TreeViewColumn.new(args[:title], renderer, col_args)
|
40
46
|
col.resizable = true
|
41
47
|
tv.append_column(col)
|
42
48
|
elsif args[:type] == :toggle
|
@@ -47,9 +53,13 @@ module Knj::Gtk2::Tv
|
|
47
53
|
renderer = Gtk::CellRendererCombo.new
|
48
54
|
renderer.text_column = 0
|
49
55
|
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
if args[:markup]
|
57
|
+
col_args = {:markup => count}
|
58
|
+
else
|
59
|
+
col_args = {:text => count}
|
60
|
+
end
|
61
|
+
|
62
|
+
col = Gtk::TreeViewColumn.new(args[:title], renderer, col_args)
|
53
63
|
|
54
64
|
renderer.model = args[:model] if args.key?(:model)
|
55
65
|
renderer.has_entry = args[:has_entry] if args.key?(:has_entry)
|
@@ -166,10 +176,12 @@ module Knj::Gtk2::Tv
|
|
166
176
|
id = args[:tv].model.get_value(iter, args[:id_col])
|
167
177
|
model_obj = args[:ob].get(args[:model_class], id)
|
168
178
|
cancel = false
|
179
|
+
callback_hash = {:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data}
|
169
180
|
|
170
181
|
if col_data[:value_callback]
|
171
182
|
begin
|
172
|
-
value = col_data[:value_callback].call(
|
183
|
+
value = col_data[:value_callback].call(callback_hash)
|
184
|
+
callback_hash[:value] = value
|
173
185
|
rescue => e
|
174
186
|
Knj::Gtk2.msgbox(e.message, "warning")
|
175
187
|
cancel = true
|
@@ -177,29 +189,38 @@ module Knj::Gtk2::Tv
|
|
177
189
|
end
|
178
190
|
|
179
191
|
if !cancel
|
180
|
-
args[:change_before].call if args[:change_before]
|
181
|
-
|
182
192
|
begin
|
183
|
-
|
184
|
-
value = col_data[:value_set_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data) if col_data.key?(:value_set_callback)
|
185
|
-
iter[col_no] = value
|
193
|
+
args[:change_before].call(callback_hash) if args[:change_before]
|
186
194
|
rescue => e
|
195
|
+
cancel = true
|
187
196
|
Knj::Gtk2.msgbox(e.message, "warning")
|
188
|
-
|
189
|
-
|
197
|
+
end
|
198
|
+
|
199
|
+
if !cancel
|
200
|
+
begin
|
201
|
+
model_obj[col_data[:col]] = value
|
202
|
+
value = col_data[:value_set_callback].call(callback_hash) if col_data.key?(:value_set_callback)
|
203
|
+
iter[col_no] = value
|
204
|
+
rescue => e
|
205
|
+
Knj::Gtk2.msgbox(e.message, "warning")
|
206
|
+
ensure
|
207
|
+
args[:change_after].call(callback_hash) if args[:change_after]
|
208
|
+
end
|
190
209
|
end
|
191
210
|
end
|
192
211
|
end
|
193
212
|
elsif renderer.is_a?(Gtk::CellRendererToggle)
|
194
213
|
renderer.activatable = true
|
195
|
-
renderer.signal_connect("toggled") do |renderer, path,
|
214
|
+
renderer.signal_connect("toggled") do |renderer, path, value|
|
196
215
|
iter = args[:tv].model.get_iter(path)
|
197
216
|
id = args[:tv].model.get_value(iter, 0)
|
198
217
|
model_obj = args[:ob].get(args[:model_class], id)
|
218
|
+
callback_hash = {:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data}
|
199
219
|
|
200
220
|
if col_data[:value_callback]
|
201
221
|
begin
|
202
|
-
value = col_data[:value_callback].call(
|
222
|
+
value = col_data[:value_callback].call(callback_hash)
|
223
|
+
callback_hash[:value] = value
|
203
224
|
rescue => e
|
204
225
|
Knj::Gtk2.msgbox(e.message, "warning")
|
205
226
|
cancel = true
|
@@ -207,7 +228,7 @@ module Knj::Gtk2::Tv
|
|
207
228
|
end
|
208
229
|
|
209
230
|
if !cancel
|
210
|
-
args[:change_before].call if args[:change_before]
|
231
|
+
args[:change_before].call(callback_hash) if args[:change_before]
|
211
232
|
begin
|
212
233
|
if model_obj[col_data[:col]].to_i == 1
|
213
234
|
model_obj[col_data[:col]] = 0
|
data/lib/knj/gtk2_window.rb
CHANGED
@@ -23,4 +23,16 @@ class Knj::Gtk2::Window
|
|
23
23
|
@@uniques[id] = obj
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
#Returns the object if it hasnt been destroyed.
|
28
|
+
#===Examples
|
29
|
+
# Knj::Gtk2::Window.get("my_window") #=> nil
|
30
|
+
# Knj::Gtk2::Window.get("my_window") #=> Gtk::Builder-object
|
31
|
+
def self.get(id)
|
32
|
+
if instance and !instance.gui["window"].destroyed?
|
33
|
+
return instance.gui["window"]
|
34
|
+
end
|
35
|
+
|
36
|
+
return nil
|
37
|
+
end
|
26
38
|
end
|
@@ -74,7 +74,9 @@ class KnjDB_mysql::Tables
|
|
74
74
|
def create(name, data, args = nil)
|
75
75
|
raise "No columns was given for '#{name}'." if !data["columns"] or data["columns"].empty?
|
76
76
|
|
77
|
-
sql = "CREATE
|
77
|
+
sql = "CREATE"
|
78
|
+
sql << " TEMPORARY" if data["temp"]
|
79
|
+
sql << " TABLE `#{name}` ("
|
78
80
|
|
79
81
|
first = true
|
80
82
|
data["columns"].each do |col_data|
|
@@ -4,40 +4,78 @@ class Knj::Db::Query_buffer
|
|
4
4
|
def initialize(args)
|
5
5
|
@args = args
|
6
6
|
@queries = []
|
7
|
+
@inserts = {}
|
8
|
+
@queries_count = 0
|
7
9
|
@debug = @args[:debug]
|
10
|
+
@lock = Mutex.new
|
8
11
|
|
9
12
|
begin
|
10
13
|
yield(self)
|
11
14
|
ensure
|
12
|
-
self.flush if !@queries.empty?
|
15
|
+
self.flush if @queries_count > 0 or !@queries.empty? or !@inserts.empty?
|
13
16
|
end
|
14
17
|
end
|
15
18
|
|
16
19
|
#Adds a query to the buffer.
|
17
20
|
def query(str)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
@lock.synchronize do
|
22
|
+
STDOUT.print "Adding to buffer: #{str}\n" if @debug
|
23
|
+
@queries << str
|
24
|
+
@queries_count += 1
|
25
|
+
end
|
26
|
+
|
27
|
+
self.flush if @queries_count > 1000
|
21
28
|
return nil
|
22
29
|
end
|
23
30
|
|
24
31
|
#Delete as on a normal Knj::Db.
|
32
|
+
#===Examples
|
33
|
+
# db.q_buffer do |buffer|
|
34
|
+
# buffer.delete(:users, {:id => 5})
|
35
|
+
# end
|
25
36
|
def delete(table, where)
|
26
37
|
self.query(@args[:db].delete(table, where, :return_sql => true))
|
27
38
|
return nil
|
28
39
|
end
|
29
40
|
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
41
|
+
#Plans to inset a hash into a table. It will only be inserted when flush is called.
|
42
|
+
#===Examples
|
43
|
+
# db.q_buffer do |buffer|
|
44
|
+
# buffer.insert(:users, {:name => "John Doe"})
|
45
|
+
# end
|
46
|
+
def insert(table, data)
|
47
|
+
@lock.synchronize do
|
48
|
+
@inserts[table] = [] if !@inserts.key?(table)
|
49
|
+
@inserts[table] << data
|
50
|
+
@queries_count += 1
|
39
51
|
end
|
40
52
|
|
53
|
+
self.flush if @queries_count > 1000
|
41
54
|
return nil
|
42
55
|
end
|
56
|
+
|
57
|
+
#Flushes all queries out in a transaction. This will automatically be called for every 1000 queries.
|
58
|
+
def flush
|
59
|
+
@lock.synchronize do
|
60
|
+
return nil if @queries_count <= 0 and @queries.empty? and @inserts.empty?
|
61
|
+
|
62
|
+
@args[:db].transaction do
|
63
|
+
@queries.shift(1000).each do |str|
|
64
|
+
STDOUT.print "Executing via buffer: #{str}\n" if @debug
|
65
|
+
@args[:db].q(str)
|
66
|
+
end
|
67
|
+
|
68
|
+
@inserts.each do |table, datas_arr|
|
69
|
+
while !datas_arr.empty?
|
70
|
+
datas_chunk_arr = datas_arr.shift(1000)
|
71
|
+
@args[:db].insert_multi(table, datas_chunk_arr)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
@inserts.clear
|
77
|
+
@queries_count = 0
|
78
|
+
return nil
|
79
|
+
end
|
80
|
+
end
|
43
81
|
end
|
data/lib/knj/knjdb/revision.rb
CHANGED
@@ -4,15 +4,20 @@
|
|
4
4
|
# db = Knj::Db.new(:type => "sqlite3", :path => "test_db.sqlite3")
|
5
5
|
# schema = {
|
6
6
|
# "tables" => {
|
7
|
-
# "
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# "
|
14
|
-
#
|
15
|
-
#
|
7
|
+
# "User" => {
|
8
|
+
# "columns" => [
|
9
|
+
# {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
10
|
+
# {"name" => "name", "type" => "varchar"},
|
11
|
+
# {"name" => "lastname", "type" => "varchar"}
|
12
|
+
# ],
|
13
|
+
# "indexes" => [
|
14
|
+
# "name",
|
15
|
+
# {"name" => "lastname", "columns" => ["lastname"]}
|
16
|
+
# ],
|
17
|
+
# "on_create_after" => proc{|d|
|
18
|
+
# d["db"].insert("User", {"name" => "John", "lastname" => "Doe"})
|
19
|
+
# }
|
20
|
+
# }
|
16
21
|
# }
|
17
22
|
# }
|
18
23
|
#
|
@@ -220,9 +220,8 @@ class Knj::Objects
|
|
220
220
|
)
|
221
221
|
sql_where << " AND #{table}`#{db.esc_col(key)}` IN (#{escape_sql})"
|
222
222
|
end
|
223
|
-
elsif val.is_a?(Hash) and val[:type] == :col
|
223
|
+
elsif val.is_a?(Hash) and val[:type].to_sym == :col
|
224
224
|
raise "No table was given for join: '#{val}', key: '#{key}' on table #{table}." if !val.key?(:table)
|
225
|
-
|
226
225
|
do_joins[val[:table].to_sym] = true
|
227
226
|
sql_where << " AND #{table}`#{db.esc_col(key)}` = `#{db.esc_table(val[:table])}`.`#{db.esc_col(val[:name])}`"
|
228
227
|
elsif val.is_a?(Hash) and val[:type] == :sqlval and val[:val] == :null
|
data/lib/knj/php.rb
CHANGED
@@ -168,8 +168,9 @@ module Knj::Php
|
|
168
168
|
end
|
169
169
|
|
170
170
|
retstr << "}\n"
|
171
|
-
elsif cstr == "Time"
|
172
|
-
|
171
|
+
elsif cstr == "Time" or cstr == "Knj::Datet"
|
172
|
+
argument = argument.time if cstr == "Knj::Datet"
|
173
|
+
retstr << "#{cstr}::#{"%04d" % argument.year}-#{"%02d" % argument.month}-#{"%02d" % argument.day} #{"%02d" % argument.hour}:#{"%02d" % argument.min}:#{"%02d" % argument.sec}\n"
|
173
174
|
else
|
174
175
|
#print argument.to_s, "\n"
|
175
176
|
retstr << "Unknown class: '#{cstr}' with superclass '#{supercl}'.\n"
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: knjrbfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.51
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-06-
|
13
|
+
date: 2012-06-28 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -379,7 +379,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
379
379
|
requirements:
|
380
380
|
- - ">="
|
381
381
|
- !ruby/object:Gem::Version
|
382
|
-
hash:
|
382
|
+
hash: -3860857740067589006
|
383
383
|
segments:
|
384
384
|
- 0
|
385
385
|
version: "0"
|