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
data/lib/knj/datet.rb ADDED
@@ -0,0 +1,448 @@
1
+ class Knj::Datet
2
+ attr_accessor :time
3
+
4
+ def initialize(time = Time.now)
5
+ @time = time
6
+ end
7
+
8
+ def find(incr, args)
9
+ count = 0
10
+ while true
11
+ if args[:day_in_week] and self.day_in_week == args[:day_in_week]
12
+ return self
13
+ elsif args[:wday] and self.time.wday == args[:wday].to_i
14
+ return self
15
+ end
16
+
17
+ if incr == :day
18
+ self.add_days(1)
19
+ elsif incr == :month
20
+ self.add_months(1)
21
+ else
22
+ raise "Invalid increment: #{incr}."
23
+ end
24
+
25
+ count += 1
26
+ raise "Endless loop?" if count > 999
27
+ end
28
+ end
29
+
30
+ def add_mins(mins = 1)
31
+ mins = mins.to_i
32
+ cur_mins = @time.min
33
+ next_min = cur_mins + mins
34
+
35
+ if next_min >= 60
36
+ @time = self.add_hours(1).stamp(:datet => false, :min => 0)
37
+ mins_left = (mins - 1) - (60 - cur_mins)
38
+ return self.add_mins(mins_left) if mins_left > 0
39
+ elsif next_min < 0
40
+ @time = self.add_hours(-1).stamp(:datet => false, :min => 59)
41
+ mins_left = mins + cur_mins + 1
42
+ self.add_mins(mins_left) if mins_left > 0
43
+ else
44
+ @time = self.stamp(:datet => false, :min => next_min)
45
+ end
46
+
47
+ return self
48
+ end
49
+
50
+ def add_hours(hours = 1)
51
+ hours = hours.to_i
52
+ cur_hour = @time.hour
53
+ next_hour = cur_hour + hours
54
+
55
+ if next_hour >= 24
56
+ @time = self.add_days(1).stamp(:datet => false, :hour => 0)
57
+ hours_left = (hours - 1) - (24 - cur_hour)
58
+ return self.add_hours(hours_left) if hours_left > 0
59
+ elsif next_hour < 0
60
+ @time = self.add_days(-1).stamp(:datet => false, :hour => 23)
61
+ hours_left = hours + cur_hour + 1
62
+ self.add_hours(hours_left) if hours_left < 0
63
+ else
64
+ @time = self.stamp(:datet => false, :hour => next_hour)
65
+ end
66
+
67
+ return self
68
+ end
69
+
70
+ def add_days(days = 1)
71
+ days = days.to_i
72
+ return self if days == 0
73
+ dim = self.days_in_month
74
+ cur_day = @time.day
75
+ next_day = cur_day + days
76
+
77
+ if next_day > dim
78
+ @time = self.add_months(1).stamp(:datet => false, :day => 1)
79
+ days_left = (days - 1) - (dim - cur_day)
80
+ self.add_days(days_left) if days_left > 0
81
+ elsif next_day <= 0
82
+ self.date = 1
83
+ self.add_months(-1)
84
+ @time = self.stamp(:datet => false, :day => self.days_in_month)
85
+ days_left = days + 1
86
+ self.add_days(days_left) if days_left != 0
87
+ else
88
+ @time = self.stamp(:datet => false, :day => next_day)
89
+ end
90
+
91
+ return self
92
+ end
93
+
94
+ def add_months(months = 1)
95
+ months = months.to_i
96
+ cur_month = @time.month
97
+ cur_day = @time.day
98
+ next_month = cur_month + months.to_i
99
+
100
+ if next_month > 12
101
+ @time = self.add_years(1).stamp(:datet => false, :month => 1, :day => 1)
102
+ months_left = (months - 1) - (12 - cur_month)
103
+ return self.add_months(months_left) if months_left > 0
104
+ elsif next_month < 1
105
+ @time = self.add_years(-1).stamp(:datet => false, :month => 12)
106
+ else
107
+ @time = self.stamp(:datet => false, :month => next_month, :day => 1)
108
+ end
109
+
110
+ dim = self.days_in_month
111
+
112
+ if dim < cur_day
113
+ @time = self.stamp(:datet => false, :day => dim)
114
+ else
115
+ @time = self.stamp(:datet => false, :day => cur_day)
116
+ end
117
+
118
+ return self
119
+ end
120
+
121
+ def add_years(years = 1)
122
+ next_year = @time.year + years.to_i
123
+ @time = self.stamp(:datet => false, :year => next_year)
124
+ return self
125
+ end
126
+
127
+ #Returns the number of days in the current month.
128
+ def days_in_month
129
+ #Thanks to ActiveSupport: http://rubydoc.info/docs/rails/2.3.8/ActiveSupport/CoreExtensions/Time/Calculations
130
+ days_in_months = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
131
+ return days_in_months[@time.month]
132
+ end
133
+
134
+ def day_in_week
135
+ diw = @time.strftime("%w").to_i
136
+ if diw == 0
137
+ diw = 6
138
+ else
139
+ diw -= 1
140
+ end
141
+
142
+ return diw
143
+ end
144
+
145
+ def day_name
146
+ return @time.strftime("%A")
147
+ end
148
+
149
+ def month_name
150
+ return @time.strftime("%B")
151
+ end
152
+
153
+ def year
154
+ return @time.year
155
+ end
156
+
157
+ def hour
158
+ return @time.hour
159
+ end
160
+
161
+ def min
162
+ return @time.min
163
+ end
164
+
165
+ def year=(newyear)
166
+ @time = self.stamp(:datet => false, :year => newyear)
167
+ end
168
+
169
+ def month
170
+ @mode = :months
171
+ return @time.month
172
+ end
173
+
174
+ def date
175
+ @mode = :days
176
+ return @time.day
177
+ end
178
+
179
+ def wday_mon
180
+ wday = @time.wday
181
+ return 0 if wday == 6
182
+ return wday - 1
183
+ end
184
+
185
+ def date=(newday)
186
+ newday = newday.to_i
187
+
188
+ if newday <= 0
189
+ self.add_days(newday - 1)
190
+ else
191
+ @time = self.stamp(:datet => false, :day => newday)
192
+ end
193
+
194
+ return self
195
+ end
196
+
197
+ def hour=(newhour)
198
+ newhour = newhour.to_i
199
+ day = @time.day
200
+
201
+ loop do
202
+ break if newhour >= 0
203
+ day += -1
204
+ newhour += 24
205
+ end
206
+
207
+ loop do
208
+ break if newhour < 24
209
+ day += 1
210
+ newhour += -24
211
+ end
212
+
213
+ @time = self.stamp(:datet => false, :hour => newhour)
214
+
215
+ self.date = day if day != @time.day
216
+ return self
217
+ end
218
+
219
+ def min=(newmin)
220
+ @time = self.stamp(:datet => false, :min => newmin.to_i)
221
+ end
222
+
223
+ def sec=(newsec)
224
+ @time = self.stamp(:datet => false, :sec => newsec.to_i)
225
+ end
226
+
227
+ alias :day :date
228
+
229
+ def month=(newmonth)
230
+ @time = self.stamp(:datet => false, :month => newmonth)
231
+ end
232
+
233
+ def arg_to_time(datet)
234
+ if datet.is_a?(Knj::Datet)
235
+ return datet.time
236
+ elsif datet.is_a?(Time)
237
+ return datet
238
+ else
239
+ raise "Could not handle object of class: '#{datet.class.name}'."
240
+ end
241
+ end
242
+
243
+ include Comparable
244
+ def <=>(timeobj)
245
+ secs = arg_to_time(timeobj).to_i
246
+
247
+ if secs > @time.to_i
248
+ return 1
249
+ elsif secs < @time.to_i
250
+ return -1
251
+ else
252
+ return 0
253
+ end
254
+ end
255
+
256
+ def add_something(val)
257
+ val = -val if @addmode == "-"
258
+ return self.add_hours(val) if @mode == :hours
259
+ return self.add_days(val) if @mode == :days
260
+ return self.add_months(val) if @mode == :months
261
+ return self.add_mins(val) if @mode == :mins
262
+ raise "No such mode: #{@mode}"
263
+ end
264
+
265
+ def -(val)
266
+ @addmode = "-"
267
+ self.add_something(val)
268
+ end
269
+
270
+ def +(val)
271
+ @addmode = "+"
272
+ self.add_something(val)
273
+ end
274
+
275
+ def hours
276
+ @mode = :hours
277
+ return self
278
+ end
279
+
280
+ def mins
281
+ @mode = :mins
282
+ return self
283
+ end
284
+
285
+ def days
286
+ @mode = :days
287
+ return self
288
+ end
289
+
290
+ def months
291
+ @mode = :months
292
+ return self
293
+ end
294
+
295
+ def stamp(args)
296
+ vars = {:year => @time.year, :month => @time.month, :day => @time.day, :hour => @time.hour, :min => @time.min, :sec => @time.sec}
297
+
298
+ args.each do |key, value|
299
+ vars[key.to_sym] = value.to_i if key != :datet
300
+ end
301
+
302
+ time = Time.gm(vars[:year], vars[:month], vars[:day], vars[:hour], vars[:min], vars[:sec])
303
+
304
+ if !args.has_key?(:datet) or args[:datet]
305
+ return Knj::Datet.new(time)
306
+ end
307
+
308
+ return time
309
+ end
310
+
311
+ def dbstr
312
+ 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
313
+ end
314
+
315
+ def self.from_dbstr(date_string)
316
+ if date_string.is_a?(Time)
317
+ return Knj::Datet.new(date_string)
318
+ elsif date_string.is_a?(Date)
319
+ return Knj::Datet.new(date_string.to_time)
320
+ end
321
+
322
+ return false if Knj::Datestamp.is_nullstamp?(date_string)
323
+ return Knj::Datet.new(Time.local(*ParseDate.parsedate(date_string.to_s)))
324
+ end
325
+
326
+ def self.parse(str)
327
+ return Knj::Datet.from_dbstr(str)
328
+ end
329
+
330
+ def self.is_nullstamp?(stamp)
331
+ return true if !stamp or stamp == "0000-00-00" or stamp == "0000-00-00 00:00:00"
332
+ return false
333
+ end
334
+
335
+ def out(args = {})
336
+ str = ""
337
+ date_shown = false
338
+ time_shown = false
339
+
340
+ if !args.has_key?(:date) or args[:date]
341
+ date_shown = true
342
+ str += "%02d" % @time.day.to_s + "/" + "%02d" % @time.month.to_s
343
+
344
+ if !args.has_key?(:year) or args[:year]
345
+ str += " " + "%04d" % @time.year.to_s
346
+ end
347
+ end
348
+
349
+ if !args.has_key?(:time) or args[:time]
350
+ time_shown = true
351
+ str += " - " if date_shown
352
+ str += "%02d" % @time.hour.to_s + ":" + "%02d" % @time.min.to_s
353
+ end
354
+
355
+ return str
356
+ end
357
+
358
+ def self.in(timestr)
359
+ if timestr.is_a?(Time)
360
+ return Knj::Datet.new(timestr)
361
+ elsif timestr.is_a?(Date)
362
+ return Knj::Datet.new(timestr.to_time)
363
+ elsif timestr.is_a?(Knj::Datet)
364
+ return timestr
365
+ elsif timestr == nil
366
+ return Knj::Datet.in("1970-01-01")
367
+ end
368
+
369
+ if match = timestr.to_s.match(/^(\d+)\/(\d+) (\d+)/)
370
+ #MySQL date format
371
+ timestr = timestr.gsub(match[0], "")
372
+ date = match[1]
373
+ month = match[2]
374
+ year = match[3]
375
+
376
+ if match = timestr.match(/\s*(\d+):(\d+)/)
377
+ #MySQL datetime format
378
+ timestr = timestr.gsub(match[0], "")
379
+ hour = match[1]
380
+ minute = match[2]
381
+ end
382
+
383
+ return Knj::Datet.new(Time.gm(year, month, date, hour, minute))
384
+ elsif match = timestr.to_s.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/)
385
+ return Knj::Datet.new(Time.gm(match[3], match[2], match[1]))
386
+ elsif match = timestr.to_s.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})$/)
387
+ #Datet.code format
388
+ return Knj::Datet.new(Time.gm(match[1], match[2], match[3], match[4], match[5], match[6], match[7]))
389
+ elsif match = timestr.to_s.match(/^\s*(\d{4})-(\d{1,2})-(\d{1,2})(|\s+(\d{2}):(\d{2}):(\d{2})(|\.\d+)\s*)(|\s+(UTC))(|\s+(\+|\-)(\d{2})(\d{2}))$/)
390
+ #Database date format (with possibility of .0 in the end - miliseconds? -knj.
391
+
392
+ if match[11]
393
+ utc_str = "+#{match[13]}:#{match[14]}"
394
+ elsif match[8]
395
+ utc_str = match[8].to_i
396
+ else
397
+ utc_str = nil
398
+ end
399
+
400
+ return Knj::Datet.new(Time.gm(match[1].to_i, match[2].to_i, match[3].to_i, match[5].to_i, match[6].to_i, match[7].to_i,utc_str))
401
+ end
402
+
403
+ raise Knj::Errors::InvalidData.new("Wrong format: '#{timestr}', class: '#{timestr.class.name}'")
404
+ end
405
+
406
+ def self.months_arr
407
+ return Dictionary[
408
+ 1, _("January"),
409
+ 2, _("February"),
410
+ 3, _("March"),
411
+ 4, _("April"),
412
+ 5, _("May"),
413
+ 6, _("June"),
414
+ 7, _("July"),
415
+ 8, _("August"),
416
+ 9, _("September"),
417
+ 10, _("October"),
418
+ 11, _("November"),
419
+ 12, _("December")
420
+ ]
421
+ end
422
+
423
+ def loc_wday
424
+ return _(@time.strftime("%A"))
425
+ end
426
+
427
+ def loc_wday_small
428
+ return _(@time.strftime("%a"))
429
+ end
430
+
431
+ def loc_month
432
+ return _(@time.strftime("%B"))
433
+ end
434
+
435
+ def to_s
436
+ return @time.to_s
437
+ end
438
+
439
+ def code
440
+ return "#{"%04d" % @time.year}#{"%02d" % @time.month}#{"%02d" % @time.day}#{"%02d" % @time.hour}#{"%02d" % @time.min}#{"%02d" % @time.sec}#{"%05d" % @time.usec}"
441
+ end
442
+
443
+ def unixt
444
+ return @time.to_i
445
+ end
446
+
447
+ alias :to_i :unixt
448
+ end
@@ -0,0 +1,46 @@
1
+ class Knj::Degulesider
2
+ include Knj
3
+
4
+ def initialize(args = {})
5
+ @args = args
6
+ @http = Http.new(
7
+ "host" => "www.degulesider.dk"
8
+ )
9
+ end
10
+
11
+ def search(sargs)
12
+ url = "/search/#{Php.urlencode(sargs[:where])}/-/1/"
13
+
14
+ html = @http.get(url)
15
+ ret = []
16
+
17
+ tbody_match = html["data"].match(/<tbody class='resultBody([\s\S]+?)<\/tbody>/)
18
+ tbody_match[1].scan(/<tr id='res(\d+)'([\s\S]+?)<\/tr>/) do |match|
19
+ res = {}
20
+
21
+ if title_match = match[1].match(/<h2><a\s+class="fn".*>(.+)<\/a><\/h2>/)
22
+ res[:name] = title_match[1]
23
+ end
24
+
25
+ if phone_match = match[1].match(/<div class="phones"><ul class="linkList"><li>(Mob.|)\s*([\d\s]+)<\/li><\/ul><\/div>/)
26
+ if phone_match[1] == "Mob."
27
+ res[:mobile] = phone_match[2].gsub(/\s+/, "")
28
+ else
29
+ raise "No such phone-mode: #{phone_match[1]}"
30
+ end
31
+ end
32
+
33
+ if city_match = match[1].match(/'locality'>(.+)<\/span>/)
34
+ res[:city] = city_match[1]
35
+ end
36
+
37
+ if category_match = match[1].match(/class='categoryLink'>(.+)<\/a>/)
38
+ res[:category] = category_match[1]
39
+ end
40
+
41
+ ret << res
42
+ end
43
+
44
+ return ret
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ AddType text/html .rhtml
2
+
3
+ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
4
+
5
+ <Files *.rhtml>
6
+ AddType application/x-httpd-knj .rhtml
7
+ Action application/x-httpd-knj "/cgi-bin/knjerb"
8
+ </Files>
@@ -0,0 +1 @@
1
+ This is where cache-files are stored for fast execution.
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ def File::realpath(path)
4
+ if File.symlink?(path)
5
+ return self.realpath(File.readlink(path))
6
+ end
7
+
8
+ return path
9
+ end
10
+
11
+ knjdir = File.dirname(File.realpath(__FILE__)) + "/../"
12
+
13
+ require knjdir + "autoload"
14
+ require knjdir + "erb/include"
15
+
16
+ $knj_eruby = KnjEruby
17
+
18
+ filename = ENV["PATH_TRANSLATED"] if ENV and ENV["PATH_TRANSLATED"]
19
+ filename = ARGV[0] if ARGV and ARGV[0]
20
+
21
+ KnjEruby.load(filename)
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby1.9
2
+
3
+ knjdir = File.dirname(File.realpath(__FILE__)) + "/../"
4
+
5
+ require knjdir + "autoload"
6
+ require knjdir + "/erb/include"
7
+
8
+ $knj_eruby = KnjEruby
9
+
10
+ filename = ENV["PATH_TRANSLATED"] if ENV and ENV["PATH_TRANSLATED"]
11
+ filename = ARGV[0] if ARGV and ARGV[0]
12
+
13
+ KnjEruby.load(filename)
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "knj/autoload"
4
+ include Knj
5
+ Os.chdir_file(__FILE__)
6
+
7
+ curtime = Time.new.to_i
8
+
9
+ Dir.new("cache").each do |filename|
10
+ if filename != "." and filename != ".." and filename != "README"
11
+ fn = "cache/#{filename}"
12
+ file = File.new(fn)
13
+ mtime = file.mtime.to_i
14
+ diftime = curtime - mtime
15
+
16
+ if diftime >= (3600 * 48)
17
+ File.delete(fn)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ def File::realpath(path)
4
+ if File.symlink?(path)
5
+ return self.realpath(File.readlink(path))
6
+ end
7
+
8
+ return path
9
+ end
10
+
11
+ require File.dirname(File.realpath(__FILE__)) + "/../autoload"
12
+
13
+ $_FCGI_COUNT = 0
14
+ require File.dirname(File.realpath(__FILE__)) + "/include"
15
+ $knj_eruby = KnjEruby
16
+ FCGI.each_cgi do |fcgi|
17
+ $_FCGI_COUNT += 1
18
+ $_CGI = fcgi
19
+ $_FCGI = fcgi
20
+
21
+ loadfp = File.dirname(__FILE__) + "/" + File.basename(__FILE__).slice(0..-6) + ".rhtml"
22
+
23
+ begin
24
+ KnjEruby.fcgi = fcgi
25
+ KnjEruby.load(loadfp)
26
+
27
+ if KnjEruby.connects["exit"]
28
+ KnjEruby.connects["exit"].each do |block|
29
+ block.call
30
+ end
31
+ end
32
+
33
+ if $_FCGI_EXIT
34
+ #Kill self! Need to start a new thread because the app as to finish. Give it 0.1 second to do that before killing it.
35
+ Thread.new do
36
+ sleep 0.5
37
+ Process.kill(9, Process.pid)
38
+ end
39
+ end
40
+ rescue Exception => e
41
+ puts e.inspect
42
+ puts e.backtrace
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby1.9
2
+
3
+ def File::realpath(path)
4
+ if File.symlink?(path)
5
+ return self.realpath(File.readlink(path))
6
+ end
7
+
8
+ return path
9
+ end
10
+
11
+ require File.dirname(File.realpath(__FILE__)) + "/../autoload"
12
+
13
+ $_FCGI_COUNT = 0
14
+ require File.dirname(File.realpath(__FILE__)) + "/include"
15
+ $knj_eruby = KnjEruby
16
+ FCGI.each_cgi do |fcgi|
17
+ $_FCGI_COUNT += 1
18
+ $_CGI = fcgi
19
+ $_FCGI = fcgi
20
+
21
+ loadfp = File.dirname(__FILE__) + "/" + File.basename(__FILE__).slice(0..-6) + ".rhtml"
22
+
23
+ begin
24
+ KnjEruby.fcgi = fcgi
25
+ KnjEruby.load(loadfp)
26
+
27
+ if KnjEruby.connects["exit"]
28
+ KnjEruby.connects["exit"].each do |block|
29
+ block.call
30
+ end
31
+ end
32
+
33
+ if $_FCGI_EXIT
34
+ #Kill self! Need to start a new thread because the app as to finish. Give it 0.1 second to do that before killing it.
35
+ Thread.new do
36
+ sleep 0.5
37
+ Process.kill(9, Process.pid)
38
+ end
39
+ end
40
+ rescue Exception => e
41
+ puts e.inspect
42
+ puts e.backtrace
43
+ end
44
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/jruby
2
+
3
+ require "fcgi"
4
+ FCGI.each_cgi do |fcgi|
5
+ print "Content-Type: text/html\n\n"
6
+ print "Hello world."
7
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/jruby
2
+
3
+ def File::realpath(path)
4
+ if File.symlink?(path)
5
+ return self.realpath(File.readlink(path))
6
+ end
7
+
8
+ return path
9
+ end
10
+
11
+ knjdir = File.dirname(File.realpath(__FILE__)) + "/../"
12
+
13
+ require knjdir + "autoload"
14
+ require "erubis"
15
+ require knjdir + "/erb/include"
16
+
17
+ $knj_eruby = KnjEruby
18
+
19
+ filename = ENV["PATH_TRANSLATED"] if ENV and ENV["PATH_TRANSLATED"]
20
+ filename = ARGV[0] if ARGV and ARGV[0]
21
+
22
+ KnjEruby.load(filename)