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 CHANGED
@@ -1 +1 @@
1
- 0.0.50
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.50"
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-25}
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 yield(prev_ele, ele)
310
+ if callback_eval.call(prev_ele, ele)
303
311
  chunk << ele
304
- elsif callback = args[:callback]
305
- callback.call(chunk)
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 callback = args[:callback]
317
- callback.call(chunk)
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 => "id"},
254
+ "object_id" => {:type => :col, :name => :id},
255
255
  "key" => val.to_s,
256
256
  "locale" => proc{|d| _session[:locale]}
257
257
  },
@@ -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, :text => count)
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
- col = Gtk::TreeViewColumn.new(args[:title])
51
- col.pack_start(renderer, false)
52
- col.add_attribute(renderer, :text, count)
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(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
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
- model_obj[col_data[:col]] = value
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
- ensure
189
- args[:change_after].call(:args => args) if args[:change_after]
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, val|
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(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
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
@@ -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 TABLE `#{name}` ("
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
- STDOUT.print "Adding to buffer: #{str}\n" if @debug
19
- @queries << str
20
- self.flush if @queries.length > 1000
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
- #Flushes all queries out in a transaction.
31
- def flush
32
- return nil if @queries.empty?
33
-
34
- @args[:db].transaction do
35
- @queries.shift(1000).each do |str|
36
- STDOUT.print "Executing via buffer: #{str}\n" if @debug
37
- @args[:db].q(str)
38
- end
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
@@ -4,15 +4,20 @@
4
4
  # db = Knj::Db.new(:type => "sqlite3", :path => "test_db.sqlite3")
5
5
  # schema = {
6
6
  # "tables" => {
7
- # "columns" => [
8
- # {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
9
- # {"name" => "name", "type" => "varchar"},
10
- # {"name" => "lastname", "type" => "varchar"}
11
- # ],
12
- # "indexes" => [
13
- # "name",
14
- # {"name" => "lastname", "columns" => ["lastname"]}
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
- retstr << "Time::#{argument.year}-#{argument.month}-#{argument.day} #{argument.hour}:#{argument.min}:#{argument.sec}\n"
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.50
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-25 00:00:00 +02:00
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: 499014487481488360
382
+ hash: -3860857740067589006
383
383
  segments:
384
384
  - 0
385
385
  version: "0"