knjrbfw 0.0.50 → 0.0.51

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.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"