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
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)