knjrbfw 0.0.49 → 0.0.50
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 +80 -0
- data/lib/knj/gtk2_tv.rb +14 -0
- data/lib/knj/objects/objects_sqlhelper.rb +15 -6
- data/spec/arrayext_spec.rb +28 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.50
|
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.50"
|
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-25}
|
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
@@ -246,4 +246,84 @@ module Knj::ArrayExt
|
|
246
246
|
|
247
247
|
return nil
|
248
248
|
end
|
249
|
+
|
250
|
+
#Returns a powerset of the given array. Copied from 'http://mikeburnscoder.wordpress.com/2009/05/30/powerset-in-ruby-using-the-list-monad/'.
|
251
|
+
#===Examples
|
252
|
+
# ps = Knj::ArrayExt.powerset(:arr => [1, 2 , 3, 4])
|
253
|
+
# ps.length #=> 16
|
254
|
+
def self.powerset(args)
|
255
|
+
arr = args[:arr]
|
256
|
+
raise "No array was given." if !arr
|
257
|
+
|
258
|
+
if block_given?
|
259
|
+
if arr.length == 0
|
260
|
+
yield []
|
261
|
+
else
|
262
|
+
Knj::ArrayExt.powerset(:arr => arr[0..-2]) do |set|
|
263
|
+
yield set
|
264
|
+
yield set + [arr[-1]]
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
arr
|
269
|
+
else
|
270
|
+
Enumerator.new do |sets|
|
271
|
+
Knj::ArrayExt.powerset(:arr => arr) do |set|
|
272
|
+
sets << set
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
#Divides an array based on callback.
|
279
|
+
#===Examples
|
280
|
+
# arr = [1, 2, 3, 4, 6, 7, 8, 9, 15, 16, 17, 18]
|
281
|
+
# res = Knj::ArrayExt.divide(:arr => arr) do |a, b|
|
282
|
+
# if (b - a) > 1
|
283
|
+
# false
|
284
|
+
# else
|
285
|
+
# true
|
286
|
+
# end
|
287
|
+
# end
|
288
|
+
#
|
289
|
+
# res.length #=> 3
|
290
|
+
def self.divide(args)
|
291
|
+
prev_ele = args[:arr].shift
|
292
|
+
chunk = [prev_ele]
|
293
|
+
ret = [] if !args[:callback]
|
294
|
+
|
295
|
+
args[:arr].each do |ele|
|
296
|
+
if !chunk
|
297
|
+
chunk = [ele]
|
298
|
+
prev_ele = ele
|
299
|
+
next
|
300
|
+
end
|
301
|
+
|
302
|
+
if yield(prev_ele, ele)
|
303
|
+
chunk << ele
|
304
|
+
elsif callback = args[:callback]
|
305
|
+
callback.call(chunk)
|
306
|
+
chunk = nil
|
307
|
+
else
|
308
|
+
ret << chunk
|
309
|
+
chunk = nil
|
310
|
+
end
|
311
|
+
|
312
|
+
prev_ele = ele
|
313
|
+
end
|
314
|
+
|
315
|
+
if chunk and !chunk.empty?
|
316
|
+
if callback = args[:callback]
|
317
|
+
callback.call(chunk)
|
318
|
+
else
|
319
|
+
ret << chunk
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
if args[:callback]
|
324
|
+
return nil
|
325
|
+
else
|
326
|
+
return ret
|
327
|
+
end
|
328
|
+
end
|
249
329
|
end
|
data/lib/knj/gtk2_tv.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
+
#This module contains various helper-methods for handeling stuff regarding treeviews.
|
1
2
|
module Knj::Gtk2::Tv
|
3
|
+
#Initializes a treeview with a model and a number of columns. Returns a hash containing various data like the renderers.
|
4
|
+
#===Examples
|
5
|
+
# Knj::Gtk2::Tv.init(treeview, ["ID", "Name"])
|
2
6
|
def self.init(tv, columns)
|
3
7
|
ret = {
|
4
8
|
:renderers => []
|
@@ -62,6 +66,9 @@ module Knj::Gtk2::Tv
|
|
62
66
|
return ret
|
63
67
|
end
|
64
68
|
|
69
|
+
#Appends data to the treeview.
|
70
|
+
#===Examples
|
71
|
+
# Knj::Gtk2::Tv.append(treeview, [1, "Kasper"])
|
65
72
|
def self.append(tv, data)
|
66
73
|
iter = tv.model.append
|
67
74
|
|
@@ -86,6 +93,9 @@ module Knj::Gtk2::Tv
|
|
86
93
|
return {:iter => iter}
|
87
94
|
end
|
88
95
|
|
96
|
+
#Gets the selected data from the treeview.
|
97
|
+
#===Examples
|
98
|
+
# Knj::Gtk2::Tv.sel(treeview) #=> [1, "Kasper"]
|
89
99
|
def self.sel(tv)
|
90
100
|
selected = tv.selection.selected_rows
|
91
101
|
|
@@ -218,15 +228,19 @@ module Knj::Gtk2::Tv
|
|
218
228
|
end
|
219
229
|
end
|
220
230
|
|
231
|
+
#Shortcuts on the actual treeview-objects.
|
221
232
|
class Gtk::TreeView
|
233
|
+
#Shortcut to do Knj::Gtk2::Tv.sel(treeview)
|
222
234
|
def sel
|
223
235
|
return Knj::Gtk2::Tv.sel(self)
|
224
236
|
end
|
225
237
|
|
238
|
+
#Shortcut to do Knj::Gtk2.append(treeview, [data1, data2])
|
226
239
|
def append(data)
|
227
240
|
return Knj::Gtk2::Tv.append(self, data)
|
228
241
|
end
|
229
242
|
|
243
|
+
#Shortcut to do Knj::Gtk2.init(treeview, columns_array)
|
230
244
|
def init(cols)
|
231
245
|
return Knj::Gtk2::Tv.init(self, cols)
|
232
246
|
end
|
@@ -310,7 +310,8 @@ class Knj::Objects
|
|
310
310
|
end
|
311
311
|
|
312
312
|
found = true
|
313
|
-
elsif args.key?(:cols_date) and match = key.match(/^(.+)_(day|week|month|year|from|to|below|above)$/) and args[:cols_date].index(match[1]) != nil
|
313
|
+
elsif args.key?(:cols_date) and match = key.match(/^(.+)_(day|week|month|year|from|to|below|above)(|_(not))$/) and args[:cols_date].index(match[1]) != nil
|
314
|
+
not_v = match[4]
|
314
315
|
val = Knj::Datet.in(val) if val.is_a?(Time)
|
315
316
|
|
316
317
|
if match[2] == "day"
|
@@ -325,19 +326,19 @@ class Knj::Objects
|
|
325
326
|
sql_where << " OR "
|
326
327
|
end
|
327
328
|
|
328
|
-
sql_where << "
|
329
|
+
sql_where << " AND #{db.sqlspecs.strftime("%d %m %Y", "#{table}`#{db.esc_col(match[1])}`")} #{self.not(not_v, "!")}= #{db.sqlspecs.strftime("%d %m %Y", "'#{db.esc(realval.dbstr)}'")}"
|
329
330
|
end
|
330
331
|
|
331
332
|
sql_where << ")"
|
332
333
|
else
|
333
|
-
sql_where << " AND
|
334
|
+
sql_where << " AND #{db.sqlspecs.strftime("%d %m %Y", "#{table}`#{db.esc_col(match[1])}`")} #{self.not(not_v, "!")}= #{db.sqlspecs.strftime("%d %m %Y", "'#{db.esc(val.dbstr)}'")}"
|
334
335
|
end
|
335
336
|
elsif match[2] == "week"
|
336
|
-
sql_where << " AND #{db.sqlspecs.strftime("%W %Y", "#{table}`#{db.esc_col(match[1])}`")} = #{db.sqlspecs.strftime("%W %Y", "'#{db.esc(val.dbstr)}'")}"
|
337
|
+
sql_where << " AND #{db.sqlspecs.strftime("%W %Y", "#{table}`#{db.esc_col(match[1])}`")} #{self.not(not_v, "!")}= #{db.sqlspecs.strftime("%W %Y", "'#{db.esc(val.dbstr)}'")}"
|
337
338
|
elsif match[2] == "month"
|
338
|
-
sql_where << " AND #{db.sqlspecs.strftime("%m %Y", "#{table}`#{db.esc_col(match[1])}`")} = #{db.sqlspecs.strftime("%m %Y", "'#{db.esc(val.dbstr)}'")}"
|
339
|
+
sql_where << " AND #{db.sqlspecs.strftime("%m %Y", "#{table}`#{db.esc_col(match[1])}`")} #{self.not(not_v, "!")}= #{db.sqlspecs.strftime("%m %Y", "'#{db.esc(val.dbstr)}'")}"
|
339
340
|
elsif match[2] == "year"
|
340
|
-
sql_where << " AND
|
341
|
+
sql_where << " AND #{db.sqlspecs.strftime("%Y", "#{table}`#{db.esc_col(match[1])}`")} #{self.not(not_v, "!")}= #{db.sqlspecs.strftime("%Y", "'#{db.esc(val.dbstr)}'")}"
|
341
342
|
elsif match[2] == "from" or match[2] == "above"
|
342
343
|
sql_where << " AND #{table}`#{db.esc_col(match[1])}` >= '#{db.esc(val.dbstr)}'"
|
343
344
|
elsif match[2] == "to" or match[2] == "below"
|
@@ -481,4 +482,12 @@ class Knj::Objects
|
|
481
482
|
|
482
483
|
return datarow_argument
|
483
484
|
end
|
485
|
+
|
486
|
+
def not(not_v, val)
|
487
|
+
if not_v == "not" or not_v == "not_"
|
488
|
+
return val
|
489
|
+
end
|
490
|
+
|
491
|
+
return ""
|
492
|
+
end
|
484
493
|
end
|
data/spec/arrayext_spec.rb
CHANGED
@@ -1,6 +1,34 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "ArrayExt" do
|
4
|
+
it "should be able to do powersets" do
|
5
|
+
ps = Knj::ArrayExt.powerset(:arr => [1, 2, 3, 4]).to_a
|
6
|
+
raise "Expected length of 16 but it wasnt: #{ps.length}" if ps.length != 16
|
7
|
+
|
8
|
+
ite = 0
|
9
|
+
Knj::ArrayExt.powerset(:arr => [1, 2, 3, 4]) do |arr|
|
10
|
+
ite += 1
|
11
|
+
end
|
12
|
+
|
13
|
+
raise "Expected block to be executed 16 times but it wasnt: #{ite}" if ite != 16
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be able to divide arrays" do
|
17
|
+
arr = [1, 2, 3, 4, 6, 7, 8, 9, 15, 16, 17, 18]
|
18
|
+
res = Knj::ArrayExt.divide(:arr => arr) do |a, b|
|
19
|
+
if (b - a) > 1
|
20
|
+
false
|
21
|
+
else
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
raise "Expected length of 3 but it wasnt: #{res.length}" if res.length != 3
|
27
|
+
raise "Expected length of 4 but it wasnt: #{res[0].length}" if res[0].length != 4
|
28
|
+
raise "Expected length of 3 but it wasnt: #{res[1].length}" if res[1].length != 3
|
29
|
+
raise "Expected length of 3 but it wasnt: #{res[2].length}" if res[2].length != 3
|
30
|
+
end
|
31
|
+
|
4
32
|
it "should be able to make ago-strings" do
|
5
33
|
arr = [1, 2]
|
6
34
|
Knj::ArrayExt.force_no_cols(:arr => arr, :no => 1)
|
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.50
|
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-25 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: 499014487481488360
|
383
383
|
segments:
|
384
384
|
- 0
|
385
385
|
version: "0"
|