knjrbfw 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +29 -8
  3. data/lib/knj/arrayext.rb +206 -153
  4. data/lib/knj/autoload/backups/ping.rb +2 -2
  5. data/lib/knj/autoload/erubis.rb +3 -3
  6. data/lib/knj/autoload/facets_dictionary.rb +2 -2
  7. data/lib/knj/autoload/gettext.rb +3 -3
  8. data/lib/knj/autoload/gtk2.rb +1 -1
  9. data/lib/knj/autoload/json.rb +14 -0
  10. data/lib/knj/autoload/magick.rb +3 -3
  11. data/lib/knj/autoload/mysql.rb +3 -3
  12. data/lib/knj/autoload/parsedate.rb +1 -1
  13. data/lib/knj/autoload/ping.rb +2 -2
  14. data/lib/knj/autoload/rexml.rb +5 -5
  15. data/lib/knj/autoload/soap.rb +1 -1
  16. data/lib/knj/autoload/sqlite3.rb +3 -3
  17. data/lib/knj/autoload/tmail.rb +3 -3
  18. data/lib/knj/autoload/xmlsimple.rb +3 -3
  19. data/lib/knj/autoload/zip.rb +3 -3
  20. data/lib/knj/autoload.rb +87 -81
  21. data/lib/knj/cmd_gen.rb +19 -19
  22. data/lib/knj/cmd_parser.rb +59 -0
  23. data/lib/knj/compiler.rb +34 -34
  24. data/lib/knj/cpufreq.rb +37 -37
  25. data/lib/knj/csv.rb +20 -0
  26. data/lib/knj/datarow.rb +406 -239
  27. data/lib/knj/datarow_custom.rb +124 -0
  28. data/lib/knj/datestamp.rb +89 -89
  29. data/lib/knj/datet.rb +550 -454
  30. data/lib/knj/db.rb +1 -0
  31. data/lib/knj/degulesider.rb +42 -44
  32. data/lib/knj/erb/erb.rb +5 -5
  33. data/lib/knj/erb/erb_cache_clean.rb +10 -10
  34. data/lib/knj/erb/erb_fcgi.rb +32 -32
  35. data/lib/knj/erb/erb_fcgi_1.9.rb +32 -32
  36. data/lib/knj/erb/erb_fcgi_jruby.rb +2 -2
  37. data/lib/knj/erb/erb_jruby.rb +5 -5
  38. data/lib/knj/erb/include.rb +243 -243
  39. data/lib/knj/errors.rb +19 -18
  40. data/lib/knj/eruby.rb +12 -10
  41. data/lib/knj/event_filemod.rb +31 -31
  42. data/lib/knj/event_handler.rb +73 -67
  43. data/lib/knj/exchangerates.rb +37 -37
  44. data/lib/knj/facebook_connect.rb +95 -18
  45. data/lib/knj/filesystem.rb +6 -6
  46. data/lib/knj/fs/drivers/filesystem.rb +12 -12
  47. data/lib/knj/fs/drivers/ftp.rb +31 -31
  48. data/lib/knj/fs/drivers/ssh.rb +26 -26
  49. data/lib/knj/fs/fs.rb +31 -31
  50. data/lib/knj/gettext_fallback.rb +15 -15
  51. data/lib/knj/gettext_threadded.rb +75 -75
  52. data/lib/knj/google_sitemap.rb +53 -53
  53. data/lib/knj/gtk2.rb +272 -272
  54. data/lib/knj/gtk2_cb.rb +80 -80
  55. data/lib/knj/gtk2_menu.rb +55 -55
  56. data/lib/knj/gtk2_statuswindow.rb +62 -62
  57. data/lib/knj/gtk2_tv.rb +58 -58
  58. data/lib/knj/hash_methods.rb +27 -36
  59. data/lib/knj/http.rb +189 -167
  60. data/lib/knj/http2.rb +259 -53
  61. data/lib/knj/image.rb +2 -2
  62. data/lib/knj/includes/appserver_cli.rb +18 -18
  63. data/lib/knj/includes/require_info.rb +15 -0
  64. data/lib/knj/ip2location.rb +20 -20
  65. data/lib/knj/ironruby-gtk2/button.rb +14 -14
  66. data/lib/knj/ironruby-gtk2/dialog.rb +42 -42
  67. data/lib/knj/ironruby-gtk2/entry.rb +4 -4
  68. data/lib/knj/ironruby-gtk2/gdk_event.rb +1 -1
  69. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +11 -11
  70. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +9 -9
  71. data/lib/knj/ironruby-gtk2/gladexml.rb +102 -102
  72. data/lib/knj/ironruby-gtk2/glib.rb +13 -13
  73. data/lib/knj/ironruby-gtk2/gtk2.rb +121 -121
  74. data/lib/knj/ironruby-gtk2/gtk_builder.rb +29 -29
  75. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +3 -3
  76. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +17 -17
  77. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +3 -3
  78. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +16 -16
  79. data/lib/knj/ironruby-gtk2/gtk_menu.rb +3 -3
  80. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +2 -2
  81. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +3 -3
  82. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +22 -22
  83. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +11 -11
  84. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +17 -17
  85. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +30 -30
  86. data/lib/knj/ironruby-gtk2/iconsize.rb +1 -1
  87. data/lib/knj/ironruby-gtk2/image.rb +13 -13
  88. data/lib/knj/ironruby-gtk2/label.rb +17 -17
  89. data/lib/knj/ironruby-gtk2/stock.rb +2 -2
  90. data/lib/knj/ironruby-gtk2/tests/test_2.rb +14 -14
  91. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +37 -37
  92. data/lib/knj/ironruby-gtk2/vbox.rb +3 -3
  93. data/lib/knj/ironruby-gtk2/window.rb +18 -18
  94. data/lib/knj/jruby-gtk2/builder/test_builder.rb +11 -11
  95. data/lib/knj/jruby-gtk2/builder.rb +25 -25
  96. data/lib/knj/jruby-gtk2/cellrenderertext.rb +10 -10
  97. data/lib/knj/jruby-gtk2/checkbutton.rb +1 -1
  98. data/lib/knj/jruby-gtk2/combobox.rb +27 -27
  99. data/lib/knj/jruby-gtk2/dialog.rb +40 -40
  100. data/lib/knj/jruby-gtk2/eventbutton.rb +19 -19
  101. data/lib/knj/jruby-gtk2/gladexml.rb +97 -97
  102. data/lib/knj/jruby-gtk2/gtk2.rb +203 -203
  103. data/lib/knj/jruby-gtk2/hbox.rb +8 -8
  104. data/lib/knj/jruby-gtk2/iconsize.rb +3 -3
  105. data/lib/knj/jruby-gtk2/image.rb +8 -8
  106. data/lib/knj/jruby-gtk2/liststore.rb +54 -54
  107. data/lib/knj/jruby-gtk2/menu.rb +35 -35
  108. data/lib/knj/jruby-gtk2/progressbar.rb +10 -10
  109. data/lib/knj/jruby-gtk2/statusicon.rb +3 -3
  110. data/lib/knj/jruby-gtk2/stock.rb +6 -6
  111. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +36 -36
  112. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +3 -3
  113. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +2 -2
  114. data/lib/knj/jruby-gtk2/treeview.rb +88 -88
  115. data/lib/knj/jruby-gtk2/vbox.rb +10 -10
  116. data/lib/knj/jruby-gtk2/window.rb +7 -7
  117. data/lib/knj/jruby_compiler.rb +12 -12
  118. data/lib/knj/knj.rb +12 -11
  119. data/lib/knj/knj_controller.rb +13 -8
  120. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +499 -316
  121. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +127 -125
  122. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +43 -25
  123. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +316 -241
  124. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +12 -0
  125. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +146 -146
  126. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +24 -24
  127. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +283 -283
  128. data/lib/knj/knjdb/libknjdb.rb +96 -52
  129. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +78 -78
  130. data/lib/knj/knjdb/libknjdb_row.rb +147 -147
  131. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +61 -61
  132. data/lib/knj/knjdb/revision.rb +262 -0
  133. data/lib/knj/libqt.rb +69 -69
  134. data/lib/knj/libqt_window.rb +8 -8
  135. data/lib/knj/locales.rb +62 -52
  136. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +54 -54
  137. data/lib/knj/mail.rb +73 -73
  138. data/lib/knj/mailobj.rb +82 -80
  139. data/lib/knj/mount.rb +113 -113
  140. data/lib/knj/notify.rb +11 -11
  141. data/lib/knj/nvidia_settings.rb +43 -43
  142. data/lib/knj/objects/objects_sqlhelper.rb +474 -0
  143. data/lib/knj/objects.rb +569 -793
  144. data/lib/knj/opts.rb +38 -38
  145. data/lib/knj/os.rb +176 -158
  146. data/lib/knj/php.rb +853 -683
  147. data/lib/knj/php_parser/arguments.rb +3 -3
  148. data/lib/knj/php_parser/functions.rb +95 -95
  149. data/lib/knj/php_parser/php_parser.rb +16 -16
  150. data/lib/knj/php_parser/tests/test.rb +6 -6
  151. data/lib/knj/php_parser/tests/test_function_run.rb +6 -6
  152. data/lib/knj/power_manager.rb +29 -29
  153. data/lib/knj/process.rb +457 -0
  154. data/lib/knj/process_meta.rb +400 -0
  155. data/lib/knj/rand.rb +8 -8
  156. data/lib/knj/retry.rb +69 -69
  157. data/lib/knj/rhodes/delegate.rb +414 -0
  158. data/lib/knj/rhodes/rhodes.rb +114 -40
  159. data/lib/knj/rhodes/weakref.rb +80 -0
  160. data/lib/knj/rsvgbin.rb +18 -18
  161. data/lib/knj/scripts/degulesider.rb +2 -2
  162. data/lib/knj/scripts/filesearch.rb +35 -35
  163. data/lib/knj/scripts/ip2location.rb +2 -2
  164. data/lib/knj/scripts/keepalive.rb +2 -2
  165. data/lib/knj/scripts/php_to_rb_helper.rb +376 -0
  166. data/lib/knj/scripts/process_meta_exec.rb +104 -0
  167. data/lib/knj/scripts/svn_merge.rb +21 -21
  168. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +26 -26
  169. data/lib/knj/sms.rb +52 -52
  170. data/lib/knj/sshrobot/sshrobot.rb +90 -88
  171. data/lib/knj/sshrobot.rb +1 -0
  172. data/lib/knj/strings.rb +186 -74
  173. data/lib/knj/sysuser.rb +25 -25
  174. data/lib/knj/table_writer.rb +97 -0
  175. data/lib/knj/tests/compiler/compiler_test.rb +2 -2
  176. data/lib/knj/tests/test_degulesider.rb +1 -1
  177. data/lib/knj/tests/test_http2_proxy.rb +26 -0
  178. data/lib/knj/tests/test_mount.rb +9 -9
  179. data/lib/knj/tests/test_retry.rb +17 -17
  180. data/lib/knj/thread.rb +23 -24
  181. data/lib/knj/thread2.rb +45 -45
  182. data/lib/knj/threadhandler.rb +135 -102
  183. data/lib/knj/threadpool.rb +195 -145
  184. data/lib/knj/translations.rb +128 -119
  185. data/lib/knj/unix_proc.rb +80 -80
  186. data/lib/knj/web.rb +947 -881
  187. data/lib/knj/webscripts/image.rhtml +142 -67
  188. data/lib/knj/win.rb +2 -2
  189. data/lib/knj/win_registry.rb +58 -58
  190. data/lib/knj/win_tightvnc.rb +125 -125
  191. data/lib/knj/wref.rb +104 -0
  192. data/lib/knj/x11vnc.rb +46 -46
  193. data/lib/knj/youtube.rb +33 -36
  194. data/lib/knjrbfw.rb +1 -0
  195. data/spec/cmd_parser_spec.rb +25 -0
  196. data/spec/db_spec.rb +40 -0
  197. data/spec/db_spec_encoding_test_file.txt +1 -0
  198. data/spec/http2_spec.rb +37 -0
  199. data/spec/knjrbfw_spec.rb +17 -15
  200. data/spec/php_spec.rb +69 -0
  201. data/spec/process_meta_spec.rb +150 -0
  202. data/spec/process_spec.rb +107 -0
  203. data/spec/strings_spec.rb +21 -0
  204. data/spec/web_spec.rb +16 -0
  205. metadata +42 -21
  206. data/lib/knj/autoload/json_autoload.rb +0 -7
  207. data/lib/knj/autoload/twitter.rb +0 -2
  208. data/lib/knj/ext/webrick.rb +0 -31
  209. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  210. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  211. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
data/lib/knj/wref.rb ADDED
@@ -0,0 +1,104 @@
1
+ require "weakref"
2
+
3
+ #A weak-reference that wont bite you in the ass like the one in Ruby 1.9.
4
+ class Knj::Wref
5
+ def initialize(obj)
6
+ @weakref = WeakRef.new(obj)
7
+ @class = obj.class.name
8
+ @id = @class.__id__
9
+ end
10
+
11
+ #Returns the object that this weak reference holds or throws WeakRef::RefError.
12
+ def get
13
+ obj = @weakref.__getobj__ if @weakref
14
+
15
+ if !@weakref or @class != obj.class.name or @id != obj.__id__
16
+ self.destroy
17
+ raise WeakRef::RefError
18
+ end
19
+
20
+ return obj
21
+ end
22
+
23
+ #Returns true if the reference is still alive.
24
+ def alive?
25
+ begin
26
+ self.get
27
+ return true
28
+ rescue WeakRef::RefError
29
+ return false
30
+ end
31
+ end
32
+
33
+ #Removes all data from this object.
34
+ def destroy
35
+ @class = nil
36
+ @id = nil
37
+ @weakref = nil
38
+ end
39
+
40
+ #Make Wref compatible with the normal WeakRef.
41
+ alias weakref_alive? alive?
42
+ alias __getobj__ get
43
+ end
44
+
45
+ class Knj::Wref_map
46
+ def initialize(args = {})
47
+ @args = args
48
+ @map = {}
49
+ end
50
+
51
+ #Sets a new object in the map with a given ID.
52
+ def set(id, obj)
53
+ @map[id] = Knj::Wref.new(obj)
54
+ end
55
+
56
+ #Returns a object by ID or raises a RefError.
57
+ def get(id)
58
+ raise WeakRef::RefError if !@map.key?(id)
59
+
60
+ begin
61
+ return @map[id].get
62
+ rescue WeakRef::RefError => e
63
+ @map[id].destroy
64
+ @map.delete(id)
65
+ raise e
66
+ end
67
+ end
68
+
69
+ #Make it hash-compatible.
70
+ alias [] get
71
+ alias []= set
72
+
73
+ #The same as 'get' but returns nil instead of WeakRef-error. This can be used to avoid writing lots of code.
74
+ def get!(id)
75
+ begin
76
+ return self.get(id)
77
+ rescue WeakRef::RefError
78
+ return nil
79
+ end
80
+ end
81
+
82
+ #Scans the whole map and removes dead references.
83
+ def clean
84
+ @map.each_index do |key|
85
+ begin
86
+ @map[key].get #this will remove the key if the object no longer exists.
87
+ rescue WeakRef::RefError
88
+ #ignore.
89
+ end
90
+ end
91
+ end
92
+
93
+ #Returns true if a given key exists and the object it holds is alive.
94
+ def valid?(key)
95
+ return false if !@map.key?(key)
96
+
97
+ begin
98
+ @map[key].get
99
+ return true
100
+ rescue WeakRef::RefError
101
+ return false
102
+ end
103
+ end
104
+ end
data/lib/knj/x11vnc.rb CHANGED
@@ -1,48 +1,48 @@
1
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.key?(:shared)
8
- cmd += " -forever" if @args[:forever] or !@args.key?(:forever)
9
- cmd += " -rfbport #{@args[:port]}" if @args[:port]
10
- cmd += " -nolookup" if @args[:nolookup] or !@args.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
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.key?(:shared)
8
+ cmd << " -forever" if @args[:forever] or !@args.key?(:forever)
9
+ cmd << " -rfbport #{@args[:port]}" if @args[:port]
10
+ cmd << " -nolookup" if @args[:nolookup] or !@args.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
48
  end
data/lib/knj/youtube.rb CHANGED
@@ -1,38 +1,35 @@
1
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
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
+ break if data["pages"] and page > data["pages"].to_i
31
+ end
32
+
33
+ return ret_arr
34
+ end
38
35
  end
data/lib/knjrbfw.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  module Knj
2
2
  end
3
3
 
4
+ $knjpath = "knj/" if !$knjpath
4
5
  $: << File.dirname(__FILE__)
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Cmd_parser" do
4
+ it "should be able to parse various strings" do
5
+ require "knjrbfw"
6
+ require "knj/cmd_parser"
7
+ require "knj/php"
8
+
9
+ strs = [
10
+ "-rw-r--r-- 1 admin administ 186.3M Aug 30 18:09 b4u_synoptik_2011_08_30_17_57_32.sql.gz\n",
11
+ "-rw-r--r-- 1 admin administ 2 Nov 21 18:12 test\n",
12
+ "-rw-r--r-- 1 kaspernj kaspernj 279943393 2011-07-27 09:28 dbdump_2011_07_27_03_07_36.sql\n",
13
+ "-rw-rw-r-- 1 kaspernj kaspernj 58648 2011-10-28 18:33 2011-11-28 - Programmerings aften hos Anders - mad - 600 kr.pdf\n",
14
+ "-rw-r--r-- 1 www-data www-data 4,0K 2011-05-16 23:21 dbbackup_2011_05_16-23:21:10.sql.gz\n"
15
+ ]
16
+
17
+ strs.each do |str|
18
+ res = Knj::Cmd_parser.lsl(str)
19
+
20
+ res.each do |file|
21
+ raise "Byte was not numeric in: '#{str}'." if !Knj::Php.is_numeric(file[:size])
22
+ end
23
+ end
24
+ end
25
+ end
data/spec/db_spec.rb ADDED
@@ -0,0 +1,40 @@
1
+ #encoding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
+
5
+ describe "Db" do
6
+ it "should be able to handle various encodings" do
7
+ #I never got this test to actually fail... :-(
8
+
9
+ require "knj/db"
10
+ require "tmpdir"
11
+ require "sqlite3"
12
+
13
+ db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
14
+
15
+ db = Knj::Db.new(
16
+ :type => "sqlite3",
17
+ :path => db_path,
18
+ :return_keys => "symbols",
19
+ :index_append_table_name => true
20
+ )
21
+
22
+ db.tables.create("test", {
23
+ "columns" => [
24
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
25
+ {"name" => "text", "type" => "varchar"}
26
+ ]
27
+ })
28
+
29
+ begin
30
+ cont = File.read("#{File.dirname(__FILE__)}/db_spec_encoding_test_file.txt")
31
+ cont.force_encoding("ASCII-8BIT")
32
+
33
+ db.insert("test", {
34
+ "text" => cont
35
+ })
36
+ ensure
37
+ File.unlink(db_path) if File.exists?(db_path)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1 @@
1
+ ��pl��p���
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Http2" do
4
+ it "should be able to do multipart-requests." do
5
+ require "knj/http2"
6
+ require "knj/php"
7
+
8
+ http = Knj::Http2.new(:host => "www.partyworm.dk")
9
+ resp = http.post_multipart("multipart_test.php", {
10
+ "test_var" => "true"
11
+ })
12
+
13
+ if resp.body != "multipart-test-test_var=true"
14
+ raise "Expected body to be 'test_var=true' but it wasnt: '#{resp.body}'."
15
+ end
16
+ end
17
+
18
+ it "it should be able to handle keep-alive correctly" do
19
+ require "knj/http2"
20
+
21
+ urls = [
22
+ "?show=users_search",
23
+ "?show=users_online",
24
+ "?show=drinksdb",
25
+ "?show=forum&fid=9&tid=1917&page=0"
26
+ ]
27
+ urls = ["robots.txt"]
28
+
29
+ http = Knj::Http2.new(:host => "www.partyworm.dk", :debug => true)
30
+ 0.upto(105) do |count|
31
+ url = urls[rand(urls.size)]
32
+ #print "Doing request #{count} of 200 (#{url}).\n"
33
+ res = http.get(url)
34
+ raise "Body was empty." if res.body.to_s.length <= 0
35
+ end
36
+ end
37
+ end
data/spec/knjrbfw_spec.rb CHANGED
@@ -123,21 +123,6 @@ describe "Knjrbfw" do
123
123
  {:class => :User, :required => true},
124
124
  :Project
125
125
  ]
126
-
127
- def self.list(d)
128
- sql = "SELECT * FROM Task WHERE 1=1"
129
-
130
- ret = list_helper(d)
131
- d.args.each do |key, val|
132
- raise sprintf("Invalid key: %s.", key)
133
- end
134
-
135
- sql += ret[:sql_where]
136
- sql += ret[:sql_order]
137
- sql += ret[:sql_limit]
138
-
139
- return d.ob.list_bysql(:Task, sql)
140
- end
141
126
  end
142
127
 
143
128
  class User < Knj::Datarow
@@ -159,11 +144,28 @@ describe "Knjrbfw" do
159
144
  :project_id => 1
160
145
  })
161
146
 
147
+ ret_proc = []
148
+ $ob.list(:Task) do |task|
149
+ ret_proc << task
150
+ end
151
+
152
+ raise "list with proc should return one task but didnt." if ret_proc.length != 1
153
+
154
+
162
155
  project = $ob.get(:Project, 1)
163
156
 
164
157
  tasks = project.tasks
165
158
  raise "No tasks were found on project?" if tasks.empty?
166
159
 
160
+
161
+ ret_proc = []
162
+ ret_test = project.tasks do |task|
163
+ ret_proc << task
164
+ end
165
+
166
+ raise "When given a block the return should be nil so it doesnt hold weak-ref-objects in memory but it didnt return nil." if ret_test != nil
167
+ raise "list for project with proc should return one task but didnt (#{ret_proc.length})." if ret_proc.length != 1
168
+
167
169
  user = tasks[0].user
168
170
  project_second = tasks[0].project
169
171
 
data/spec/php_spec.rb ADDED
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Php" do
4
+ it "explode" do
5
+ require "knj/php"
6
+
7
+ teststr = "1;2;3"
8
+ arr = Knj::Php.explode(";", teststr)
9
+
10
+ raise "Invalid length." if arr.length != 3
11
+ raise "Invalid first." if arr[0] != "1"
12
+ raise "Invalid second." if arr[1] != "2"
13
+ raise "Invalid third." if arr[2] != "3"
14
+ end
15
+
16
+ it "is_numeric" do
17
+ require "knj/php"
18
+
19
+ raise "Failed." if !Knj::Php.is_numeric(123)
20
+ raise "Failed." if !Knj::Php.is_numeric("123")
21
+ raise "Failed." if Knj::Php.is_numeric("kasper123")
22
+ raise "Failed." if Knj::Php.is_numeric("123kasper")
23
+ raise "Failed." if !Knj::Php.is_numeric(123.12)
24
+ raise "Failed." if !Knj::Php.is_numeric("123.12")
25
+ end
26
+
27
+ it "number_format" do
28
+ tests = {
29
+ Knj::Php.number_format(123123.12, 3, ",", ".") => "123.123,120",
30
+ Knj::Php.number_format(123123.12, 4, ".", ",") => "123,123.1200",
31
+ Knj::Php.number_format(-123123.12, 2, ",", ".") => "-123.123,12",
32
+ Knj::Php.number_format(-120, 2, ",", ".") => "-120,00",
33
+ Knj::Php.number_format(-12, 2, ".", ",") => "-12.00"
34
+ }
35
+
36
+ tests.each do |key, val|
37
+ if key != val
38
+ raise "Key was not the same as value (#{key}) (#{val})."
39
+ end
40
+ end
41
+ end
42
+
43
+ it "substr" do
44
+ res = Knj::Php.substr("selcol_15", 7)
45
+ raise "substr should have returned '15' but didnt: '#{res}'." if res != "15"
46
+
47
+ res = Knj::Php.substr("test_kasper", -6, 6)
48
+ raise "substr should have returned 'kasper' but didnt: '#{res}'." if res != "kasper"
49
+
50
+ res = Knj::Php.substr("test_kasper", 1, 3)
51
+ raise "substr should have returned 'est' but didnt: '#{res}'." if res != "est"
52
+ end
53
+
54
+ it "parse_str" do
55
+ require "knj/php"
56
+ require "knj/web"
57
+
58
+ teststr = "first=value&arr[]=foo+bar&arr[]=baz&hash[trala]=hmm&hash[trala2]=wtf"
59
+
60
+ hash = {}
61
+ Knj::Php.parse_str(teststr, hash)
62
+
63
+ raise "Invalid value for first." if hash["first"] != "value"
64
+ raise "Invalid value for first in arr." if hash["arr"]["0"] != "foo bar"
65
+ raise "Invalid value for second in arr." if hash["arr"]["1"] != "baz"
66
+ raise "Invalid value for hash-trala." if hash["hash"]["trala"] != "hmm"
67
+ raise "Invalid value for hash-trala2." if hash["hash"]["trala2"] != "wtf"
68
+ end
69
+ end
@@ -0,0 +1,150 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Process_meta" do
4
+ it "should be able to start a server and a client" do
5
+ require "knj/autoload"
6
+
7
+ #Start the activity.
8
+ $process_meta = Knj::Process_meta.new("debug" => false, "debug_err" => true)
9
+ end
10
+
11
+ it "should be able to do various operations" do
12
+ #Test that breaking a block wont continue to run in the process.
13
+ $process_meta.str_eval("
14
+ class Testclass
15
+ attr_reader :last_num
16
+
17
+ def initialize
18
+ @num = 0
19
+ end
20
+
21
+ def test_block
22
+ @num.upto(10) do |i|
23
+ @last_num = i
24
+ yield(i)
25
+ end
26
+ end
27
+ end
28
+ ")
29
+
30
+ proxy_obj = $process_meta.new(:Testclass)
31
+ proxy_obj2 = $process_meta.new(:Testclass)
32
+ proxy_obj3 = $process_meta.new(:Testclass)
33
+
34
+ $ids = []
35
+ $ids << proxy_obj.__id__
36
+ $ids << proxy_obj2.__id__
37
+ $ids << proxy_obj3.__id__
38
+
39
+ proxy_obj.test_block do |i|
40
+ if i == 5
41
+ break
42
+ end
43
+ end
44
+
45
+ last_num = proxy_obj.last_num
46
+ raise "Expected last num to be 5 but it wasnt: '#{last_num}'." if last_num != 5
47
+
48
+ #Somehow define_finalizer is always one behind, so we have to do funny one here.
49
+ ObjectSpace.define_finalizer(self, $process_meta.method(:proxy_finalizer))
50
+ end
51
+
52
+ it "should be able to do more" do
53
+ GC.start
54
+
55
+ #Its difficult to test this on JRuby.
56
+ if RUBY_ENGINE != "jruby"
57
+ count = 0
58
+ $ids.each do |id|
59
+ count += 1
60
+ raise "The object should no longer exist but it does: #{count}." if $process_meta.proxy_has?(id)
61
+ end
62
+ end
63
+
64
+
65
+ #Spawn a test-object - a string - with a variable-name.
66
+ proxy_obj = $process_meta.spawn_object(:String, "my_test_var", "Kasper")
67
+ raise "to_s should return 'Kasper' but didnt: '#{proxy_obj.to_s}'." if proxy_obj.to_s != "Kasper"
68
+
69
+ #Stress it a little by doing 500 calls.
70
+ 0.upto(500) do
71
+ res = proxy_obj.slice(0, 3)
72
+ raise "Expected output was: 'Kas' but wasnt: '#{res}'." if res != "Kas"
73
+ end
74
+
75
+ #Do a lot of calls at the same time to test thread-safety.
76
+ threads = []
77
+ 0.upto(10) do |i|
78
+ should_return = "Kasper".slice(0, i)
79
+ threads << Knj::Thread.new do
80
+ 0.upto(500) do
81
+ res = proxy_obj.slice(0, i)
82
+ raise "Should return: '#{should_return}' but didnt: '#{res}'." if res != should_return
83
+ end
84
+ end
85
+ end
86
+
87
+ threads.each do |thread|
88
+ thread.join
89
+ end
90
+
91
+
92
+
93
+ #Try to define an integer and run upto with a block.
94
+ proxy_int = $process_meta.spawn_object(:Integer, nil, 5)
95
+ expect = 5
96
+ proxy_int.upto(1000) do |i|
97
+ raise "Expected '#{expect}' but got: '#{i}'." if i != expect
98
+ expect += 1
99
+ end
100
+
101
+ #Ensure the expected has actually been increased by running the block.
102
+ raise "Expected end-result of 11 but got: '#{expect}'." if expect != 1001
103
+
104
+
105
+ proxy_int._process_meta_block_buffer_use = true
106
+ expect = 5
107
+ proxy_int.upto(10000) do |i|
108
+ raise "Expected '#{expect}' but got: '#{i}'." if i != expect
109
+ expect += 1
110
+ end
111
+
112
+
113
+ #Ensure the expected has actually been increased by running the block.
114
+ raise "Expected end-result of 11 but got: '#{expect}'." if expect != 10001
115
+
116
+ #Try to unset an object.
117
+ proxy_obj._process_meta_unset
118
+ proxy_int._process_meta_unset
119
+ end
120
+
121
+ it "should be able to do slow block-results in JRuby." do
122
+ $process_meta.str_eval("
123
+ class Kaspertest
124
+ def kaspertest
125
+ 8.upto(12) do |i|
126
+ yield(i)
127
+ sleep 0.5
128
+ end
129
+ end
130
+ end
131
+
132
+ nil
133
+ ")
134
+
135
+ Timeout.timeout(5) do
136
+ expect = 8
137
+ $process_meta.static("Kaspertest", "kaspertest") do |count|
138
+ raise "Expected '#{expect}' but got: '#{count}'."
139
+ expect += 1
140
+ end
141
+
142
+ raise "Expected '13' but got: '#{expect}'."
143
+ end
144
+ end
145
+
146
+ it "should be able to be destroyed." do
147
+ #Destroy the process-meta which should stop the process.
148
+ $process_meta.destroy
149
+ end
150
+ end