knjrbfw 0.0.3

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.
Files changed (208) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +32 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/lib/knj/.gitignore +1 -0
  10. data/lib/knj/arrayext.rb +157 -0
  11. data/lib/knj/autoload/activesupport.rb +2 -0
  12. data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
  13. data/lib/knj/autoload/backups/parsedate.rb +53 -0
  14. data/lib/knj/autoload/backups/ping.rb +64 -0
  15. data/lib/knj/autoload/cinch.rb +2 -0
  16. data/lib/knj/autoload/erubis.rb +6 -0
  17. data/lib/knj/autoload/facebooker.rb +3 -0
  18. data/lib/knj/autoload/facets_dictionary.rb +7 -0
  19. data/lib/knj/autoload/gd2.rb +2 -0
  20. data/lib/knj/autoload/gettext.rb +9 -0
  21. data/lib/knj/autoload/gtk2.rb +5 -0
  22. data/lib/knj/autoload/json_autoload.rb +7 -0
  23. data/lib/knj/autoload/magick.rb +6 -0
  24. data/lib/knj/autoload/mysql.rb +6 -0
  25. data/lib/knj/autoload/parsedate.rb +1 -0
  26. data/lib/knj/autoload/ping.rb +64 -0
  27. data/lib/knj/autoload/rexml.rb +12 -0
  28. data/lib/knj/autoload/soap.rb +3 -0
  29. data/lib/knj/autoload/sqlite3.rb +6 -0
  30. data/lib/knj/autoload/tmail.rb +6 -0
  31. data/lib/knj/autoload/twitter.rb +2 -0
  32. data/lib/knj/autoload/xmlsimple.rb +6 -0
  33. data/lib/knj/autoload/zip.rb +6 -0
  34. data/lib/knj/autoload.rb +136 -0
  35. data/lib/knj/compiler.rb +53 -0
  36. data/lib/knj/cpufreq.rb +40 -0
  37. data/lib/knj/datarow.rb +256 -0
  38. data/lib/knj/datestamp.rb +91 -0
  39. data/lib/knj/datet.rb +448 -0
  40. data/lib/knj/degulesider.rb +46 -0
  41. data/lib/knj/erb/apache_knjerb.conf +8 -0
  42. data/lib/knj/erb/cache/README +1 -0
  43. data/lib/knj/erb/erb.rb +21 -0
  44. data/lib/knj/erb/erb_1.9.rb +13 -0
  45. data/lib/knj/erb/erb_cache_clean.rb +20 -0
  46. data/lib/knj/erb/erb_fcgi.rb +44 -0
  47. data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
  48. data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
  49. data/lib/knj/erb/erb_jruby.rb +22 -0
  50. data/lib/knj/erb/include.rb +248 -0
  51. data/lib/knj/errors.rb +19 -0
  52. data/lib/knj/eruby.rb +224 -0
  53. data/lib/knj/event_filemod.rb +53 -0
  54. data/lib/knj/event_handler.rb +69 -0
  55. data/lib/knj/exchangerates.rb +39 -0
  56. data/lib/knj/ext/webrick.rb +31 -0
  57. data/lib/knj/filesystem.rb +8 -0
  58. data/lib/knj/fs/drivers/filesystem.rb +14 -0
  59. data/lib/knj/fs/drivers/ftp.rb +33 -0
  60. data/lib/knj/fs/drivers/ssh.rb +28 -0
  61. data/lib/knj/fs/fs.rb +36 -0
  62. data/lib/knj/gettext_fallback.rb +17 -0
  63. data/lib/knj/gettext_threadded.rb +77 -0
  64. data/lib/knj/google_sitemap.rb +59 -0
  65. data/lib/knj/gtk2.rb +277 -0
  66. data/lib/knj/gtk2_cb.rb +85 -0
  67. data/lib/knj/gtk2_menu.rb +57 -0
  68. data/lib/knj/gtk2_statuswindow.rb +64 -0
  69. data/lib/knj/gtk2_tv.rb +63 -0
  70. data/lib/knj/hash_methods.rb +37 -0
  71. data/lib/knj/http.rb +190 -0
  72. data/lib/knj/includes/appserver_cli.rb +39 -0
  73. data/lib/knj/ip2location.rb +22 -0
  74. data/lib/knj/ironruby-gtk2/button.rb +19 -0
  75. data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
  76. data/lib/knj/ironruby-gtk2/entry.rb +9 -0
  77. data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
  78. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
  79. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
  80. data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
  81. data/lib/knj/ironruby-gtk2/glib.rb +15 -0
  82. data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
  83. data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
  84. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
  85. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
  86. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
  87. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
  88. data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
  89. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
  90. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
  91. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
  92. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
  93. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
  94. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
  95. data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
  96. data/lib/knj/ironruby-gtk2/image.rb +15 -0
  97. data/lib/knj/ironruby-gtk2/label.rb +19 -0
  98. data/lib/knj/ironruby-gtk2/stock.rb +4 -0
  99. data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
  100. data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
  101. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
  102. data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
  103. data/lib/knj/ironruby-gtk2/window.rb +23 -0
  104. data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
  105. data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
  106. data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
  107. data/lib/knj/jruby-gtk2/builder.rb +27 -0
  108. data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
  109. data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
  110. data/lib/knj/jruby-gtk2/combobox.rb +29 -0
  111. data/lib/knj/jruby-gtk2/dialog.rb +44 -0
  112. data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
  113. data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
  114. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  115. data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
  116. data/lib/knj/jruby-gtk2/hbox.rb +10 -0
  117. data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
  118. data/lib/knj/jruby-gtk2/image.rb +10 -0
  119. data/lib/knj/jruby-gtk2/liststore.rb +56 -0
  120. data/lib/knj/jruby-gtk2/menu.rb +40 -0
  121. data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
  122. data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
  123. data/lib/knj/jruby-gtk2/stock.rb +8 -0
  124. data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
  125. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
  126. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
  127. data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
  128. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
  129. data/lib/knj/jruby-gtk2/treeview.rb +105 -0
  130. data/lib/knj/jruby-gtk2/vbox.rb +12 -0
  131. data/lib/knj/jruby-gtk2/window.rb +11 -0
  132. data/lib/knj/jruby_compiler.rb +14 -0
  133. data/lib/knj/knj.rb +19 -0
  134. data/lib/knj/knj_controller.rb +13 -0
  135. data/lib/knj/knjdb/dbtime.rb +30 -0
  136. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
  137. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
  138. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
  139. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
  140. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
  141. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
  142. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
  143. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
  144. data/lib/knj/knjdb/libknjdb.rb +438 -0
  145. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
  146. data/lib/knj/knjdb/libknjdb_row.rb +149 -0
  147. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
  148. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  149. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
  150. data/lib/knj/libqt.rb +75 -0
  151. data/lib/knj/libqt_window.rb +10 -0
  152. data/lib/knj/locale_strings.rb +3 -0
  153. data/lib/knj/locales.rb +54 -0
  154. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
  155. data/lib/knj/mail.rb +75 -0
  156. data/lib/knj/mailobj.rb +82 -0
  157. data/lib/knj/mount.rb +115 -0
  158. data/lib/knj/notify.rb +13 -0
  159. data/lib/knj/nvidia_settings.rb +45 -0
  160. data/lib/knj/objects.rb +731 -0
  161. data/lib/knj/opts.rb +38 -0
  162. data/lib/knj/os.rb +158 -0
  163. data/lib/knj/php.rb +717 -0
  164. data/lib/knj/php_parser/arguments.rb +5 -0
  165. data/lib/knj/php_parser/functions.rb +97 -0
  166. data/lib/knj/php_parser/php_parser.rb +99 -0
  167. data/lib/knj/php_parser/tests/test.rb +12 -0
  168. data/lib/knj/php_parser/tests/test_function.php +8 -0
  169. data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
  170. data/lib/knj/power_manager.rb +31 -0
  171. data/lib/knj/rand.rb +10 -0
  172. data/lib/knj/retry.rb +71 -0
  173. data/lib/knj/rhodes/mutex.rb +11 -0
  174. data/lib/knj/rhodes/rhodes.js +3 -0
  175. data/lib/knj/rhodes/rhodes.rb +11 -0
  176. data/lib/knj/rsvgbin.rb +20 -0
  177. data/lib/knj/scripts/degulesider.rb +12 -0
  178. data/lib/knj/scripts/filesearch.rb +51 -0
  179. data/lib/knj/scripts/ip2location.rb +12 -0
  180. data/lib/knj/scripts/keepalive.rb +6 -0
  181. data/lib/knj/scripts/svn_merge.rb +29 -0
  182. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
  183. data/lib/knj/sms.rb +54 -0
  184. data/lib/knj/sshrobot/sshrobot.rb +93 -0
  185. data/lib/knj/strings.rb +65 -0
  186. data/lib/knj/sysuser.rb +27 -0
  187. data/lib/knj/tests/compiler/compiler_test.rb +13 -0
  188. data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
  189. data/lib/knj/tests/test_degulesider.rb +11 -0
  190. data/lib/knj/tests/test_mount.rb +30 -0
  191. data/lib/knj/tests/test_retry.rb +30 -0
  192. data/lib/knj/thread.rb +32 -0
  193. data/lib/knj/thread2.rb +47 -0
  194. data/lib/knj/threadhandler.rb +130 -0
  195. data/lib/knj/threadpool.rb +177 -0
  196. data/lib/knj/translations.rb +139 -0
  197. data/lib/knj/unix_proc.rb +82 -0
  198. data/lib/knj/web.rb +932 -0
  199. data/lib/knj/webscripts/image.rhtml +82 -0
  200. data/lib/knj/win.rb +4 -0
  201. data/lib/knj/win_registry.rb +60 -0
  202. data/lib/knj/win_tightvnc.rb +127 -0
  203. data/lib/knj/x11vnc.rb +48 -0
  204. data/lib/knj/youtube.rb +38 -0
  205. data/lib/knjrbfw.rb +4 -0
  206. data/spec/knjrbfw_spec.rb +269 -0
  207. data/spec/spec_helper.rb +12 -0
  208. metadata +336 -0
@@ -0,0 +1,82 @@
1
+ <%
2
+ idstr = Knj::Php.md5("#{_get["path"]}_#{_get["smartsize"].to_i}_#{_get["width"].to_i}_#{_get["height"].to_i}_#{_get["maxwidth"].to_i}_#{_get["maxheight"].to_i}")
3
+
4
+ tmp_use = false
5
+ tmp_write = false
6
+ if $knj_webscripts_image_config
7
+ tmp_use = true
8
+ tmp_path = "#{$knj_webscripts_image_config["tmp_path"]}/#{idstr}"
9
+ tmp_exists = File.exists?(tmp_path)
10
+ tmp_write = true if !tmp_exists
11
+
12
+ if !tmp_write and tmp_exists
13
+ time_orig = File.mtime(_get["path"])
14
+ time_cache = File.mtime(tmp_path)
15
+
16
+ if time_orig > time_cache
17
+ tmp_write = true
18
+ end
19
+ end
20
+ end
21
+
22
+ if !tmp_use or tmp_write or _get["force"].to_i > 0
23
+ pic = Magick::ImageList.new(_get["path"])
24
+ width = pic.columns
25
+ height = pic.rows
26
+
27
+ height = _get["height"].to_i if _get["height"]
28
+ width = _get["width"].to_i if _get["width"]
29
+
30
+ if _get["smartsize"]
31
+ if pic.columns > pic.rows
32
+ width = _get["smartsize"].to_i
33
+ height = (pic.rows.to_f / (pic.columns.to_f / width.to_f)).to_i
34
+ else
35
+ height = _get["smartsize"].to_i
36
+ width = (pic.columns.to_f / (pic.rows.to_f / height.to_f)).to_i
37
+ end
38
+ end
39
+
40
+ if _get["maxwidth"]
41
+ maxwidth = _get["maxwidth"].to_i
42
+
43
+ if width > maxwidth
44
+ height = (pic.rows.to_f / (pic.columns.to_f / maxwidth.to_f)).to_i
45
+ width = maxwidth
46
+ end
47
+ end
48
+
49
+ if _get["maxheight"]
50
+ maxheight = _get["maxheight"].to_i
51
+
52
+ if height > maxheight
53
+ width = (pic.columns.to_f / (pic.rows.to_f / maxheight.to_f)).to_i
54
+ height = maxheight
55
+ end
56
+ end
57
+
58
+ if _get["width"] and _get["height"]
59
+ width = _get["width"].to_i
60
+ height = _get["height"].to_i
61
+ end
62
+
63
+ if height != pic.rows or width != pic.columns
64
+ pic = pic.resize_to_fit(width.to_i, height.to_i)
65
+ end
66
+
67
+ pic.format = "png"
68
+ blob_cont = pic.to_blob
69
+ end
70
+
71
+ if tmp_write and blob_cont
72
+ Knj::Php.file_put_contents(tmp_path, blob_cont)
73
+ end
74
+
75
+ if tmp_use
76
+ Knj::Php.header("Content-Type: image/png")
77
+ print File.read(tmp_path)
78
+ else
79
+ Knj::Php.header("Content-Type: image/png")
80
+ print blob_cont
81
+ end
82
+ %>
data/lib/knj/win.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Knj::Win
2
+ autoload :Registry, $knjpath + "win_registry"
3
+ autoload :TightVNC, $knjpath + "win_tightvnc"
4
+ end
@@ -0,0 +1,60 @@
1
+ class Knj::Win::Registry
2
+ def self.const(type)
3
+ if type == :cur_user
4
+ return Win32::Registry::HKEY_CURRENT_USER
5
+ elsif type == :local_machine
6
+ return Win32::Registry::HKEY_LOCAL_MACHINE
7
+ else
8
+ raise "Unknown type: " + type.to_s
9
+ end
10
+ end
11
+
12
+ def self.type(in_type)
13
+ return Win32::Registry::REG_SZ if in_type == :sz
14
+ return Win32::Registry::REG_DWORD if in_type == :dword
15
+ return Win32::Registry::REG_BINARY if in_type == :bin
16
+ return nil if in_type == nil
17
+
18
+ raise "Unknown type: #{in_type}"
19
+ end
20
+
21
+ def self.get(type, regpath, key, in_type = nil)
22
+ hkey = self.const(type)
23
+ hkey.open(regpath, Win32::Registry::KEY_ALL_ACCESS) do |reg|
24
+ return reg[key, self.type(in_type)].to_s
25
+
26
+ #reg.each_key do |k, v|
27
+ # puts k, v
28
+ #end
29
+ #reg.each_value do |k, v|
30
+ # puts k, v
31
+ #end
32
+
33
+ #reg_typ, reg_val = reg.read('')
34
+ #return {
35
+ # :type => reg_typ,
36
+ # :value => reg_val
37
+ #}
38
+ end
39
+ end
40
+
41
+ def self.set(type, regpath, key, content = nil, in_type = nil)
42
+ if key.is_a?(Array)
43
+ key.each do |v|
44
+ if v.is_a?(Array)
45
+ self.set(type, regpath, v[0], v[1], v[2])
46
+ elsif v.is_a?(Hash)
47
+ self.set(type, regpath, k, v[:val], v[:type])
48
+ else
49
+ raise "Unknown type: #{v.class.to_s}"
50
+ end
51
+ end
52
+ else
53
+ hkey = self.const(type)
54
+ hkey.create(regpath)
55
+ hkey.open(regpath, Win32::Registry::KEY_ALL_ACCESS) do |reg|
56
+ reg[key.to_s, self.type(in_type)] = content.to_s
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,127 @@
1
+ class Knj::Win::TightVNC
2
+ def initialize(args)
3
+ @args = ArrayExt.hash_sym(args)
4
+
5
+ @args[:port] = 5900 if !@args[:port]
6
+ @args[:port_http] = 5800 if !@args[:http_port]
7
+
8
+ raise "No path given." if !@args[:path]
9
+
10
+ exefile = @args[:path] + "/WinVNC.exe"
11
+ raise "#{exefile} was not found." if !File.exists?(exefile)
12
+
13
+ @wmi = WIN32OLE.connect("winmgmts://")
14
+ processes = @wmi.ExecQuery("SELECT * FROM win32_process")
15
+ ended = false
16
+ for process in processes do
17
+ if process.Name == "WinVNC.exe"
18
+ process.Terminate
19
+ ended = true
20
+ end
21
+ end
22
+
23
+ sleep 1 if ended
24
+
25
+ #print Win::Registry.get(:cur_user, 'Software\ORL\WinVNC3', 'Password', :sz).unpack('H*')[0] + "\n"
26
+ #print ["160e9d46f26586ca"].pack('H*').unpack('H*')[0] + "\n"
27
+ #exit
28
+
29
+ Win::Registry.set(:cur_user, 'Software\ORL\WinVNC3', [
30
+ ["AutoPortSelect", 1, :dword],
31
+ ["BlankScreen", 0, :dword],
32
+ ["DontSetHooks", 0, :dword],
33
+ ["DontUseDriver", 0, :dword],
34
+ ["DriverDirectAccess", 1, :dword],
35
+ ["EnableFileTransfers", 1, :dword],
36
+ ["HTTPPortNumber", @args[:port_http], :dword],
37
+ ["IdleTimeout", 0, :dword],
38
+ ["InputsEnabled", 1, :dword],
39
+ ["LocalInputsDisabled", 0, :dword],
40
+ ["LocalInputsPriority", 0, :dword],
41
+ ["LocalInputsPriorityTime", 3, :dword],
42
+ ["LockSetting", 0, :dword],
43
+ ["OnlyPollConsole", 1, :dword],
44
+ ["OnlyPollOnEvent", 0, :dword],
45
+ ["PollForeground", 1, :dword],
46
+ ["PollFullScreen", 0, :dword],
47
+ ["PollingCycle", 300, :dword],
48
+ ["PollUnderCursor", 0, :dword],
49
+ ["PollUnderCursor", @args[:port], :dword],
50
+ ["QueryAccept", 0, :dword],
51
+ ["QueryAllowNoPass", 0, :dword],
52
+ ["QuerySetting", 2, :dword],
53
+ ["QueryTimeout", 30, :dword],
54
+ ["RemoveWallpaper", 0, :dword],
55
+ ["SocketConnect", 1, :dword],
56
+ ["Password", ["160e9d46f26586ca"].pack('H*'), :bin],
57
+ ["PasswordViewOnly", ["160e9d46f26586ca"].pack('H*'), :bin]
58
+ ])
59
+ Win::Registry.set(:local_machine, 'Software\ORL\WinVNC3', [
60
+ ["AllowLoopback", 1, :dword],
61
+ ["LoopbackOnly", 0, :dword]
62
+ ])
63
+ #password is of this moment only 'kaspernj'.
64
+
65
+ @wmi = WIN32OLE.connect("winmgmts://")
66
+ processes = @wmi.ExecQuery("SELECT * FROM win32_process")
67
+ ended = false
68
+ for process in processes do
69
+ if process.Name == "WinVNC.exe"
70
+ process.Terminate
71
+ ended = true
72
+ end
73
+ end
74
+
75
+ sleep 1 if ended
76
+
77
+ Knj::Thread.new do
78
+ IO.popen(exefile) do |process|
79
+ #nothing
80
+ end
81
+ end
82
+
83
+ sleep 1
84
+
85
+ @processes = @wmi.ExecQuery("SELECT * FROM win32_process")
86
+ for process in @processes do
87
+ if process.Name == "WinVNC.exe"
88
+ @process = process
89
+ break
90
+ end
91
+ end
92
+
93
+ raise "Could not start WinVNC.exe." if !@process
94
+
95
+ Kernel.at_exit do
96
+ self.close
97
+ end
98
+ end
99
+
100
+ def open?
101
+ begin
102
+ @process.GetOwner
103
+ return true
104
+ rescue Exception => e
105
+ return false
106
+ end
107
+ end
108
+
109
+ def close
110
+ return nil if !@process
111
+
112
+ begin
113
+ @process.Terminate
114
+ rescue Exception => e
115
+ if e.class.to_s == "WIN32OLERuntimeError" and e.message.index("Terminate") != nil
116
+ #do nothing.
117
+ else
118
+ raise e
119
+ end
120
+ end
121
+
122
+ @process = nil
123
+ @args = nil
124
+ @wmi = nil
125
+ @processes = nil
126
+ end
127
+ end
data/lib/knj/x11vnc.rb ADDED
@@ -0,0 +1,48 @@
1
+ class Knj::X11VNC
2
+ def initialize(args = {})
3
+ @args = ArrayExt.hash_sym(args)
4
+ @open = true
5
+
6
+ cmd = "x11vnc -q"
7
+ cmd += " -shared" if @args[:shared] or !@args.has_key?(:shared)
8
+ cmd += " -forever" if @args[:forever] or !@args.has_key?(:forever)
9
+ cmd += " -rfbport #{@args[:port]}" if @args[:port]
10
+ cmd += " -nolookup" if @args[:nolookup] or !@args.has_key?(:nolookup)
11
+
12
+ print cmd + "\n"
13
+
14
+ @thread = Knj::Thread.new do
15
+ IO.popen(cmd) do |process|
16
+ @pid = process.pid
17
+ process.sync
18
+
19
+ while read = process.read
20
+ break if read.length == 0
21
+ #print read
22
+ end
23
+
24
+ @open = false
25
+ @pid = nil
26
+ @thread = nil
27
+ end
28
+ end
29
+
30
+ Kernel.at_exit do
31
+ self.close
32
+ end
33
+ end
34
+
35
+ def open?
36
+ return @open
37
+ end
38
+
39
+ def close
40
+ return nil if !@thread
41
+
42
+ Process.kill("HUP", @pid) if @pid
43
+ @thread.exit if @thread
44
+ @thread = nil
45
+ @open = false
46
+ @pid = nil
47
+ end
48
+ end
@@ -0,0 +1,38 @@
1
+ class Knj::YouTube
2
+ def self.all_videos(data, params = {}, opts = {})
3
+ params[:per_page] = 50
4
+
5
+ ret_arr = []
6
+ go_through_pages = true
7
+ page = 1
8
+ while go_through_pages
9
+ print "Getting page #{page.to_s}\n"
10
+
11
+ newparams = Marshal.load(Marshal.dump(params))
12
+ newparams[:page] = page
13
+ videos = data["youtube"].videos_by(newparams)
14
+
15
+ videos.videos.each do |video|
16
+ if data["check_stop"] and data["check_stop"].respond_to?("check_stop_parsing")
17
+ if data["check_stop"].check_stop_parsing(video)
18
+ go_through_pages = false
19
+ break
20
+ end
21
+ end
22
+
23
+ ret_arr << video
24
+ end
25
+
26
+ status = videos.next_page
27
+ break if !status
28
+
29
+ page += 1
30
+
31
+ if data["pages"] and page > data["pages"].to_i
32
+ break
33
+ end
34
+ end
35
+
36
+ return ret_arr
37
+ end
38
+ end
data/lib/knjrbfw.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Knj
2
+ end
3
+
4
+ $: << File.dirname(__FILE__)
@@ -0,0 +1,269 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Knjrbfw" do
4
+ it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
5
+ require "knjrbfw"
6
+ require "knj/autoload"
7
+ require "tmpdir"
8
+
9
+ db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
10
+
11
+ begin
12
+ db = Knj::Db.new(
13
+ :type => "sqlite3",
14
+ :path => db_path,
15
+ :return_keys => "symbols",
16
+ :index_append_table_name => true
17
+ )
18
+
19
+ db.tables.create("Project", {
20
+ "columns" => [
21
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
22
+ {"name" => "category_id", "type" => "int"},
23
+ {"name" => "name", "type" => "varchar"}
24
+ ],
25
+ "indexes" => [
26
+ {"name" => "category_id", "columns" => ["category_id"]}
27
+ ]
28
+ })
29
+
30
+ db.tables.create("Task", {
31
+ "columns" => [
32
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
33
+ {"name" => "project_id", "type" => "int"},
34
+ {"name" => "user_id", "type" => "int"},
35
+ {"name" => "name", "type" => "varchar"}
36
+ ],
37
+ "indexes" => [
38
+ {"name" => "project_id", "columns" => ["project_id"]}
39
+ ]
40
+ })
41
+
42
+ db.tables.create("User", {
43
+ "columns" => [
44
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
45
+ {"name" => "name", "type" => "varchar"}
46
+ ]
47
+ })
48
+
49
+ table = db.tables["Project"]
50
+
51
+ indexes = table.indexes
52
+ raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["category_id"]
53
+
54
+
55
+ #If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
56
+ db.insert("Project", {
57
+ "name" => "Test project"
58
+ })
59
+
60
+ db.q("SELECT * FROM Project") do |d|
61
+ raise "Somehow name was not 'Test project'" if d[:name] != "Test project"
62
+ raise "ID was not set?" if d[:id].to_i <= 0
63
+ end
64
+
65
+ $db = db
66
+ rescue => e
67
+ File.unlink(db_path) if File.exists?(db_path)
68
+ raise e
69
+ end
70
+ end
71
+
72
+ it "should be able to parse various date formats." do
73
+ date = Knj::Datet.in("2011-07-09 00:00:00 UTC")
74
+ date = Knj::Datet.in("1985-06-17 01:00:00")
75
+ date = Knj::Datet.in("1985-06-17")
76
+ date = Knj::Datet.in("17/06 1985")
77
+
78
+ raise "Couldnt register type 1 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00")
79
+ raise "Couldnt register type 2 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00 00:00:00")
80
+ raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17")
81
+ raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17 10:30:00")
82
+
83
+ date = Knj::Datet.in("2011-07-09 13:05:04 +0200")
84
+ if date.time.localtime.to_s != "2011-07-09 15:05:04 +0200"
85
+ raise "Datet didnt return expected result: '#{date.time.localtime}'."
86
+ end
87
+ end
88
+
89
+ it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
90
+ class Project < Knj::Datarow
91
+ has_many [
92
+ {:class => :Task, :col => :project_id, :depends => true}
93
+ ]
94
+ end
95
+
96
+ class Task < Knj::Datarow
97
+ has_one [
98
+ {:class => :User, :required => true},
99
+ :Project
100
+ ]
101
+
102
+ def self.list(d)
103
+ sql = "SELECT * FROM Task WHERE 1=1"
104
+
105
+ ret = list_helper(d)
106
+ d.args.each do |key, val|
107
+ raise sprintf("Invalid key: %s.", key)
108
+ end
109
+
110
+ sql += ret[:sql_where]
111
+ sql += ret[:sql_order]
112
+ sql += ret[:sql_limit]
113
+
114
+ return d.ob.list_bysql(:Task, sql)
115
+ end
116
+ end
117
+
118
+ class User < Knj::Datarow
119
+ has_one [:Project]
120
+
121
+ def html
122
+ return self[:name]
123
+ end
124
+ end
125
+
126
+ $ob = Knj::Objects.new(:db => $db, :datarow => true, :require => false)
127
+
128
+ $ob.add(:User, {
129
+ :name => "Kasper"
130
+ })
131
+ $ob.add(:Task, {
132
+ :name => "Test task",
133
+ :user_id => 1,
134
+ :project_id => 1
135
+ })
136
+
137
+ project = $ob.get(:Project, 1)
138
+
139
+ tasks = project.tasks
140
+ raise "No tasks were found on project?" if tasks.empty?
141
+
142
+ user = tasks[0].user
143
+ project_second = tasks[0].project
144
+
145
+ raise "Returned object was not a user on task." if !user.is_a?(User)
146
+ raise "Returned object was not a project on task." if !project_second.is_a?(Project)
147
+
148
+
149
+ #Check that has_many-depending is actually working.
150
+ begin
151
+ $ob.delete(project)
152
+ raise "It was possible to delete project 1 even though task 1 depended on it!"
153
+ rescue
154
+ #this should happen - it should not possible to delete project 1 because task 1 depends on it."
155
+ end
156
+ end
157
+
158
+ it "should be able to connect to objects 'no-html' callback and test it." do
159
+ task = $ob.get(:Task, 1)
160
+ $ob.events.connect(:no_html) do |event, classname|
161
+ "[no #{classname.to_s.downcase}]"
162
+ end
163
+
164
+ raise "Unexpected user_html from task (should have been 'Kasper')." if task.user_html != "Kasper"
165
+ task.update(:user_id => 0)
166
+ raise "Unexpected user_html from task (should have been '[no user]')." if task.user_html != "[no user]"
167
+ end
168
+
169
+ it "should delete the temp database again." do
170
+ db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
171
+ File.unlink(db_path) if File.exists?(db_path)
172
+ end
173
+
174
+ it "should be able to execute various Knj::Php functions correctly." do
175
+ str = "Kasper Johansen"
176
+
177
+ #substr
178
+ teststr = Knj::Php.substr(str, 7, 8)
179
+ if teststr != "Johansen"
180
+ raise "substr did not return expected result: '#{teststr}'"
181
+ end
182
+
183
+ teststr = Knj::Php.substr(str, -8, 8)
184
+ if teststr != "Johansen"
185
+ raise "substr did not returned expected result when using negative positions: '#{teststr}'."
186
+ end
187
+
188
+ #strtoupper
189
+ teststr = Knj::Php.strtoupper(str)
190
+ if teststr != "KASPER JOHANSEN"
191
+ raise "strtoupper did not return expected result: '#{teststr}'."
192
+ end
193
+
194
+ #strtolower
195
+ teststr = Knj::Php.strtolower(str)
196
+ if teststr != "kasper johansen"
197
+ raise "strtolower did not return expected result: '#{teststr}'."
198
+ end
199
+ end
200
+
201
+ it "should be able to join arrays with callbacks." do
202
+ res = Knj::ArrayExt.join(:arr => [1, 2, 3], :sep => ",", :callback => proc{|value| "'#{value}'"})
203
+ raise "Unexpected result from ArrayExt." if res != "'1','2','3'"
204
+ end
205
+
206
+ it "should be able to generate valid SQL based on arrays." do
207
+ ret = $ob.sqlhelper({
208
+ "test_col" => [1, 2, 3]
209
+ },{
210
+ :cols_str => ["test_col"]
211
+ })
212
+
213
+ raise "Unexpected SQL for generating based on array: '#{ret[:sql_where]}'" if ret[:sql_where] != " AND `test_col` IN ('1','2','3')"
214
+ end
215
+
216
+ it "should be able to execute various forms of Web.input methods." do
217
+ html = Knj::Web.inputs([{
218
+ :title => "Test 1",
219
+ :name => :textest1,
220
+ :type => :text,
221
+ :default => "hmm",
222
+ :value => "trala"
223
+ },{
224
+ :title => "Test 2",
225
+ :name => :chetest2,
226
+ :type => :checkbox,
227
+ :default => true
228
+ },{
229
+ :title => "Test 3",
230
+ :name => :seltest3,
231
+ :type => :select,
232
+ :default => 1,
233
+ :opts => $ob.list_optshash(:Task)
234
+ },{
235
+ :title => "Test 4",
236
+ :name => :textest4,
237
+ :type => :textarea,
238
+ :height => 300,
239
+ :default => "Hmm",
240
+ :value => "Trala"
241
+ },{
242
+ :title => "Test 5",
243
+ :name => :filetest5,
244
+ :type => :file
245
+ },{
246
+ :title => "Test 6",
247
+ :type => :info,
248
+ :value => "Argh"
249
+ }])
250
+ end
251
+
252
+ it "should be able to use alert and back." do
253
+ Knj::Web.alert("Trala")
254
+
255
+ begin
256
+ Knj::Web.back
257
+ raise "It should have called exit which it didnt."
258
+ rescue SystemExit
259
+ #ignore.
260
+ end
261
+
262
+ begin
263
+ Knj::Web.redirect("?show=test")
264
+ raise "It should have called exit which it didnt."
265
+ rescue SystemExit
266
+ #ignore.
267
+ end
268
+ end
269
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'knjrbfw'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end