qwikdoc 0.0.1

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 (335) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/CHANGES +3 -0
  4. data/COPYING +340 -0
  5. data/Gemfile +3 -0
  6. data/README.md +10 -0
  7. data/Rakefile +10 -0
  8. data/TextFormattingRules +137 -0
  9. data/TextFormattingRules.ja +143 -0
  10. data/bin/qwikdoc +34 -0
  11. data/lib/qwik_doc.rb +15 -0
  12. data/lib/qwik_doc/hack.rb +184 -0
  13. data/qwikdoc.gemspec +26 -0
  14. data/spec/qwik_doc_spec.rb +305 -0
  15. data/spec/spec_helper.rb +12 -0
  16. data/vendor/qwik/Makefile +63 -0
  17. data/vendor/qwik/Rakefile +17 -0
  18. data/vendor/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/action.rb +325 -0
  99. data/vendor/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/config.rb +299 -0
  146. data/vendor/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/description.rb +256 -0
  154. data/vendor/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/farm.rb +283 -0
  165. data/vendor/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/group.rb +157 -0
  176. data/vendor/qwik/helper.rb +6 -0
  177. data/vendor/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/html-to-wabisabi.rb +149 -0
  179. data/vendor/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/logger.rb +115 -0
  188. data/vendor/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/mail.rb +341 -0
  193. data/vendor/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/page.rb +67 -0
  223. data/vendor/qwik/pages.rb +444 -0
  224. data/vendor/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/parser-inline.rb +273 -0
  227. data/vendor/qwik/parser.rb +350 -0
  228. data/vendor/qwik/password.rb +183 -0
  229. data/vendor/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/qp.rb +56 -0
  231. data/vendor/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/request.rb +91 -0
  244. data/vendor/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/response.rb +228 -0
  247. data/vendor/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/server.rb +252 -0
  250. data/vendor/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/site.rb +76 -0
  268. data/vendor/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/template.rb +85 -0
  272. data/vendor/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/tokenizer-inline.rb +294 -0
  308. data/vendor/qwik/tokenizer.rb +332 -0
  309. data/vendor/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/util-charset.rb +332 -0
  312. data/vendor/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/util-string.rb +203 -0
  320. data/vendor/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/version.rb +11 -0
  323. data/vendor/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/wabisabi.rb +5 -0
  335. metadata +416 -0
@@ -0,0 +1,162 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ module Qwik
8
+ class ListenerMaxExceed < StandardError; end
9
+
10
+ class Site
11
+ def event
12
+ @event = SiteEvent.new(@config, @memory, self) unless defined? @event
13
+ @event
14
+ end
15
+ end
16
+
17
+ class ServerMemory
18
+ def listener
19
+ @listener = EventListener.new(@config) unless defined? @listener
20
+ @listener
21
+ end
22
+ end
23
+
24
+ class EventListener
25
+ MAX_LISTENER = 5
26
+ TIMEOUT = 60*60
27
+
28
+ def initialize(config)
29
+ @config = config
30
+ @listener = []
31
+ end
32
+
33
+ def add_listener(action)
34
+ check_timeout
35
+ if MAX_LISTENER <= @listener.length
36
+ kickout(@listener[0], 'max_exceed')
37
+ raise ListenerMaxExceed # failed to add
38
+ end
39
+ @listener << action
40
+ end
41
+
42
+ def kickout(action, reason)
43
+ @listener.delete(action)
44
+ action.event_disconnect(reason)
45
+ end
46
+
47
+ def success(action)
48
+ @listener.delete(action)
49
+ end
50
+
51
+ def each_listener(target_sitename)
52
+ check_timeout
53
+ @listener.each {|action|
54
+ if action.get_sitename == target_sitename
55
+ yield(action)
56
+ end
57
+ }
58
+ end
59
+
60
+ def check_timeout
61
+ now = Time.now
62
+ now = Time.at(0) if $test
63
+ check_timeout_internal(@listener, now)
64
+ end
65
+
66
+ def check_timeout_internal(listener, now)
67
+ listener.each {|action|
68
+ time = action.get_start_time
69
+ if TIMEOUT < (now - time)
70
+ kickout(action, 'timeout')
71
+ end
72
+ }
73
+ end
74
+ end
75
+
76
+ class SiteEvent
77
+ def initialize(config, memory, site)
78
+ @config = config
79
+ @memory = memory
80
+ @site = site
81
+ # @sitename = @site.sitename
82
+ @listener = memory.listener
83
+ end
84
+
85
+ def add_listener(action)
86
+ #return @listener.add_listener(@sitename, action)
87
+ return @listener.add_listener(action)
88
+ end
89
+
90
+ def occurred(event)
91
+ sitename = @site.sitename
92
+
93
+ kickout = []
94
+
95
+ @listener.each_listener(sitename) {|listener|
96
+ listener.event_occurred(event)
97
+ kickout << listener
98
+ }
99
+
100
+ kickout.each {|listener|
101
+ @listener.success(listener)
102
+ }
103
+ end
104
+ end
105
+ end
106
+
107
+ if $0 == __FILE__
108
+ require 'qwik/test-common'
109
+ $test = true
110
+ end
111
+
112
+ if defined?($test) && $test
113
+ class MockAction
114
+ def initialize
115
+ @event = nil
116
+ end
117
+ attr_reader :event
118
+
119
+ def get_start_time
120
+ #return Time.at(0)
121
+ return Time.now
122
+ end
123
+
124
+ def get_sitename
125
+ return 'test'
126
+ end
127
+
128
+ def event_occurred(event)
129
+ @event = event
130
+ end
131
+
132
+ def event_disconnect(reason)
133
+ if @event.nil?
134
+ @event = reason
135
+ end
136
+ end
137
+ end
138
+
139
+ class TestSiteEvent < Test::Unit::TestCase
140
+ include TestSession
141
+
142
+ def test_all
143
+ mock = MockAction.new
144
+
145
+ event = @site.event
146
+
147
+ # listener
148
+ event.add_listener(mock)
149
+ t = Thread.new {
150
+ while mock.event.nil?
151
+ sleep 0.1
152
+ end
153
+ ok_eq(1, mock.event)
154
+ }
155
+
156
+ # producer
157
+ event.occurred(1)
158
+
159
+ t.join
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,86 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/util-pathname'
7
+ require 'qwik/page-files'
8
+
9
+ module Qwik
10
+ class Site
11
+ def files(k = 'FrontPage')
12
+ page = self[k]
13
+ return nil if page.nil?
14
+ page.files = PageFiles.new(@path.to_s, k) if page.files.nil?
15
+ return page.files
16
+ end
17
+
18
+ def files_total
19
+ t = 0
20
+ self.each {|page|
21
+ # force to create page.files object for each page
22
+ # to count files in unaccecced pages after server rebooted
23
+ t+= files(page.key).total
24
+ }
25
+ return t
26
+ end
27
+
28
+ # obsolete
29
+ def attach
30
+ @attach = SiteAttach.new(@path.to_s) unless defined? @attach
31
+ return @attach
32
+ end
33
+ end
34
+
35
+ # obsolete
36
+ class SiteAttach
37
+ include Enumerable
38
+ include AttachModule
39
+
40
+ def initialize(site_dir)
41
+ @attach_path = site_dir.path+'.attach'
42
+ end
43
+ end
44
+ end
45
+
46
+ if $0 == __FILE__
47
+ require 'qwik/testunit'
48
+ require 'qwik/test-module-path'
49
+ $test = true
50
+ end
51
+
52
+ if defined?($test) && $test
53
+ class TestSiteAttach < Test::Unit::TestCase
54
+ def test_site_attach
55
+ dir = '.test/'.path
56
+ dir.setup
57
+ attach = Qwik::SiteAttach.new(dir)
58
+
59
+ d = dir+'.attach'
60
+ d.teardown if d.exist?
61
+
62
+ ok_eq(false, attach.exist?('t.txt'))
63
+
64
+ # test put
65
+ attach.fput('t.txt', 't')
66
+ ok_eq(true, attach.exist?('t.txt'))
67
+
68
+ # test get
69
+ path = attach.path('t.txt')
70
+ ok_eq('.test/.attach/t.txt', path.to_s)
71
+ ok_eq('t', path.read)
72
+
73
+ # test delete
74
+ attach.delete('t.txt')
75
+ ok_eq(false, attach.exist?('t.txt'))
76
+
77
+ # test_security
78
+ # path = attach.path('t/t.txt') # ok
79
+ # assert_raise(Qwik::CanNotAccessParentDirectory) {
80
+ # path = attach.path('../t.txt') # bad
81
+ # }
82
+
83
+ dir.teardown
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,103 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/group-db'
7
+ require 'qwik/group-config'
8
+
9
+ module Qwik
10
+ class Site
11
+ ML_LIFE_TIME_ALLOWANCE = 60*60*24*31*2 # 2 months
12
+
13
+ def forward?
14
+ return @group_config.forward?
15
+ end
16
+
17
+ def permanent?
18
+ return @group_config.permanent?
19
+ end
20
+
21
+ def inactive?(now = Time.now)
22
+ return false if @group_config.forward? || @group_config.permanent?
23
+
24
+ log = @memory[:bury_log]
25
+
26
+ last_article_time = @pages.last_article_time
27
+ if last_article_time.nil? # No file here.
28
+ unless $test
29
+ log.info("site #{@sitename}: last_article_time is nil") if log
30
+ end
31
+ return true
32
+ end
33
+
34
+ ml_life_time = self.siteconfig['ml_life_time'].to_i
35
+ ml_life_time += ML_LIFE_TIME_ALLOWANCE
36
+
37
+ result = last_article_time.to_i + ml_life_time.to_i <= now.to_i
38
+ if result
39
+ ymdhms = last_article_time.strftime("%Y-%m-%d %H:%M:%S")
40
+ unless $test
41
+ log.info("site #{@sitename}: last_article_time is #{ymdhms}") if log
42
+ end
43
+ end
44
+ return result
45
+ end
46
+
47
+ def unconfirmed?
48
+ member.list.empty? &&
49
+ @pages.exist?('_GroupWaitingMembers') &&
50
+ @pages.exist?('_GroupWaitingMessage')
51
+ end
52
+
53
+ private
54
+
55
+ def init_group_config
56
+ # in group-db.rb
57
+ db = QuickML::GroupDB.new(@config.sites_dir.to_s, @sitename)
58
+ db.set_site(self)
59
+ # in group-config.rb
60
+ @group_config = QuickML::GroupConfig.new(db)
61
+ end
62
+ end
63
+ end
64
+
65
+ if $0 == __FILE__
66
+ require 'qwik/test-module-session'
67
+ require 'qwik/farm'
68
+ $test = true
69
+ end
70
+
71
+ if defined?($test) && $test
72
+ class TestSiteML < Test::Unit::TestCase
73
+ include TestSession
74
+
75
+ def check_a_site(site)
76
+ # At the first, there is no file here.
77
+ ok_eq(true, site.inactive?(Time.at(0)))
78
+
79
+ # Create a new page with time 0.
80
+ page = site.create_new
81
+ page.put_with_time('a', 0)
82
+ ok_eq(false, site.inactive?(Time.at(0)))
83
+
84
+ # Change the life time to 0.
85
+ page = site['_SiteConfig']
86
+ page.put_with_time(':ml_life_time:0', 0) # Die soon.
87
+ ok_eq(true, site.inactive?(Time.at(0 + Qwik::Site::ML_LIFE_TIME_ALLOWANCE)))
88
+
89
+ # Set GroupConfig to forward mode.
90
+ page = site.create('_GroupConfig')
91
+ page.put_with_time(':forward:true', 0) # forward mode.
92
+ ok_eq(false, site.inactive?(Time.at(0)))
93
+ end
94
+
95
+ def test_all
96
+ # test_inactive
97
+ check_a_site(@site)
98
+
99
+ # test_inactive_top_site
100
+ check_a_site(@memory.farm.get_top_site)
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,47 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ module Qwik
8
+ class Site
9
+ def index
10
+ return @pages.index
11
+ end
12
+
13
+ def isearch(query)
14
+ index = self.index
15
+ return if index.nil?
16
+ return index.search(query)
17
+ end
18
+
19
+ def isearch_parse_query(query)
20
+ return query.strip.split
21
+ end
22
+ end
23
+ end
24
+
25
+ if $0 == __FILE__
26
+ require 'qwik/test-common'
27
+ $test = true
28
+ end
29
+
30
+ if defined?($test) && $test
31
+ class TestSiteIndex < Test::Unit::TestCase
32
+ include TestSession
33
+
34
+ def test_all
35
+ res = session
36
+
37
+ page = @site.create_new
38
+ page.store('This is a test.')
39
+ page = @site.create_new
40
+ page.store('This is a test, too.')
41
+
42
+ # ok_eq(['1', '2'], @site.isearch('test'))
43
+ # ok_eq(['2'], @site.isearch('too'))
44
+ # ok_eq([], @site.isearch('nosuch'))
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,64 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ module Qwik
8
+ class Site
9
+ def sitelog
10
+ @sitelog = SiteLog.new(@config, self) unless defined? @sitelog
11
+ @sitelog
12
+ end
13
+
14
+ def log(time, user, cmd, pagename)
15
+ sitelog.add(time, user, cmd, pagename)
16
+ end
17
+ end
18
+
19
+ class SiteLog
20
+ def initialize(config, site)
21
+ @config = config
22
+ @site = site
23
+ end
24
+
25
+ def add(t, user, cmd, pagename)
26
+ dbkey('_SiteLog' ).add(t, user, cmd, pagename)
27
+ dbkey('_SiteChanged').add(t, user, cmd, pagename)
28
+ end
29
+
30
+ def list
31
+ dbkey('_SiteLog').hash.sort
32
+ end
33
+
34
+ private
35
+
36
+ def dbkey(key)
37
+ page = @site[key]
38
+ page = @site.create(key) if page.nil?
39
+ page.wikidb
40
+ end
41
+ end
42
+ end
43
+
44
+ if $0 == __FILE__
45
+ require 'qwik/test-module-session'
46
+ $test = true
47
+ end
48
+
49
+ if defined?($test) && $test
50
+ class TestSiteLog < Test::Unit::TestCase
51
+ include TestSession
52
+
53
+ def test_sitelog_unit
54
+ sitelog = @site.sitelog
55
+ sitelog.add(0, 'user@e.com', 'save', '1')
56
+ ok_eq(",0,user@e.com,save,1\n", @site['_SiteLog'].load)
57
+ sitelog.add(0, nil, 'save', '1')
58
+ ok_eq(",0,user@e.com,save,1\n,0,,save,1\n", @site['_SiteLog'].load)
59
+
60
+ # test_sitelog_session
61
+ # not yet
62
+ end
63
+ end
64
+ end