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,6 @@
1
+ begin
2
+ require "tmail"
3
+ rescue LoadError
4
+ require "rubygems"
5
+ require "tmail"
6
+ end
@@ -0,0 +1,2 @@
1
+ require "rubygems"
2
+ require "twitter"
@@ -0,0 +1,6 @@
1
+ begin
2
+ require "xmlsimple"
3
+ rescue LoadError
4
+ require "rubygems"
5
+ require "xmlsimple"
6
+ end
@@ -0,0 +1,6 @@
1
+ begin
2
+ require "zip/zip"
3
+ rescue LoadError
4
+ require "rubygems"
5
+ require "zip"
6
+ end
@@ -0,0 +1,136 @@
1
+ $knjpath = File.dirname(__FILE__) + "/" if !$knjpath
2
+ require "#{$knjpath}/knj.rb"
3
+
4
+ module Knj
5
+ autoload :ArrayExt, $knjpath + "arrayext.rb"
6
+ autoload :Datestamp, $knjpath + "datestamp.rb"
7
+ autoload :Datet, $knjpath + "datet.rb"
8
+ autoload :Compiler, $knjpath + "compiler.rb"
9
+ autoload :Cpufreq, $knjpath + "cpufreq.rb"
10
+ autoload :Datarow, $knjpath + "datarow.rb"
11
+ autoload :Db, $knjpath + "knjdb/libknjdb.rb"
12
+ autoload :Db_row, $knjpath + "knjdb/libknjdb_row.rb"
13
+ autoload :Degulesider, $knjpath + "degulesider.rb"
14
+ autoload :Errors, $knjpath + "errors.rb"
15
+ autoload :Eruby, $knjpath + "eruby.rb"
16
+ autoload :Event_filemod, $knjpath + "event_filemod.rb"
17
+ autoload :Event_handler, $knjpath + "event_handler.rb"
18
+ autoload :Exchangerates, $knjpath + "exchangerates.rb"
19
+ autoload :Fs, $knjpath + "fs/fs.rb"
20
+ autoload :Filesystem, $knjpath + "filesystem.rb"
21
+ autoload :Gettext_threadded, $knjpath + "gettext_threadded.rb"
22
+ autoload :Hash_methods, $knjpath + "hash_methods.rb"
23
+ autoload :Ip2location, $knjpath + "ip2location.rb"
24
+ autoload :Jruby_compiler, $knjpath + "jruby_compiler.rb"
25
+ autoload :Locales, $knjpath + "locales.rb"
26
+ autoload :Objects, $knjpath + "objects.rb"
27
+ autoload :Opts, $knjpath + "opts.rb"
28
+ autoload :Mail, $knjpath + "mail.rb"
29
+ autoload :Mailobj, $knjpath + "mailobj.rb"
30
+ autoload :Mount, $knjpath + "mount.rb"
31
+ autoload :Mplayer, $knjpath + "mplayer.rb"
32
+ autoload :Notify, $knjpath + "notify.rb"
33
+ autoload :Nvidia_settings, $knjpath + "nvidia_settings.rb"
34
+ autoload :Web, $knjpath + "web.rb"
35
+ autoload :Google_sitemap, $knjpath + "google_sitemap.rb"
36
+ autoload :Http, $knjpath + "http.rb"
37
+ autoload :Sms, $knjpath + "sms.rb"
38
+ autoload :Os, $knjpath + "os.rb"
39
+ autoload :Gtk2, $knjpath + "gtk2.rb"
40
+ autoload :Php, $knjpath + "php.rb"
41
+ autoload :Php_parser, $knjpath + "php_parser/php_parser.rb"
42
+ autoload :Power_manager, $knjpath + "power_manager.rb"
43
+ autoload :Rand, $knjpath + "rand.rb"
44
+ autoload :Retry, $knjpath + "retry.rb"
45
+ autoload :RSVGBIN, $knjpath + "rsvgbin.rb"
46
+ autoload :Strings, $knjpath + "strings.rb"
47
+ autoload :SSHRobot, $knjpath + "sshrobot/sshrobot.rb"
48
+ autoload :Sysuser, $knjpath + "sysuser.rb"
49
+ autoload :Thread, $knjpath + "thread.rb"
50
+ autoload :Thread2, $knjpath + "thread2.rb"
51
+ autoload :Threadpool, $knjpath + "threadpool.rb"
52
+ autoload :Threadhandler, $knjpath + "threadhandler.rb"
53
+ autoload :Translations, $knjpath + "translations.rb"
54
+ autoload :X11VNC, $knjpath + "x11vnc.rb"
55
+ autoload :Unix_proc, $knjpath + "unix_proc.rb"
56
+ autoload :YouTube, $knjpath + "youtube.rb"
57
+ autoload :Win, $knjpath + "win.rb"
58
+ end
59
+
60
+ #ruby objects.
61
+ autoload :Base64, "base64"
62
+ autoload :CGI, "cgi"
63
+ autoload :CSV, "csv"
64
+ autoload :Date, "date"
65
+ autoload :Digest, "digest"
66
+ autoload :Erubis, $knjpath + "autoload/erubis"
67
+ autoload :EM, "eventmachine"
68
+ autoload :FCGI, "fcgi"
69
+ autoload :FileUtils, "fileutils"
70
+ autoload :IPAddr, "ipaddr"
71
+ autoload :JSON, $knjpath + "autoload/json_autoload"
72
+ autoload :GD2, $knjpath + "autoload/gd2"
73
+ autoload :Magick, $knjpath + "autoload/magick"
74
+ autoload :Mutex, "thread"
75
+ autoload :Mysql, $knjpath + "autoload/mysql"
76
+ autoload :Open3, "open3"
77
+ autoload :OpenSSL, "openssl"
78
+ autoload :OptionParser, "optparse"
79
+ autoload :ParseDate, $knjpath + "autoload/backups/parsedate.rb"
80
+ autoload :Pathname, "pathname"
81
+ autoload :Ping, $knjpath + "autoload/ping"
82
+ autoload :REXML, $knjpath + "autoload/rexml"
83
+ autoload :StringIO, "stringio"
84
+ autoload :SOAP, $knjpath + "autoload/soap"
85
+ autoload :SQLite3, $knjpath + "autoload/sqlite3"
86
+ autoload :Timeout, "timeout"
87
+ autoload :TCPSocket, "socket"
88
+ autoload :TCPServer, "socket"
89
+ autoload :URI, "uri"
90
+ autoload :Win32, "win32/registry"
91
+ autoload :WIN32OLE, "win32ole"
92
+ autoload :WEBrick, "webrick"
93
+ autoload :XmlSimple, $knjpath + "autoload/xmlsimple"
94
+ autoload :Zip, $knjpath + "autoload/zip.rb"
95
+ autoload :Zlib, "zlib"
96
+
97
+ if RUBY_PLATFORM == "java"
98
+ autoload :GetText, $knjpath + "autoload/gettext"
99
+ autoload :Gtk, "knj/jruby-gtk2/gtk2"
100
+ autoload :Gdk, "knj/jruby-gtk2/gtk2"
101
+ autoload :GladeXML, "knj/jruby-gtk2/gtk2"
102
+ elsif RUBY_PLATFORM.index("mswin32") != nil
103
+ autoload :GetText, "knj/gettext_fallback"
104
+ autoload :Gtk, "knj/ironruby-gtk2/gtk2"
105
+ autoload :Gdk, "knj/ironruby-gtk2/gtk2"
106
+ autoload :GladeXML, "knj/ironruby-gtk2/gtk2"
107
+ else
108
+ autoload :GetText, $knjpath + "autoload/gettext"
109
+ autoload :Gtk, $knjpath + "autoload/gtk2"
110
+ autoload :GladeXML, "libglade2"
111
+
112
+ #this bugs?
113
+ #autoload :Gdk, $knjpath + "autoload/gtk2"
114
+ end
115
+
116
+ module Net
117
+ autoload :IMAP, "net/imap"
118
+ autoload :SMTP, "net/smtp"
119
+ autoload :HTTP, "net/http"
120
+ autoload :POP3, "net/pop"
121
+ autoload :POP, "net/pop"
122
+ autoload :SSH, "net/ssh"
123
+ end
124
+
125
+ module TMail
126
+ autoload :Mail, $knjpath + "autoload/tmail"
127
+ end
128
+
129
+ #facets
130
+ autoload :Dictionary, $knjpath + "autoload/facets_dictionary"
131
+
132
+ #gems
133
+ autoload :Twitter, $knjpath + "autoload/twitter"
134
+ autoload :Facebooker, $knjpath + "autoload/facebooker"
135
+ autoload :Cinch, $knjpath + "autoload/cinch"
136
+ autoload :ActiveSupport, $knjpath + "autoload/activesupport"
@@ -0,0 +1,53 @@
1
+ #This class can compile Ruby-files into Ruby-methods on a special class and then call these methods to run the code from the file. The theory is that this can be faster...
2
+ class Knj::Compiler
3
+ def initialize(args = {})
4
+ @args = args
5
+ @mutex = Mutex.new
6
+
7
+ if @args[:cache_hash]
8
+ @compiled = @args[:cache_hash]
9
+ else
10
+ @compiled = {}
11
+ end
12
+ end
13
+
14
+ #Compiles file into cache as a method.
15
+ def compile_file(args)
16
+ raise "File does not exist." if !File.exist?(args[:filepath])
17
+ filepath = Knj::Php.realpath(args[:filepath])
18
+ defname = def_name_for_file_path(filepath)
19
+
20
+ evalcont = "class Knj::Compiler::Container; def self.#{defname};"
21
+ evalcont += File.read(filepath)
22
+ evalcont += ";end;end"
23
+
24
+ eval(evalcont, nil, args[:fileident])
25
+ @compiled[filepath] = Time.new
26
+ end
27
+
28
+ #Returns the method name for a filepath.
29
+ def def_name_for_file_path(filepath)
30
+ return filepath.gsub("/", "_").gsub(".", "_")
31
+ end
32
+
33
+ #Compile and evaluate a file - it will be cached.
34
+ def eval_file(args)
35
+ filepath = Knj::Php.realpath(args[:filepath])
36
+
37
+ #Compile if it hasnt been compiled yet.
38
+ @mutex.synchronize do
39
+ compile_file(args) if !@compiled.has_key?(filepath)
40
+
41
+ #Compile if modified time has been changed.
42
+ mtime = File.mtime(filepath)
43
+ compile_file(args) if @compiled[filepath] < mtime
44
+ end
45
+
46
+ #Call the compiled function.
47
+ defname = def_name_for_file_path(filepath)
48
+ Knj::Compiler::Container.send(defname)
49
+ end
50
+
51
+ #This class holds the compiled methods.
52
+ class Knj::Compiler::Container; end
53
+ end
@@ -0,0 +1,40 @@
1
+ #This class can manipulate the CPU behavior through "cpufreq".
2
+ class Knj::Cpufreq
3
+ attr_reader :data
4
+
5
+ def initialize(data)
6
+ @data = data
7
+ @allowed_govs = ["performance", "ondemand", "powersafe", "conservative"]
8
+ end
9
+
10
+ def self.list
11
+ ret = []
12
+ cont = File.read("/proc/cpuinfo")
13
+
14
+ matches = cont.scan(/processor\s*:[\s\S]+?\n\n/)
15
+ raise "Could not detect CPUs" if !matches or matches.empty?
16
+
17
+ matches.each do |cpucont|
18
+ cpu_features = {}
19
+ features = cpucont.scan(/(.+)\s*:\s*(.+)\s*/)
20
+
21
+ features.each do |data|
22
+ cpu_features[data[0].strip] = data[1].strip
23
+ end
24
+
25
+ ret << Knj::Cpufreq.new(cpu_features)
26
+ end
27
+
28
+ return ret
29
+ end
30
+
31
+ def governor=(newgov)
32
+ raise "Governor not found." if @allowed_govs.index(newgov) == nil
33
+
34
+ cmd = "cpufreq-set --cpu #{@data["processor"]} --governor #{newgov}"
35
+ res = Knj::Os::shellcmd(cmd)
36
+ if res.index("Error setting new values") != nil
37
+ raise res.strip
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,256 @@
1
+ class Knj::Datarow
2
+ attr_reader :data, :ob
3
+
4
+ def self.required_data
5
+ @required_data = [] if !@required_data
6
+ return @required_data
7
+ end
8
+
9
+ def self.depending_data
10
+ @depending_data = [] if !@depending_data
11
+ return @depending_data
12
+ end
13
+
14
+ def is_knj?; return true; end
15
+
16
+ def self.is_nullstamp?(stamp)
17
+ return true if !stamp or stamp == "0000-00-00 00:00:00" or stamp == "0000-00-00"
18
+ return false
19
+ end
20
+
21
+ def self.has_many(arr)
22
+ arr.each do |val|
23
+ if val.is_a?(Array)
24
+ classname, colname, methodname = *val
25
+ elsif val.is_a?(Hash)
26
+ classname = val[:class]
27
+ colname = val[:col]
28
+ methodname = val[:method]
29
+
30
+ if val[:depends]
31
+ depending_data << {
32
+ :colname => colname,
33
+ :classname => classname
34
+ }
35
+ end
36
+ else
37
+ raise "Unknown argument: '#{val.class.name}'."
38
+ end
39
+
40
+ if !methodname
41
+ methodname = "#{classname.to_s.downcase}s".to_sym
42
+ end
43
+
44
+ define_method(methodname) do |*args|
45
+ merge_args = args[0] if args and args[0]
46
+ merge_args = {} if !merge_args
47
+ return ob.list(classname, {colname.to_s => self.id}.merge(merge_args))
48
+ end
49
+ end
50
+ end
51
+
52
+ def self.has_one(arr)
53
+ arr.each do |val|
54
+ methodname = nil
55
+ colname = nil
56
+ classname = nil
57
+
58
+ if val.is_a?(Symbol)
59
+ classname = val
60
+ methodname = val.to_s.downcase.to_sym
61
+ colname = "#{val.to_s.downcase}_id".to_sym
62
+ elsif val.is_a?(Array)
63
+ classname, colname, methodname = *val
64
+ elsif val.is_a?(Hash)
65
+ classname, colname, methodname = val[:class], val[:col], val[:method]
66
+
67
+ if val[:required]
68
+ colname = "#{classname.to_s.downcase}_id".to_sym if !colname
69
+ required_data << {
70
+ :col => colname,
71
+ :class => classname
72
+ }
73
+ end
74
+ else
75
+ raise "Unknown argument-type: '#{arr.class.name}'."
76
+ end
77
+
78
+ methodname = classname.to_s.downcase if !methodname
79
+ colname = "#{classname.to_s.downcase}_id".to_sym if !colname
80
+
81
+ define_method(methodname) do
82
+ return ob.get_try(self, colname, classname)
83
+ end
84
+
85
+ methodname_html = "#{methodname.to_s}_html".to_sym
86
+ define_method(methodname_html) do |*args|
87
+ obj = self.send(methodname)
88
+ return ob.events.call(:no_html, classname) if !obj
89
+
90
+ raise "Class '#{classname}' does not have a 'html'-method." if !obj.respond_to?(:html)
91
+ return obj.html(*args)
92
+ end
93
+ end
94
+ end
95
+
96
+ def self.table
97
+ return self.name.split("::").last
98
+ end
99
+
100
+ def self.columns(d)
101
+ columns_load(d) if !@columns
102
+ return @columns
103
+ end
104
+
105
+ def self.columns_load(d)
106
+ return nil if @columns
107
+ @columns = d.db.tables[table].columns
108
+ end
109
+
110
+ def self.columns_sqlhelper_args
111
+ return @columns_sqlhelper_args
112
+ end
113
+
114
+ def self.list_helper(d)
115
+ sleep 0.1 while @columns_sqlhelper_args_working
116
+
117
+ if !@columns_sqlhelper_args
118
+ begin
119
+ @columns_sqlhelper_args_working = true
120
+ cols = self.columns(d)
121
+
122
+ sqlhelper_args = {
123
+ :db => d.db,
124
+ :table => table,
125
+ :cols_bools => [],
126
+ :cols_date => [],
127
+ :cols_dbrows => [],
128
+ :cols_num => [],
129
+ :cols_str => []
130
+ }
131
+ cols.each do |col_name, col_obj|
132
+ col_type = col_obj.type
133
+ col_type = "int" if col_type == "bigint" or col_type == "tinyint" or col_type == "mediumint" or col_type == "smallint"
134
+
135
+ if col_type == "enum" and col_obj.maxlength == "'0','1'"
136
+ sqlhelper_args[:cols_bools] << col_name
137
+ elsif col_type == "int" and col_name.slice(-3, 3) == "_id"
138
+ sqlhelper_args[:cols_dbrows] << col_name
139
+ elsif col_type == "int" or col_type == "bigint"
140
+ sqlhelper_args[:cols_num] << col_name
141
+ elsif col_type == "varchar" or col_type == "text" or col_type == "enum"
142
+ sqlhelper_args[:cols_str] << col_name
143
+ elsif col_type == "date" or col_type == "datetime"
144
+ sqlhelper_args[:cols_date] << col_name
145
+ end
146
+ end
147
+
148
+ @columns_sqlhelper_args = sqlhelper_args
149
+ ensure
150
+ @columns_sqlhelper_args_working = false
151
+ end
152
+ end
153
+
154
+ return d.ob.sqlhelper(d.args, @columns_sqlhelper_args)
155
+ end
156
+
157
+ def table
158
+ return self.class.name.split("::").last
159
+ end
160
+
161
+ def initialize(d)
162
+ @ob = d.ob
163
+ raise "No ob given." if !@ob
164
+
165
+ if d.data.is_a?(Hash)
166
+ @data = d.data
167
+ elsif d.data
168
+ @data = {:id => d.data}
169
+ self.reload
170
+ else
171
+ raise Knj::Errors::InvalidData, "Could not figure out the data from '#{d.data.class.name}'."
172
+ end
173
+ end
174
+
175
+ def db
176
+ return @ob.db
177
+ end
178
+
179
+ def reload
180
+ data = self.db.single(self.table, {:id => @data[:id]})
181
+ if !data
182
+ raise Knj::Errors::NotFound, "Could not find any data for the object with ID: '#{@data[:id]}' in the table '#{self.table}'."
183
+ end
184
+
185
+ @data = data
186
+ end
187
+
188
+ def update(newdata)
189
+ self.db.update(self.table, newdata, {:id => @data[:id]})
190
+ self.reload
191
+
192
+ if self.ob
193
+ self.ob.call("object" => self, "signal" => "update")
194
+ end
195
+ end
196
+
197
+ def destroy
198
+ @ob = nil
199
+ @data = nil
200
+ end
201
+
202
+ def has_key?(key)
203
+ return @data.has_key?(key.to_sym)
204
+ end
205
+
206
+ def [](key)
207
+ raise "No valid key given." if !key.is_a?(Symbol)
208
+ raise "No data was loaded on the object? Maybe you are trying to call a deleted object?" if !@data
209
+ return @data[key] if @data.has_key?(key)
210
+ raise "No such key: #{key}."
211
+ end
212
+
213
+ def []=(key, value)
214
+ self.update(key.to_sym => value)
215
+ self.reload
216
+ end
217
+
218
+ def id
219
+ raise "No data on object." if !@data
220
+ return @data[:id]
221
+ end
222
+
223
+ def name
224
+ if @data.has_key?(:title)
225
+ return @data[:title]
226
+ elsif @data.has_key?(:name)
227
+ return @data[:name]
228
+ end
229
+
230
+ obj_methods = self.class.instance_methods(false)
231
+ [:name, :title].each do |method_name|
232
+ return self.method(method_name).call if obj_methods.index(method_name)
233
+ end
234
+
235
+ raise "Couldnt figure out the title/name of the object on class #{self.class.name}."
236
+ end
237
+
238
+ alias :title :name
239
+
240
+ def each(&args)
241
+ return @data.each(&args)
242
+ end
243
+
244
+ def method_missing(*args)
245
+ func_name = args[0].to_s
246
+ if match = func_name.match(/^(\S+)\?$/) and @data.has_key?(match[1].to_sym)
247
+ if @data[match[1].to_sym] == "1" or @data[match[1].to_sym] == "yes"
248
+ return true
249
+ elsif @data[match[1].to_sym] == "0" or @data[match[1].to_sym] == "no"
250
+ return false
251
+ end
252
+ end
253
+
254
+ raise "No such method: '#{func_name}' on '#{self.class.name}'"
255
+ end
256
+ end
@@ -0,0 +1,91 @@
1
+ class Knj::Datestamp
2
+ def self.in(time = Time.new)
3
+ if Knj::Php.is_numeric(time)
4
+ time = Time.at(time.to_i)
5
+ elsif time.is_a?(String)
6
+ time = Time.local(*ParseDate.parsedate(time))
7
+ end
8
+
9
+ return time
10
+ end
11
+
12
+ def self.dbstr(time = nil)
13
+ if !time
14
+ time = Time.new
15
+ end
16
+
17
+ if Knj::Php.is_numeric(time)
18
+ time = Time.at(time.to_i)
19
+ elsif time.is_a?(String)
20
+ begin
21
+ time = Time.local(*ParseDate.parsedate(time))
22
+ rescue => e
23
+ raise sprintf("Could not parse date: %s", time.to_s)
24
+ end
25
+ else
26
+ raise "Could not figure out given argument: #{time.class.name}"
27
+ end
28
+
29
+ return "%04d" % time.year.to_s + "-" + "%02d" % time.month.to_s + "-" + "%02d" % time.day.to_s + " " + "%02d" % time.hour.to_s + ":" + "%02d" % time.min.to_s + ":" + "%02d" % time.sec.to_s
30
+ end
31
+
32
+ def self.from_dbstr(date_string)
33
+ if Knj::Datestamp.is_nullstamp?(date_string)
34
+ return 0
35
+ end
36
+
37
+ return Time.local(*ParseDate.parsedate(date_string))
38
+ end
39
+
40
+ def self.out(time = nil, args = {})
41
+ Knj::ArrayExt.hash_sym(args)
42
+
43
+ time = Time.new if !time
44
+
45
+ if Knj::Php.is_numeric(time)
46
+ time = Time.at(time.to_i)
47
+ elsif time.is_a?(String)
48
+ time = Time.at(Knj::Php.strtotime(time))
49
+ end
50
+
51
+ str = ""
52
+
53
+ if !args.has_key?(:date) or args[:date] == true
54
+ str += "%02d" % time.day.to_s + "/" + "%02d" % time.month.to_s + " " + "%04d" % time.year.to_s
55
+ end
56
+
57
+ if !args.has_key?(:time) or args[:time] == true
58
+ str += " " + "%02d" % time.hour.to_s + ":" + "%02d" % time.min.to_s
59
+ end
60
+
61
+ return str
62
+ end
63
+
64
+ def self.in(timestr)
65
+ if match = timestr.to_s.match(/^(\d+)\/(\d+) (\d+)/)
66
+ timestr = timestr.gsub(match[0], "")
67
+ date = match[1]
68
+ month = match[2]
69
+ year = match[3]
70
+ else
71
+ raise sprintf(_("Wrong format: %s"), timestr)
72
+ end
73
+
74
+ if match = timestr.match(/\s*(\d+):(\d+)/)
75
+ timestr = timestr.gsub(match[0], "")
76
+ hour = match[1]
77
+ minute = match[2]
78
+ end
79
+
80
+ datestr = ""
81
+ datestr = "#{year}-#{month}-#{date}" if date and month and year
82
+ datestr += " #{hour}:#{minute}" if hour and minute
83
+
84
+ return Knj::Datestamp.from_dbstr(datestr)
85
+ end
86
+
87
+ def self.is_nullstamp?(datestamp)
88
+ return true if datestamp.is_a?(String) and datestamp == "0000-00-00 00:00:00"
89
+ return false
90
+ end
91
+ end