knjrbfw 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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