knjrbfw 0.0.55 → 0.0.57
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/knjrbfw.gemspec +4 -2
- data/lib/knj/arrayext.rb +18 -0
- data/lib/knj/datarow.rb +45 -7
- data/lib/knj/gtk2_tv.rb +1 -4
- data/lib/knj/iotop.rb +58 -0
- data/lib/knj/knj.rb +9 -0
- data/lib/knj/knjdb/libknjdb.rb +12 -0
- data/lib/knj/knjdb/query_buffer.rb +3 -0
- data/lib/knj/objects/objects_sqlhelper.rb +7 -2
- data/lib/knj/objects.rb +45 -3
- data/lib/knj/os.rb +1 -2
- data/lib/knj/scripts/speed_test.rb +67 -0
- data/spec/objects_spec.rb +27 -5
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.57
|
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.57"
|
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-07-
|
12
|
+
s.date = %q{2012-07-10}
|
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 = [
|
@@ -101,6 +101,7 @@ Gem::Specification.new do |s|
|
|
101
101
|
"lib/knj/image.rb",
|
102
102
|
"lib/knj/includes/appserver_cli.rb",
|
103
103
|
"lib/knj/includes/require_info.rb",
|
104
|
+
"lib/knj/iotop.rb",
|
104
105
|
"lib/knj/ip2location.rb",
|
105
106
|
"lib/knj/ironruby-gtk2/button.rb",
|
106
107
|
"lib/knj/ironruby-gtk2/dialog.rb",
|
@@ -224,6 +225,7 @@ Gem::Specification.new do |s|
|
|
224
225
|
"lib/knj/scripts/keepalive.rb",
|
225
226
|
"lib/knj/scripts/php_to_rb_helper.rb",
|
226
227
|
"lib/knj/scripts/process_meta_exec.rb",
|
228
|
+
"lib/knj/scripts/speed_test.rb",
|
227
229
|
"lib/knj/scripts/svn_merge.rb",
|
228
230
|
"lib/knj/scripts/upgrade_knjrbfw_checker.rb",
|
229
231
|
"lib/knj/sms.rb",
|
data/lib/knj/arrayext.rb
CHANGED
@@ -334,4 +334,22 @@ module Knj::ArrayExt
|
|
334
334
|
return ret
|
335
335
|
end
|
336
336
|
end
|
337
|
+
|
338
|
+
#Returns a given hash in an array by mathing the contents up against another hash.
|
339
|
+
def self.array_hash_find(args)
|
340
|
+
args[:arr].each do |h|
|
341
|
+
found = true
|
342
|
+
|
343
|
+
args[:args].each do |key, val|
|
344
|
+
if h[key] != val
|
345
|
+
found = false
|
346
|
+
break
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
return h if found
|
351
|
+
end
|
352
|
+
|
353
|
+
return nil
|
354
|
+
end
|
337
355
|
end
|
data/lib/knj/datarow.rb
CHANGED
@@ -42,6 +42,12 @@ class Knj::Datarow
|
|
42
42
|
return @depending_data
|
43
43
|
end
|
44
44
|
|
45
|
+
#Returns true if this class has been initialized.
|
46
|
+
def self.initialized?
|
47
|
+
return false if !@ob or !@columns_sqlhelper_args
|
48
|
+
return true
|
49
|
+
end
|
50
|
+
|
45
51
|
#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.
|
46
52
|
#===Examples
|
47
53
|
#This will trigger Knj::Objects to automatically delete all the users pictures, when deleting the current user.
|
@@ -90,9 +96,24 @@ class Knj::Datarow
|
|
90
96
|
if val.is_a?(Array)
|
91
97
|
classname, colname, methodname = *val
|
92
98
|
elsif val.is_a?(Hash)
|
93
|
-
classname =
|
94
|
-
|
95
|
-
|
99
|
+
classname, colname, methodname = nil, nil, nil
|
100
|
+
|
101
|
+
val.each do |hkey, hval|
|
102
|
+
case hkey
|
103
|
+
when :class
|
104
|
+
classname = hval
|
105
|
+
when :col
|
106
|
+
colname = hval
|
107
|
+
when :method
|
108
|
+
methodname = hval
|
109
|
+
when :depends, :autodelete, :where
|
110
|
+
#ignore
|
111
|
+
else
|
112
|
+
raise "Invalid key for 'has_many': '#{hkey}'."
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
colname = "#{self.name.to_s.split("::").last.to_s.downcase}_id".to_sym if colname.to_s.empty?
|
96
117
|
|
97
118
|
if val[:depends]
|
98
119
|
self.depending_data << {
|
@@ -111,15 +132,16 @@ class Knj::Datarow
|
|
111
132
|
raise "Unknown argument: '#{val.class.name}'."
|
112
133
|
end
|
113
134
|
|
135
|
+
raise "No classname given." if !classname
|
136
|
+
methodname = "#{classname.to_s.downcase}s".to_sym if !methodname
|
137
|
+
raise "No column was given for '#{self.name}' regarding has-many-class: '#{classname}'." if !colname
|
138
|
+
|
114
139
|
if val.is_a?(Hash) and val.key?(:where)
|
115
140
|
where_args = val[:where]
|
116
141
|
else
|
117
142
|
where_args = nil
|
118
143
|
end
|
119
144
|
|
120
|
-
raise "No classname given." if !classname
|
121
|
-
methodname = "#{classname.to_s.downcase}s".to_sym if !methodname
|
122
|
-
|
123
145
|
define_method(methodname) do |*args, &block|
|
124
146
|
if args and args[0]
|
125
147
|
list_args = args[0]
|
@@ -181,7 +203,22 @@ class Knj::Datarow
|
|
181
203
|
elsif val.is_a?(Array)
|
182
204
|
classname, colname, methodname = *val
|
183
205
|
elsif val.is_a?(Hash)
|
184
|
-
classname, colname, methodname =
|
206
|
+
classname, colname, methodname = nil, nil, nil
|
207
|
+
|
208
|
+
val.each do |hkey, hval|
|
209
|
+
case hkey
|
210
|
+
when :class
|
211
|
+
classname = hval
|
212
|
+
when :col
|
213
|
+
colname = hval
|
214
|
+
when :method
|
215
|
+
methodname = hval
|
216
|
+
when :required
|
217
|
+
#ignore
|
218
|
+
else
|
219
|
+
raise "Invalid key for class '#{self.name}' functionality 'has_many': '#{hkey}'."
|
220
|
+
end
|
221
|
+
end
|
185
222
|
|
186
223
|
if val[:required]
|
187
224
|
colname = "#{classname.to_s.downcase}_id".to_sym if !colname
|
@@ -306,6 +343,7 @@ class Knj::Datarow
|
|
306
343
|
|
307
344
|
#Returns various data for the objects-sql-helper. This can be used to view various informations about the columns and more.
|
308
345
|
def self.columns_sqlhelper_args
|
346
|
+
raise "No SQLHelper arguments has been spawned yet." if !@columns_sqlhelper_args
|
309
347
|
return @columns_sqlhelper_args
|
310
348
|
end
|
311
349
|
|
data/lib/knj/gtk2_tv.rb
CHANGED
@@ -108,10 +108,7 @@ module Knj::Gtk2::Tv
|
|
108
108
|
# Knj::Gtk2::Tv.sel(treeview) #=> [1, "Kasper"]
|
109
109
|
def self.sel(tv)
|
110
110
|
selected = tv.selection.selected_rows
|
111
|
-
|
112
|
-
if !tv.model or selected.size <= 0
|
113
|
-
return nil
|
114
|
-
end
|
111
|
+
return nil if !tv.model or selected.size <= 0
|
115
112
|
|
116
113
|
iter = tv.model.get_iter(selected[0])
|
117
114
|
returnval = []
|
data/lib/knj/iotop.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#Currently broken - cannot get iotop to return values when running through script :-(
|
2
|
+
class Knj::Iotop
|
3
|
+
def initialize(args)
|
4
|
+
@data = {}
|
5
|
+
@mutex = Monitor.new
|
6
|
+
|
7
|
+
cmd = "iotop -bPk"
|
8
|
+
|
9
|
+
if args[:pids]
|
10
|
+
args[:pids].each do |pid|
|
11
|
+
cmd << " --pid=#{pid.to_i}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
@stdout = IO.popen(cmd)
|
16
|
+
|
17
|
+
@thread = Knj::Thread.new do
|
18
|
+
@stdout.each_line do |line_str|
|
19
|
+
if line_str.match(/^Total\s+disk\s+read:\s+([\d\.]+)\s+(K\/s)\s+\|\s+Total\s+disk\s+write:\s+([\d\.]+)\s+(K\/s)\s*$/i)
|
20
|
+
#ignore.
|
21
|
+
elsif line_str.match(/ PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND/)
|
22
|
+
#ignore.
|
23
|
+
elsif match = line_str.match(/^\s*(\d+)\s+(.+?)\s+(.+?)\s+([\d\.]+)\s+(K\/s)\s+([\d\.]+)\s+(K\/s)\s+([\d\.]+)\s+(%)\s+([\d\.]+)\s+(%)\s+(.+)\s*$/)
|
24
|
+
@mutex.synchronize do
|
25
|
+
pid = match[1].to_i
|
26
|
+
|
27
|
+
if match[12].index("bestseller") != nil
|
28
|
+
print line_str + "\n"
|
29
|
+
Knj::Php.print_r(match)
|
30
|
+
end
|
31
|
+
|
32
|
+
@data[pid] = {
|
33
|
+
:pid => pid,
|
34
|
+
:prio => match[2],
|
35
|
+
:user => match[3],
|
36
|
+
:disk_read => (match[4].to_f * 1024).to_i,
|
37
|
+
:disk_write => (match[6].to_f * 1024).to_i,
|
38
|
+
:spawpin => match[8].to_f,
|
39
|
+
:io => match[10].to_f,
|
40
|
+
:cmd => match[12]
|
41
|
+
}
|
42
|
+
end
|
43
|
+
else
|
44
|
+
raise "Could not parse line: '#{line_str}'."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
#Returns information for the given PID.
|
51
|
+
def [](pid)
|
52
|
+
@mutex.synchronize do
|
53
|
+
pid = pid.to_i
|
54
|
+
raise "No such PID: '#{pid}'." if !@data.key?(pid)
|
55
|
+
return @data[pid]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/knj/knj.rb
CHANGED
@@ -34,4 +34,13 @@ module Knj
|
|
34
34
|
def self.p(*args, &block)
|
35
35
|
return Knj::Php.print_r(*args, &block)
|
36
36
|
end
|
37
|
+
|
38
|
+
def self.handle_return(args)
|
39
|
+
if args[:block]
|
40
|
+
args[:enum].each(&args[:block])
|
41
|
+
return nil
|
42
|
+
else
|
43
|
+
return Array_enumerator.new(args[:enum])
|
44
|
+
end
|
45
|
+
end
|
37
46
|
end
|
data/lib/knj/knjdb/libknjdb.rb
CHANGED
@@ -764,10 +764,22 @@ class Knj::Db
|
|
764
764
|
end
|
765
765
|
end
|
766
766
|
|
767
|
+
#Returns the sign to be used for surrounding tables.
|
767
768
|
def col_table
|
768
769
|
return "`"
|
769
770
|
end
|
770
771
|
|
772
|
+
#Optimizes all tables in the database.
|
773
|
+
def optimize(args = nil)
|
774
|
+
STDOUT.puts "Beginning optimization of database." if @debug or (args and args[:debug])
|
775
|
+
self.tables.list do |table|
|
776
|
+
STDOUT.puts "Optimizing table: '#{table.name}'." if @debug or (args and args[:debug])
|
777
|
+
table.optimize
|
778
|
+
end
|
779
|
+
|
780
|
+
return nil
|
781
|
+
end
|
782
|
+
|
771
783
|
#Proxies the method to the driver.
|
772
784
|
#
|
773
785
|
#===Examples
|
@@ -9,6 +9,8 @@ class Knj::Db::Query_buffer
|
|
9
9
|
@debug = @args[:debug]
|
10
10
|
@lock = Mutex.new
|
11
11
|
|
12
|
+
STDOUT.puts "Query buffer started." if @debug
|
13
|
+
|
12
14
|
begin
|
13
15
|
yield(self)
|
14
16
|
ensure
|
@@ -34,6 +36,7 @@ class Knj::Db::Query_buffer
|
|
34
36
|
# buffer.delete(:users, {:id => 5})
|
35
37
|
# end
|
36
38
|
def delete(table, where)
|
39
|
+
STDOUT.puts "Delete called on table #{table} with arguments: '#{where}'." if @debug
|
37
40
|
self.query(@args[:db].delete(table, where, :return_sql => true))
|
38
41
|
return nil
|
39
42
|
end
|
@@ -189,6 +189,7 @@ class Knj::Objects
|
|
189
189
|
if !args[:joins_skip]
|
190
190
|
datarow_obj = self.datarow_obj_from_args(args_def, list_args, realkey[0])
|
191
191
|
args = datarow_obj.columns_sqlhelper_args
|
192
|
+
raise "Couldnt get arguments from SQLHelper." if !args
|
192
193
|
else
|
193
194
|
datarow_obj = @args[:module].const_get(realkey[0])
|
194
195
|
args = args_def
|
@@ -476,10 +477,14 @@ class Knj::Objects
|
|
476
477
|
|
477
478
|
def datarow_from_datarow_argument(datarow_argument)
|
478
479
|
if datarow_argument.is_a?(String)
|
479
|
-
|
480
|
+
const = Knj::Strings.const_get_full(datarow_argument)
|
481
|
+
else
|
482
|
+
const = datarow_argument
|
480
483
|
end
|
481
484
|
|
482
|
-
|
485
|
+
self.load_class(datarow_argument.to_s.split("::").last) if !const.initialized? #Make sure the class is initialized.
|
486
|
+
|
487
|
+
return const
|
483
488
|
end
|
484
489
|
|
485
490
|
def not(not_v, val)
|
data/lib/knj/objects.rb
CHANGED
@@ -367,6 +367,15 @@ class Knj::Objects
|
|
367
367
|
return obj
|
368
368
|
end
|
369
369
|
|
370
|
+
#Same as normal get but returns false if not found instead of raising error.
|
371
|
+
def get!(*args, &block)
|
372
|
+
begin
|
373
|
+
return self.get(*args, &block)
|
374
|
+
rescue Knj::Errors::NotFound
|
375
|
+
return false
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
370
379
|
def object_finalizer(id)
|
371
380
|
classname = @objects_idclass[id]
|
372
381
|
if classname
|
@@ -411,6 +420,10 @@ class Knj::Objects
|
|
411
420
|
end
|
412
421
|
|
413
422
|
#Returns an array-list of objects. If given a block the block will be called for each element and memory will be spared if running weak-link-mode.
|
423
|
+
#===Examples
|
424
|
+
# ob.list(:User) do |user|
|
425
|
+
# print "Username: #{user.name}\n"
|
426
|
+
# end
|
414
427
|
def list(classname, args = {}, &block)
|
415
428
|
args = {} if args == nil
|
416
429
|
classname = classname.to_sym
|
@@ -442,6 +455,33 @@ class Knj::Objects
|
|
442
455
|
end
|
443
456
|
end
|
444
457
|
|
458
|
+
#Yields every object that is missing certain required objects (based on 'has_many' required-argument).
|
459
|
+
def list_invalid_required(args, &block)
|
460
|
+
enum = Enumerator.new do |yielder|
|
461
|
+
classname = args[:class]
|
462
|
+
classob = @args[:module].const_get(classname)
|
463
|
+
required_data = classob.required_data
|
464
|
+
|
465
|
+
if required_data and !required_data.empty?
|
466
|
+
required_data.each do |req_data|
|
467
|
+
self.list(args[:class], :cloned_ubuf => true) do |obj|
|
468
|
+
puts "Checking #{obj.classname}(#{obj.id}) for required #{req_data[:class]}." if args[:debug]
|
469
|
+
id = obj[req_data[:col]]
|
470
|
+
|
471
|
+
begin
|
472
|
+
raise Knj::Errors::NotFound if !id
|
473
|
+
obj_req = self.get(req_data[:class], id)
|
474
|
+
rescue Knj::Errors::NotFound
|
475
|
+
yielder << {:obj => obj, :type => :required, :id => id, :data => req_data}
|
476
|
+
end
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
return Knj.handle_return(:enum => enum, :block => block)
|
483
|
+
end
|
484
|
+
|
445
485
|
#Returns select-options-HTML for inserting into a HTML-select-element.
|
446
486
|
def list_opts(classname, args = {})
|
447
487
|
Knj::ArrayExt.hash_sym(args)
|
@@ -768,9 +808,7 @@ class Knj::Objects
|
|
768
808
|
end
|
769
809
|
|
770
810
|
#Delete any translations that has been set on the object by 'has_translation'-method.
|
771
|
-
if object.class.translations
|
772
|
-
_kas.trans_del(object)
|
773
|
-
end
|
811
|
+
_kas.trans_del(object) if object.class.translations
|
774
812
|
|
775
813
|
#If a buffer is given in arguments, then use that to delete the object.
|
776
814
|
if args and buffer = args[:db_buffer]
|
@@ -867,6 +905,10 @@ class Knj::Objects
|
|
867
905
|
def clean_all
|
868
906
|
self.clean(@objects.keys)
|
869
907
|
end
|
908
|
+
|
909
|
+
def classes_loaded
|
910
|
+
return @objects.keys
|
911
|
+
end
|
870
912
|
end
|
871
913
|
|
872
914
|
require "#{$knjpath}objects/objects_sqlhelper"
|
data/lib/knj/os.rb
CHANGED
@@ -143,8 +143,7 @@ module Knj::Os
|
|
143
143
|
|
144
144
|
#Runs a command as a process of its own and wont block or be depended on this process.
|
145
145
|
def self.subproc(cmd)
|
146
|
-
cmd
|
147
|
-
%x[#{cmd}]
|
146
|
+
%x[#{cmd} >> /dev/null 2>&1 &]
|
148
147
|
end
|
149
148
|
|
150
149
|
#Returns the xauth file for GDM.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "timeout"
|
4
|
+
|
5
|
+
args = {}
|
6
|
+
ARGV.each do |arg|
|
7
|
+
if match = arg.match(/^tmpfile=(.+)$/)
|
8
|
+
args["tmpfile"] = match[1]
|
9
|
+
else
|
10
|
+
raise "Unknown argument: '#{arg}'."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
raise "No 'tmpfile' given in arguments." if !args["tmpfile"]
|
15
|
+
|
16
|
+
#8 kb string.
|
17
|
+
str = ("0" * 1024) * 8
|
18
|
+
strl = str.length
|
19
|
+
|
20
|
+
count = 0
|
21
|
+
time_begin = Time.now.to_f
|
22
|
+
|
23
|
+
puts "Starting to write file."
|
24
|
+
begin
|
25
|
+
Timeout.timeout(4) do
|
26
|
+
File.open(args["tmpfile"], "w") do |fp|
|
27
|
+
fp.sync = true
|
28
|
+
|
29
|
+
loop do
|
30
|
+
fp.write(str)
|
31
|
+
count += strl
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
rescue Timeout::Error
|
36
|
+
#ignore
|
37
|
+
end
|
38
|
+
|
39
|
+
secs = Time.now.to_f - time_begin
|
40
|
+
mb_sec = ((count / secs) / 1024) / 1024
|
41
|
+
|
42
|
+
puts "#{mb_sec.round(2)} mb/s in #{secs.round(1)} seconds."
|
43
|
+
|
44
|
+
|
45
|
+
puts "Starting to read the file again."
|
46
|
+
count = 0
|
47
|
+
time_begin = Time.now.to_f
|
48
|
+
|
49
|
+
begin
|
50
|
+
Timeout.timeout(4) do
|
51
|
+
File.open(args["tmpfile"], "r") do |fp|
|
52
|
+
loop do
|
53
|
+
read = fp.read(4096)
|
54
|
+
count += read.length
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
rescue Timeout::Error
|
59
|
+
#ignore
|
60
|
+
end
|
61
|
+
|
62
|
+
secs = Time.now.to_f - time_begin
|
63
|
+
mb_sec = ((count / secs) / 1024) / 1024
|
64
|
+
|
65
|
+
puts "#{mb_sec.round(2)} mb/s in #{secs.round(1)} seconds."
|
66
|
+
|
67
|
+
File.unlink(args["tmpfile"])
|
data/spec/objects_spec.rb
CHANGED
@@ -76,9 +76,9 @@ describe "Objects" do
|
|
76
76
|
|
77
77
|
#Stress it to test threadsafety...
|
78
78
|
threads = []
|
79
|
-
0.upto(
|
79
|
+
0.upto(5) do |tc|
|
80
80
|
threads << Knj::Thread.new do
|
81
|
-
0.upto(
|
81
|
+
0.upto(5) do |ic|
|
82
82
|
user = $ob.add(:User, {:username => "User #{tc}-#{ic}"})
|
83
83
|
raise "No user returned." if !user
|
84
84
|
$ob.delete(user)
|
@@ -116,9 +116,9 @@ describe "Objects" do
|
|
116
116
|
)
|
117
117
|
|
118
118
|
threads = []
|
119
|
-
0.upto(
|
119
|
+
0.upto(5) do
|
120
120
|
threads << Knj::Thread.new do
|
121
|
-
0.upto(
|
121
|
+
0.upto(5) do
|
122
122
|
ret = $ob2.add(:Group, {:groupname => "User 1"}, {:skip_ret => true})
|
123
123
|
raise "Expected empty return but got something: #{ret}" if ret
|
124
124
|
end
|
@@ -228,6 +228,28 @@ describe "Objects" do
|
|
228
228
|
:project_id => 1
|
229
229
|
})
|
230
230
|
|
231
|
+
begin
|
232
|
+
$obb.add(:Task, {:name => "Test task"})
|
233
|
+
raise "Method should fail but didnt."
|
234
|
+
rescue
|
235
|
+
#ignore.
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
#Test 'list_invalid_required'.
|
240
|
+
$db.insert(:Task, :name => "Invalid require")
|
241
|
+
id = $db.last_id
|
242
|
+
found = false
|
243
|
+
|
244
|
+
$ob.list_invalid_required(:class => :Task) do |d|
|
245
|
+
raise "Expected object ID to be #{id} but it wasnt: #{d[:obj].id}" if d[:obj].id.to_i != id.to_i
|
246
|
+
$ob.delete(d[:obj])
|
247
|
+
found = true
|
248
|
+
end
|
249
|
+
|
250
|
+
raise "Expected to find a task but didnt." if !found
|
251
|
+
|
252
|
+
|
231
253
|
ret_proc = []
|
232
254
|
$ob.list(:Task) do |task|
|
233
255
|
ret_proc << task
|
@@ -289,7 +311,7 @@ describe "Objects" do
|
|
289
311
|
|
290
312
|
it "should be able to to multiple additions and delete objects through a buffer" do
|
291
313
|
objs = []
|
292
|
-
0.upto(
|
314
|
+
0.upto(500) do
|
293
315
|
objs << {:name => :Kasper}
|
294
316
|
end
|
295
317
|
|
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.57
|
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-07-
|
13
|
+
date: 2012-07-10 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- lib/knj/image.rb
|
196
196
|
- lib/knj/includes/appserver_cli.rb
|
197
197
|
- lib/knj/includes/require_info.rb
|
198
|
+
- lib/knj/iotop.rb
|
198
199
|
- lib/knj/ip2location.rb
|
199
200
|
- lib/knj/ironruby-gtk2/button.rb
|
200
201
|
- lib/knj/ironruby-gtk2/dialog.rb
|
@@ -318,6 +319,7 @@ files:
|
|
318
319
|
- lib/knj/scripts/keepalive.rb
|
319
320
|
- lib/knj/scripts/php_to_rb_helper.rb
|
320
321
|
- lib/knj/scripts/process_meta_exec.rb
|
322
|
+
- lib/knj/scripts/speed_test.rb
|
321
323
|
- lib/knj/scripts/svn_merge.rb
|
322
324
|
- lib/knj/scripts/upgrade_knjrbfw_checker.rb
|
323
325
|
- lib/knj/sms.rb
|
@@ -379,7 +381,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
379
381
|
requirements:
|
380
382
|
- - ">="
|
381
383
|
- !ruby/object:Gem::Version
|
382
|
-
hash:
|
384
|
+
hash: 2259691456146427646
|
383
385
|
segments:
|
384
386
|
- 0
|
385
387
|
version: "0"
|