knjrbfw 0.0.42 → 0.0.43

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.42
1
+ 0.0.43
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.42"
8
+ s.version = "0.0.43"
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-08}
12
+ s.date = %q{2012-06-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 = [
@@ -255,6 +255,7 @@ Gem::Specification.new do |s|
255
255
  "lib/knj/youtube.rb",
256
256
  "lib/knjrbfw.rb",
257
257
  "spec/amixer_spec.rb",
258
+ "spec/arrayext_spec.rb",
258
259
  "spec/cmd_parser_spec.rb",
259
260
  "spec/datet_spec.rb",
260
261
  "spec/db_spec.rb",
data/lib/knj/arrayext.rb CHANGED
@@ -230,4 +230,20 @@ module Knj::ArrayExt
230
230
 
231
231
  return hash
232
232
  end
233
+
234
+ #Forces an array to have a certain amount of columns.
235
+ #===Examples
236
+ # arr = [1, 2, 3, 4, 5]
237
+ # Knj::ArrayExt.force_no_cols(:arr => arr, :no => 4) #=> [1, 2, 3, 4]
238
+ def self.force_no_cols(args)
239
+ while args[:arr].length > args[:no]
240
+ args[:arr].slice!(-1)
241
+ end
242
+
243
+ while args[:arr].length < args[:no]
244
+ args[:arr] << args[:empty]
245
+ end
246
+
247
+ return nil
248
+ end
233
249
  end
data/lib/knj/datet.rb CHANGED
@@ -9,8 +9,70 @@ require "time"
9
9
  class Knj::Datet
10
10
  attr_accessor :time
11
11
 
12
- def initialize(time = Time.now)
13
- @time = time
12
+ #Initializes the object. Default is the current time. A time-object can be given.
13
+ def initialize(time = Time.now, *args)
14
+ if time.is_a?(Time)
15
+ @time = time
16
+ else
17
+ begin
18
+ @time = Time.new(*([time] | args))
19
+ rescue ArgumentError => e
20
+ days_left = 0
21
+ months_left = 0
22
+ hours_left = 0
23
+ mins_left = 0
24
+ secs_left = 0
25
+ usecs_left = 0
26
+
27
+ #Check larger month the allowed.
28
+ if args[0] and args[0] > 12
29
+ months_left = args[0] - 12
30
+ args[0] = 12
31
+ end
32
+
33
+ #Check larger date than allowed.
34
+ datet = Knj::Datet.new(time, args[0], 1)
35
+ dim = datet.days_in_month
36
+
37
+ if args[1] and args[1] > dim
38
+ days_left = args[1] - dim
39
+ args[1] = dim if days_left > 0
40
+ end
41
+
42
+ #Check larger hour than allowed.
43
+ if args[2] and args[2] >= 24
44
+ hours_left = args[2] + 1
45
+ args[2] = 0
46
+ end
47
+
48
+ #Check larger minute than allowed.
49
+ if args[3] and args[3] >= 60
50
+ mins_left = args[3] + 1
51
+ args[3] = 0
52
+ end
53
+
54
+ #Check larger secs than allowed.
55
+ if args[4] and args[4] >= 60
56
+ secs_left = args[4] + 1
57
+ args[4] = 0
58
+ end
59
+
60
+ #Check larger usecs than allowed.
61
+ if args[5] and args[5] >= 60
62
+ usecs_left = args[5] + 1
63
+ args[5] = 0
64
+ end
65
+
66
+ #Generate new stamp.
67
+ @time = Time.new(*([time] | args))
68
+ self.mins + mins_left if mins_left > 0
69
+ self.hours + hours_left if hours_left > 0
70
+ self.days + days_left if days_left > 0
71
+ self.months + months_left if months_left > 0
72
+ self.secs + secs_left if secs_left > 0
73
+ self.usecs + usecs_left if usecs_left > 0
74
+ end
75
+ end
14
76
  end
15
77
 
16
78
  #Goes forward day-by-day and stops at a date matching the criteria given.
@@ -45,6 +107,48 @@ class Knj::Datet
45
107
  end
46
108
  end
47
109
 
110
+ #Add a given amount of seconds to the object.
111
+ def add_usecs(usecs = 1)
112
+ usecs = usecs.to_i
113
+ cur_usecs = @time.usec
114
+ next_usec = cur_usecs + usecs
115
+
116
+ if next_usec >= 60
117
+ @time = self.add_secs(1).stamp(:datet => false, :usec => 0)
118
+ usecs_left = (usecs - 1) - (60 - cur_usecs)
119
+ return self.add_usecs(usecs_left) if usecs_left > 0
120
+ elsif next_usec < 0
121
+ @time = self.add_secs(-1).stamp(:datet => false, :usec => 59)
122
+ usecs_left = usecs + cur_usecs + 1
123
+ self.add_usecs(usecs_left) if usecs_left > 0
124
+ else
125
+ @time = self.stamp(:datet => false, :usec => next_usec)
126
+ end
127
+
128
+ return self
129
+ end
130
+
131
+ #Add a given amount of seconds to the object.
132
+ def add_secs(secs = 1)
133
+ secs = secs.to_i
134
+ cur_secs = @time.sec
135
+ next_sec = cur_secs + secs
136
+
137
+ if next_sec >= 60
138
+ @time = self.add_mins(1).stamp(:datet => false, :sec => 0)
139
+ secs_left = (secs - 1) - (60 - cur_secs)
140
+ return self.add_secs(secs_left) if secs_left > 0
141
+ elsif next_sec < 0
142
+ @time = self.add_mins(-1).stamp(:datet => false, :sec => 59)
143
+ secs_left = secs + cur_secs + 1
144
+ self.add_secs(secs_left) if secs_left > 0
145
+ else
146
+ @time = self.stamp(:datet => false, :sec => next_sec)
147
+ end
148
+
149
+ return self
150
+ end
151
+
48
152
  #Add a given amount of minutes to the object.
49
153
  #===Examples
50
154
  # datet = Knj::Datet.new #=> 2012-05-03 17:39:45 +0200
@@ -234,6 +338,16 @@ class Knj::Datet
234
338
  return @time.min
235
339
  end
236
340
 
341
+ #Returns the seconds as an integer.
342
+ def sec
343
+ return @time.sec
344
+ end
345
+
346
+ #Returns the microsecond as an integer.
347
+ def usec
348
+ return @time.usec
349
+ end
350
+
237
351
  #Changes the year to the given year.
238
352
  # datet = Knj::Datet.now #=> 2014-05-03 17:46:11 +0200
239
353
  # datet.year = 2005
@@ -373,6 +487,8 @@ class Knj::Datet
373
487
  return self.add_days(val) if @mode == :days
374
488
  return self.add_months(val) if @mode == :months
375
489
  return self.add_mins(val) if @mode == :mins
490
+ return self.add_secs(val) if @mode == :secs
491
+ return self.add_usecs(val) if @mode == :usecs
376
492
  raise "No such mode: #{@mode}"
377
493
  end
378
494
 
@@ -414,6 +530,18 @@ class Knj::Datet
414
530
  return self
415
531
  end
416
532
 
533
+ #Sets the mode to seconds and gets ready to plus or minus.
534
+ def secs
535
+ @mode = :secs
536
+ return self
537
+ end
538
+
539
+ #Sets the mode to mili-seconds and gets ready to plus or minus.
540
+ def usecs
541
+ @mode = :usecs
542
+ return self
543
+ end
544
+
417
545
  #Sets the mode to days and gets ready to plus or minus.
418
546
  #===Examples
419
547
  # datet.time #=> 2005-05-08 22:51:11 +0200
@@ -448,13 +576,13 @@ class Knj::Datet
448
576
  #===Examples
449
577
  # time = datet.stamp(:datet => false, :min => 15, :day => 5) #=> 2012-07-05 05:15:20 +0200
450
578
  def stamp(args)
451
- vars = {:year => @time.year, :month => @time.month, :day => @time.day, :hour => @time.hour, :min => @time.min, :sec => @time.sec}
579
+ vars = {:year => @time.year, :month => @time.month, :day => @time.day, :hour => @time.hour, :min => @time.min, :sec => @time.sec, :usec => @time.usec}
452
580
 
453
581
  args.each do |key, value|
454
582
  vars[key.to_sym] = value.to_i if key != :datet
455
583
  end
456
584
 
457
- time = Time.local(vars[:year], vars[:month], vars[:day], vars[:hour], vars[:min], vars[:sec])
585
+ time = Time.local(vars[:year], vars[:month], vars[:day], vars[:hour], vars[:min], vars[:sec], vars[:usec])
458
586
 
459
587
  if !args.key?(:datet) or args[:datet]
460
588
  return Knj::Datet.new(time)
@@ -632,7 +760,7 @@ class Knj::Datet
632
760
  #Datet.code format
633
761
  return Knj::Datet.new(Time.local(match[1], match[2], match[3], match[4], match[5], match[6], match[7]))
634
762
  elsif match = timestr.to_s.match(/^\s*(\d{4})-(\d{1,2})-(\d{1,2})(|\s+(\d{2}):(\d{2}):(\d{2})(|\.\d+)\s*)(|\s+(UTC))(|\s+(\+|\-)(\d{2})(\d{2}))$/)
635
- #Database date format (with possibility of .0 in the end - miliseconds? -knj.
763
+ #Database date format (with possibility of .0 in the end - microseconds? -knj.
636
764
 
637
765
  if match[11] and match[13] and match[14]
638
766
  if match[12] == "+" or match[12] == "-"
data/lib/knj/http2.rb CHANGED
@@ -212,6 +212,10 @@ class Knj::Http2
212
212
  #headers["Accept-Encoding"] = "none"
213
213
  end
214
214
 
215
+ if @args[:basic_auth]
216
+ headers["Authorization"] = "Basic #{Base64.encode64("#{@args[:basic_auth][:user]}:#{@args[:basic_auth][:passwd]}")}"
217
+ end
218
+
215
219
  return headers
216
220
  end
217
221
 
data/lib/knj/os.rb CHANGED
@@ -127,6 +127,7 @@ module Knj::Os
127
127
  end
128
128
  end
129
129
  else
130
+ require "open3"
130
131
  Open3.popen3(cmd) do |stdin, stdout, stderr|
131
132
  res[:out] << stdout.read
132
133
  res[:err] << stderr.read
data/lib/knj/unix_proc.rb CHANGED
@@ -26,8 +26,8 @@ class Knj::Unix_proc
26
26
  grepstr = ""
27
27
 
28
28
  if args["grep"]
29
- grepstr = "grep #{Knj::Strings.unixsafe(args["grep"])}"
30
- cmdstr << " | #{grepstr}"
29
+ grepstr = "grep #{args["grep"]}" #used for ignoring the grep-process later.
30
+ cmdstr << " | grep #{Knj::Strings.unixsafe(args["grep"])}"
31
31
  end
32
32
 
33
33
  MUTEX.synchronize do
data/lib/knj/web.rb CHANGED
@@ -369,11 +369,11 @@ class Knj::Web
369
369
  elsif args[:type] == :spacer
370
370
  html << "<tr#{classes_tr_html}><td colspan=\"2\">&nbsp;</td></tr>"
371
371
  else
372
- html << "<tr#{classes_tr_html}>"
373
- html << "<td class=\"tdt\">"
372
+ html << "<tr#{classes_tr_html} id=\"#{Knj::Web.html("#{args[:id]}_tr")}\">"
373
+ html << "<td class=\"tdt\" id=\"#{Knj::Web.html("#{args[:id]}_label")}\"><div>"
374
374
  html << title_html
375
- html << "</td>"
376
- html << "<td#{self.style_html(css)} class=\"tdc\">"
375
+ html << "</div></td>"
376
+ html << "<td#{self.style_html(css)} class=\"tdc\" id=\"#{Knj::Web.html("#{args[:id]}_content")}\"><div>"
377
377
 
378
378
  if args[:type] == :textarea
379
379
  if args.key?(:height)
@@ -385,7 +385,6 @@ class Knj::Web
385
385
  end
386
386
 
387
387
  html << "<textarea#{self.style_html(css)} class=\"input_textarea\" name=\"#{args[:name].html}\" id=\"#{args[:id].html}\">#{value}</textarea>"
388
- html << "</td>"
389
388
  elsif args[:type] == :fckeditor
390
389
  args[:height] = 400 if !args[:height]
391
390
 
@@ -394,8 +393,6 @@ class Knj::Web
394
393
  fck.Height = args[:height].to_i
395
394
  fck.Value = value
396
395
  html << fck.CreateHtml
397
-
398
- html << "</td>"
399
396
  elsif args[:type] == :select
400
397
  attr["multiple"] = "multiple" if args[:multiple]
401
398
  attr["size"] = args["size"] if args[:size]
@@ -403,7 +400,6 @@ class Knj::Web
403
400
  html << "<select#{self.attr_html(attr)}>"
404
401
  html << Knj::Web.opts(args[:opts], value, args[:opts_args])
405
402
  html << "</select>"
406
- html << "</td>"
407
403
  elsif args[:type] == :imageupload
408
404
  html << "<table class=\"designtable\"><tr#{classes_tr_html}><td style=\"width: 100%;\">"
409
405
  html << "<input type=\"file\" name=\"#{args[:name].html}\" class=\"input_file\" />"
@@ -423,11 +419,10 @@ class Knj::Web
423
419
  end
424
420
 
425
421
  html << "</td></tr></table>"
426
- html << "</td>"
427
422
  elsif args[:type] == :file
428
- html << "<input type=\"#{args[:type].to_s}\" class=\"input_#{args[:type].to_s}\" name=\"#{args[:name].html}\" /></td>"
423
+ html << "<input type=\"#{args[:type].to_s}\" class=\"input_#{args[:type].to_s}\" name=\"#{args[:name].html}\" />"
429
424
  elsif args[:type] == :textshow or args[:type] == :info
430
- html << "#{value}</td>"
425
+ html << value.to_s
431
426
  elsif args[:type] == :plain
432
427
  html << "#{Knj::Php.nl2br(Knj::Web.html(value))}"
433
428
  elsif args[:type] == :editarea
@@ -450,13 +445,16 @@ class Knj::Web
450
445
  html << "editAreaLoader.init(#{Knj::Php.json_encode(jshash)});"
451
446
  html << "}"
452
447
  html << "</script>"
448
+ elsif args[:type] == :numeric
449
+ attr[:type] = :text
450
+ attr[:value] = value
451
+ html << "<input#{self.attr_html(attr)} />"
453
452
  else
454
453
  attr[:value] = value
455
- html << "<input#{self.attr_html(attr)} /></td>"
456
- html << "</td>"
454
+ html << "<input#{self.attr_html(attr)} />"
457
455
  end
458
456
 
459
- html << "</tr>"
457
+ html << "</div></td></tr>"
460
458
  end
461
459
 
462
460
  html << "<tr#{classes_tr_html}><td colspan=\"2\" class=\"tdd\">#{args[:descr]}</td></tr>" if args[:descr]
@@ -0,0 +1,14 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "ArrayExt" do
4
+ it "should be able to make ago-strings" do
5
+ arr = [1, 2]
6
+ Knj::ArrayExt.force_no_cols(:arr => arr, :no => 1)
7
+ raise "Expected length of 1 but got: #{arr.length}" if arr.length != 1
8
+ raise "Expected element to be 1 but it wasnt: #{arr[0]}" if arr[0] != 1
9
+
10
+ Knj::ArrayExt.force_no_cols(:arr => arr, :no => 3, :empty => "test")
11
+ raise "Expected length of 3 but got: #{arr.lengtj}" if arr.length != 3
12
+ raise "Expected element 2 to be 'test' but it wasnt: #{arr[2]}" if arr[2] != "test"
13
+ end
14
+ end
data/spec/datet_spec.rb CHANGED
@@ -70,4 +70,29 @@ describe "Datet" do
70
70
  raise "Date1 was wrongly not the same as date3." if date1 != date3
71
71
  raise "Date1 was the same as date2?" if date1 == date2
72
72
  end
73
+
74
+ it "various methods should just work" do
75
+ date = Knj::Datet.new(1985, 6, 17)
76
+ raise "Invalid days in month: #{date.days_in_month}" if date.days_in_month != 30
77
+ end
78
+
79
+ it "should be able to handle invalid timestamps" do
80
+ datet = Knj::Datet.new(2012, 3, 40)
81
+ raise "Expected dbstr to be '2012-04-09' but it wasnt: '#{datet.dbstr(:time => false)}'." if datet.dbstr(:time => false) != "2012-04-09"
82
+
83
+ datet = Knj::Datet.new(2012, 14)
84
+ raise "Expected dbstr to be '2013-02-01' but it wasnt: '#{datet.dbstr(:time => false)}'." if datet.dbstr(:time => false) != "2013-02-01"
85
+
86
+ datet = Knj::Datet.new(1985, 6, 17, 28)
87
+ raise "Expected dbstr to be '1985-06-18 04:00:00' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 04:00:00"
88
+
89
+ datet = Knj::Datet.new(1985, 6, 17, 28, 68)
90
+ raise "Expected dbstr to be '1985-06-18 05:08:00' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:08:00"
91
+
92
+ datet = Knj::Datet.new(1985, 6, 17, 28, 68, 68)
93
+ raise "Expected dbstr to be '1985-06-18 05:09:08' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:09:08"
94
+
95
+ datet = Knj::Datet.new(1985, 6, 17, 28, 68, 68, 68)
96
+ raise "Expected dbstr to be '1985-06-18 05:09:09' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:09:09"
97
+ end
73
98
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.42
5
+ version: 0.0.43
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-08 00:00:00 +02:00
13
+ date: 2012-06-10 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -349,6 +349,7 @@ files:
349
349
  - lib/knj/youtube.rb
350
350
  - lib/knjrbfw.rb
351
351
  - spec/amixer_spec.rb
352
+ - spec/arrayext_spec.rb
352
353
  - spec/cmd_parser_spec.rb
353
354
  - spec/datet_spec.rb
354
355
  - spec/db_spec.rb
@@ -378,7 +379,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
378
379
  requirements:
379
380
  - - ">="
380
381
  - !ruby/object:Gem::Version
381
- hash: -1360014744473154414
382
+ hash: -2508696839394262150
382
383
  segments:
383
384
  - 0
384
385
  version: "0"