knjrbfw 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/Gemfile +3 -1
  2. data/VERSION +1 -1
  3. data/knjrbfw.gemspec +14 -4
  4. data/lib/knj/amixer.rb +148 -0
  5. data/lib/knj/arrayext.rb +14 -5
  6. data/lib/knj/autoload.rb +63 -57
  7. data/lib/knj/autoload/backups/facets_dictionary.rb +2 -2
  8. data/lib/knj/autoload/erubis.rb +2 -0
  9. data/lib/knj/cmd_gen.rb +71 -0
  10. data/lib/knj/compiler.rb +2 -2
  11. data/lib/knj/datarow.rb +138 -38
  12. data/lib/knj/datestamp.rb +2 -2
  13. data/lib/knj/datet.rb +72 -17
  14. data/lib/knj/erb/include.rb +5 -5
  15. data/lib/knj/errors.rb +4 -1
  16. data/lib/knj/eruby.rb +25 -11
  17. data/lib/knj/event_filemod.rb +27 -26
  18. data/lib/knj/event_handler.rb +8 -8
  19. data/lib/knj/exchangerates.rb +1 -1
  20. data/lib/knj/facebook_connect.rb +37 -0
  21. data/lib/knj/gettext_threadded.rb +4 -3
  22. data/lib/knj/google_sitemap.rb +1 -1
  23. data/lib/knj/hash_methods.rb +1 -1
  24. data/lib/knj/http.rb +35 -19
  25. data/lib/knj/http2.rb +249 -0
  26. data/lib/knj/image.rb +128 -0
  27. data/lib/knj/jruby-gtk2/gtk2.rb +1 -1
  28. data/lib/knj/knj.rb +1 -1
  29. data/lib/knj/knj_controller.rb +0 -2
  30. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +3 -3
  31. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +11 -11
  32. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +2 -2
  33. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +71 -14
  34. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +17 -14
  35. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +5 -5
  36. data/lib/knj/knjdb/libknjdb.rb +33 -16
  37. data/lib/knj/knjdb/libknjdb_row.rb +8 -8
  38. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +1 -1
  39. data/lib/knj/mount.rb +6 -6
  40. data/lib/knj/mutexcl.rb +2 -2
  41. data/lib/knj/objects.rb +286 -73
  42. data/lib/knj/opts.rb +11 -4
  43. data/lib/knj/os.rb +16 -3
  44. data/lib/knj/php.rb +73 -26
  45. data/lib/knj/php_parser/php_parser.rb +1 -77
  46. data/lib/knj/retry.rb +4 -4
  47. data/lib/knj/rhodes/rhodes.rb +106 -0
  48. data/lib/knj/sshrobot/sshrobot.rb +1 -1
  49. data/lib/knj/strings.rb +72 -0
  50. data/lib/knj/sysuser.rb +1 -1
  51. data/lib/knj/tests/test_http2.rb +18 -0
  52. data/lib/knj/thread.rb +1 -5
  53. data/lib/knj/thread2.rb +3 -3
  54. data/lib/knj/threadhandler.rb +2 -2
  55. data/lib/knj/threadpool.rb +4 -4
  56. data/lib/knj/translations.rb +2 -17
  57. data/lib/knj/unix_proc.rb +3 -3
  58. data/lib/knj/web.rb +156 -77
  59. data/lib/knj/webscripts/image.rhtml +22 -3
  60. data/lib/knj/x11vnc.rb +3 -3
  61. data/spec/amixer_spec.rb +27 -0
  62. data/spec/knjrbfw_spec.rb +70 -12
  63. data/testfiles/image.jpg +0 -0
  64. metadata +32 -14
  65. data/Gemfile.lock +0 -32
@@ -5,7 +5,7 @@ module Knj::Opts
5
5
 
6
6
  def self.init(arr_opts)
7
7
  arr_opts.each do |pair|
8
- if (pair[0] == "knjdb" or pair[0] == "table")
8
+ if pair[0] == "knjdb" or pair[0] == "table"
9
9
  $knjoptions[pair[0]] = pair[1]
10
10
  end
11
11
  end
@@ -18,7 +18,9 @@ module Knj::Opts
18
18
  if !value
19
19
  return ""
20
20
  else
21
- return value["value"]
21
+ return value["value"] if value.key?("value")
22
+ return value[:value] if value.key?(:value)
23
+ raise "Could not figure out of value."
22
24
  end
23
25
  end
24
26
 
@@ -26,13 +28,18 @@ module Knj::Opts
26
28
  db = $knjoptions["knjdb"]
27
29
  result = db.select($knjoptions["table"], {"title" => title}, {"limit" => 1}).fetch
28
30
 
29
- if result.class.to_s == "NilClass"
31
+ if !result
30
32
  db.insert($knjoptions["table"], {
31
33
  "title" => title,
32
34
  "value" => value
33
35
  })
34
36
  else
35
- db.update($knjoptions["table"], {"value" => value}, {"id" => result["id"]})
37
+ id = nil
38
+ id = result["id"] if result.key?("id")
39
+ id = result[:id] if result.key?(:id)
40
+ raise "Could not figure out of ID." if !id
41
+
42
+ db.update($knjoptions["table"], {"value" => value}, {"id" => id})
36
43
  end
37
44
  end
38
45
  end
@@ -99,9 +99,22 @@ module Knj::Os
99
99
  #Returns the xauth file for GDM.
100
100
  def self.xauth_file
101
101
  authfile = ""
102
- Dir.new("/var/run/gdm").each do |file|
103
- next if file == "." or file == ".." or !file.match(/^auth-for-gdm-.+$/)
104
- authfile = "/var/run/gdm/#{file}/database"
102
+
103
+ if File.exists?("/var/run/gdm")
104
+ Dir.foreach("/var/run/gdm") do |file|
105
+ next if file == "." or file == ".." or !file.match(/^auth-for-gdm-.+$/)
106
+ authfile = "/var/run/gdm/#{file}/database"
107
+ end
108
+ end
109
+
110
+ if File.exists?("/var/run/lightdm")
111
+ Dir.foreach("/var/run/lightdm") do |file|
112
+ next if file == "." or file == ".."
113
+
114
+ Dir.foreach("/var/run/lightdm/#{file}") do |f2|
115
+ authfile = "/var/run/lightdm/#{file}/#{f2}" if f2.match(/^:(\d+)$/)
116
+ end
117
+ end
105
118
  end
106
119
 
107
120
  if authfile.to_s.length <= 0
@@ -13,7 +13,7 @@ module Knj::Php
13
13
  send_paras << paras[1] if paras[1]
14
14
  paras[0][0].send(*send_paras)
15
15
  else
16
- raise "Unknown user-func."
16
+ raise "Unknown user-func: '#{paras[0].class.name}'."
17
17
  end
18
18
  end
19
19
 
@@ -118,6 +118,42 @@ module Knj::Php
118
118
  elsif cstr == "Knj::Unix_proc"
119
119
  retstr += "#{argument.class.to_s}::data - "
120
120
  retstr += print_r(argument.data, true, count).to_s
121
+ elsif cstr == "Thread"
122
+ retstr += "#{argument.class.to_s} - "
123
+
124
+ hash = {}
125
+ argument.keys.each do |key|
126
+ hash[key] = argument[key]
127
+ end
128
+
129
+ retstr += print_r(hash, true, count).to_s
130
+ elsif cstr == "Class"
131
+ retstr += "#{argument.class.to_s} - "
132
+ hash = {"name" => argument.name}
133
+ retstr += print_r(hash, true, count).to_s
134
+ elsif cstr == "URI::Generic"
135
+ retstr += "#{argument.class.to_s}{\n"
136
+ methods = [:host, :port, :scheme, :path]
137
+ count += 1
138
+ methods.each do |method|
139
+ i_spaces = 0
140
+ while(i_spaces < count - 1)
141
+ retstr += " "
142
+ i_spaces += 1
143
+ end
144
+
145
+ retstr += "#{method}: #{argument.send(method)}\n"
146
+ end
147
+
148
+ count -= 1
149
+
150
+ i = 0
151
+ while(i < count - 1)
152
+ retstr += " "
153
+ i += 1
154
+ end
155
+
156
+ retstr += "}\n"
121
157
  else
122
158
  #print argument.to_s, "\n"
123
159
  retstr += "Unknown class: " + cstr + "\n"
@@ -195,8 +231,7 @@ module Knj::Php
195
231
  end
196
232
 
197
233
  def htmlspecialchars(string)
198
- require "cgi"
199
- return CGI.escapeHTML(string)
234
+ return Knj::Web.html(string)
200
235
  end
201
236
 
202
237
  def isset(var)
@@ -250,16 +285,16 @@ module Knj::Php
250
285
  end
251
286
 
252
287
  begin
253
- _httpsession.eruby.header(key, value) #This is for knjAppServer - knj.
288
+ _kas.header(key, value) #This is for knjAppServer - knj.
254
289
  sent = true
255
290
  rescue NameError => e
256
291
  if $knj_eruby
257
292
  $knj_eruby.header(key, value)
258
293
  sent = true
259
- elsif $cgi.is_a?(CGI)
294
+ elsif $cgi.class.name == "CGI"
260
295
  sent = true
261
296
  $cgi.header(key => value)
262
- elsif $_CGI.is_a?(CGI)
297
+ elsif $_CGI.class.name == "CGI"
263
298
  sent = true
264
299
  $_CGI.header(key => value)
265
300
  end
@@ -273,23 +308,17 @@ module Knj::Php
273
308
  end
274
309
 
275
310
  def urldecode(string)
276
- #require "cgi"
277
- #return CGI.unescape(string)
278
-
279
- #Thanks to CGI framework
280
- str = string.to_s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do
281
- [$1.delete('%')].pack('H*')
282
- end
311
+ return Knj::Web.urldec(string)
283
312
  end
284
313
 
285
314
  def urlencode(string)
286
- #require "cgi"
287
- #return CGI.escape(string.to_s)
288
-
289
- #Thanks to CGI framework
290
- string.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/) do
291
- '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
292
- end.tr(' ', '+')
315
+ return Knj::Web.urlenc(string)
316
+ end
317
+
318
+ def parse_str(str, hash)
319
+ CGI.parse(str).each do |key, val|
320
+ hash[key] = val
321
+ end
293
322
  end
294
323
 
295
324
  def file_put_contents(filepath, content)
@@ -421,8 +450,7 @@ module Knj::Php
421
450
  end
422
451
 
423
452
  def html_entity_decode(string)
424
- require "cgi"
425
- string = CGI.unescapeHTML(string.to_s)
453
+ string = Knj::Web.html(string)
426
454
  string = string.gsub("&oslash;", "ø").gsub("&aelig;", "æ").gsub("&aring;", "å").gsub("&euro;", "€").gsub("#39;", "'")
427
455
  return string
428
456
  end
@@ -527,9 +555,14 @@ module Knj::Php
527
555
  args["expires"] = Time.at(expire) if expire
528
556
  args["domain"] = domain if domain
529
557
 
530
- cookie = CGI::Cookie.new(args)
531
- status = Knj::Php.header("Set-Cookie: #{cookie.to_s}")
532
- $_COOKIE[cname] = cvalue if $_COOKIE
558
+ begin
559
+ _kas.cookie(args)
560
+ rescue NameError
561
+ cookie = CGI::Cookie.new(args)
562
+ status = Knj::Php.header("Set-Cookie: #{cookie.to_s}")
563
+ $_COOKIE[cname] = cvalue if $_COOKIE
564
+ end
565
+
533
566
  return status
534
567
  end
535
568
 
@@ -610,7 +643,7 @@ module Knj::Php
610
643
  month = cur_time.month if month == nil
611
644
  year = cur_time.year if year == nil
612
645
 
613
- new_time = Datestamp.from_dbstr("#{year.to_s}-#{month.to_s}-#{date.to_s} #{hour.to_s}:#{min.to_s}:#{sec.to_s}")
646
+ new_time = Knj::Datet.in("#{year.to_s}-#{month.to_s}-#{date.to_s} #{hour.to_s}:#{min.to_s}:#{sec.to_s}")
614
647
  return new_time.to_i
615
648
  end
616
649
 
@@ -713,5 +746,19 @@ module Knj::Php
713
746
  return plain_str.to_s
714
747
  end
715
748
 
749
+ #Sort methods.
750
+ def ksort(hash)
751
+ nhash = hash.sort do |a, b|
752
+ a[0] <=> b[0]
753
+ end
754
+
755
+ newhash = {}
756
+ nhash.each do |val|
757
+ newhash[val[0]] = val[1][0]
758
+ end
759
+
760
+ return newhash
761
+ end
762
+
716
763
  module_function(*instance_methods)
717
764
  end
@@ -5,7 +5,7 @@ class Knj::Php_parser
5
5
  @args = args
6
6
  @cont = File.read(@args["file"])
7
7
 
8
- if !args.has_key?("require_requirements") or args["require_requirements"]
8
+ if !args.key?("require_requirements") or args["require_requirements"]
9
9
  @retcont = "require \"knj/autoload\"\n"
10
10
  @retcont += "require \"knj/php\"\n"
11
11
  @retcont += "require \"knj/php_parser/php_parser\"\n"
@@ -13,82 +13,6 @@ class Knj::Php_parser
13
13
  else
14
14
  @retcont = ""
15
15
  end
16
-
17
- @regex_funcname = "([A-z][A-z\d_]*)"
18
- @regex_varname = "([A-z][A-z\d]*)"
19
-
20
- @tabs = 0
21
- @funcs_started = 0
22
- end
23
-
24
- def parse
25
- self.search_starttag
26
- return @retcont
27
- end
28
-
29
- def search_starttag
30
- match = self.matchclear(/\A([\s\S]*?<\?(php|))/)
31
- if !match
32
- return nil
33
- end
34
-
35
- self.clear_whitespace
36
- self.search_newstuff
37
- end
38
-
39
- def tabs
40
- cont = ""
41
- 0.upto(@tabs - 1) do |count|
42
- cont += "\t"
43
- end
44
-
45
- return cont
46
- end
47
-
48
- def clear_regex(regex)
49
- @cont = @cont.gsub(regex, "")
50
- end
51
-
52
- def clear_whitespace
53
- @cont = @cont.gsub(/\A\s+/, "")
54
- end
55
-
56
- def matchclear(regex, debug = false)
57
- if match = @cont.match(regex)
58
- print "Before (#{debug}):\n#{@cont}\n\n" if debug
59
- @cont = @cont.gsub(regex, "")
60
- self.clear_whitespace
61
- print "After (#{debug}):\n#{@cont}\n\n\n" if debug
62
-
63
- return match
64
- end
65
-
66
- return false
67
- end
68
-
69
- def search_newstuff
70
- loop do
71
- if match = self.matchclear(/\Afunction\s+#{@regex_funcname}\(/)
72
- self.func_args(match[1])
73
- elsif match = self.matchclear(/\A(print|echo)\s+/)
74
- @retcont += "#{self.tabs}Knj::Php.#{match[1]}("
75
- self.func_args_single_given
76
- elsif match = self.matchclear(/\A\}/)
77
- @tabs -= 1
78
- @retcont += "#{self.tabs}end\n"
79
- @tabs -= 1
80
- @retcont += "#{self.tabs}end\n"
81
- elsif match = self.matchclear(/\A([A-z][A-z\d_]*)\(/)
82
- @retcont += "#{self.tabs}Knj::Php_parser::Functions.#{match[1]}("
83
- self.func_args_given
84
- elsif match = self.matchclear(/\A\?>/)
85
- self.search_starttag
86
- elsif cont.length <= 0
87
- break
88
- else
89
- raise "Could not find out whats next."
90
- end
91
- end
92
16
  end
93
17
  end
94
18
 
@@ -30,12 +30,12 @@ class Knj::Retry
30
30
  end
31
31
  rescue Exception => e
32
32
  if e.class == Interrupt
33
- raise e if !args.has_key?(:interrupt) or args[:interrupt]
33
+ raise e if !args.key?(:interrupt) or args[:interrupt]
34
34
  elsif e.class == SystemExit
35
- raise e if !args.has_key?(:exit) or args[:exit]
36
- elsif count <= 1 or (args.has_key?(:errors) and args[:errors].index(e.class) == nil)
35
+ raise e if !args.key?(:exit) or args[:exit]
36
+ elsif count <= 1 or (args.key?(:errors) and args[:errors].index(e.class) == nil)
37
37
  doraise = e
38
- elsif args.has_key?(:errors) and args[:errors].index(e.class) != nil
38
+ elsif args.key?(:errors) and args[:errors].index(e.class) != nil
39
39
  #given error was in the :errors-array - do nothing. Maybe later it should be logged and returned in a stats-hash or something? - knj
40
40
  end
41
41
 
@@ -1,4 +1,110 @@
1
+ $knjautoload = false
2
+
1
3
  class Knj::Rhodes
4
+ attr_reader :db, :ob, :gettext, :args
5
+
6
+ def initialize(args = {})
7
+ require "Knj/arrayext.rb"
8
+ require "Knj/php.rb"
9
+ require "Knj/objects.rb"
10
+ require "Knj/datarow.rb"
11
+ require "Knj/event_handler.rb"
12
+ require "Knj/hash_methods.rb"
13
+ require "Knj/errors.rb"
14
+ require "Knj/gettext_threadded.rb"
15
+ require "Knj/locales.rb"
16
+ require "Knj/web.rb"
17
+ require "Knj/rhodes/mutex.rb"
18
+ require "Knj/opts.rb"
19
+
20
+ require "Knj/knjdb/libknjdb.rb"
21
+ require "Knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb"
22
+ require "Knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb"
23
+ require "Knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb"
24
+ require "Knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb"
25
+
26
+ @args = args
27
+
28
+ @db = Knj::Db.new(
29
+ :type => "sqlite3",
30
+ :subtype => "rhodes",
31
+ :path => "#{Rho::RhoApplication.get_base_app_path}app/rhodes_default.sqlite3",
32
+ :return_keys => "symbols",
33
+ :require => false
34
+ )
35
+
36
+ if @args[:schema]
37
+ schema = @args[:schema]
38
+ else
39
+ schema = {"tables" => {}}
40
+ end
41
+
42
+ schema["tables"]["Option"] = {
43
+ "columns" => [
44
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
45
+ {"name" => "title", "type" => "varchar"},
46
+ {"name" => "value", "type" => "text"}
47
+ ]
48
+ }
49
+
50
+ require "knjdbrevision/knjdbrevision.rb"
51
+ dbrev = Knjdbrevision.new
52
+ dbrev.init_db(schema, @db)
53
+
54
+ @ob = Knj::Objects.new(
55
+ :db => @db,
56
+ :class_path => "#{Rho::RhoApplication.get_base_app_path}app/Multinasser/include",
57
+ :require => false,
58
+ :module => @args[:module],
59
+ :datarow => true
60
+ )
61
+
62
+ Knj::Opts.init(
63
+ "table" => "Option",
64
+ "knjdb" => @db
65
+ )
66
+
67
+ @gettext = Knj::Gettext_threadded.new
68
+ @gettext.load_dir("#{Rho::RhoApplication.get_base_app_path}app/locales")
69
+ end
70
+
71
+ def inputs(*arr)
72
+ html = ""
73
+
74
+ arr.each do |data|
75
+ value = ""
76
+
77
+ data[:type] = :text if !data.key?(:type)
78
+
79
+ if data.key?(:value) and data[:value].is_a?(Array) and data[:value][0]
80
+ value = data[:value][0][data[:value][1]]
81
+ elsif data.key?(:value)
82
+ value = data[:value]
83
+ end
84
+
85
+ extra_args = ""
86
+ extra_args = " autofocus=\"autofocus\"" if data[:autofocus]
87
+
88
+ css = {}
89
+
90
+ if data[:type] == :textarea
91
+ css["height"] = data[:height] if data.key?(:height)
92
+
93
+ html += "<div data-role=\"fieldcontain\">"
94
+ html += "<label for=\"#{data[:name]}\">#{data[:title]}</label>"
95
+ html += "<textarea name=\"#{data[:name]}\" id=\"#{data[:name]}\"#{Knj::Web.style_html(css)}#{extra_args}>#{value}</textarea>"
96
+ html += "</div>"
97
+ else
98
+ html += "<div data-role=\"fieldcontain\">"
99
+ html += "<label for=\"#{data[:name]}\">#{data[:title]}</label>"
100
+ html += "<input type=\"#{data[:type]}\" name=\"#{data[:name]}\" id=\"#{data[:name]}\" value=\"#{value}\"#{Knj::Web.style_html(css)}#{extra_args} />"
101
+ html += "</div>"
102
+ end
103
+ end
104
+
105
+ return html
106
+ end
107
+
2
108
  def self.html_links(args)
3
109
  html_cont = "#{args[:html]}"
4
110