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,230 @@
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 member
10
+ @member = SiteMember.new(@config, self) if ! defined?(@member)
11
+ return @member
12
+ end
13
+ end
14
+
15
+ class SiteMember
16
+ include Enumerable
17
+
18
+ def initialize(config, site)
19
+ @config = config
20
+ @site = site
21
+ @quickml_member = QuickMLMember.new(@config, @site)
22
+ end
23
+
24
+ def update_group_files
25
+ @quickml_member.update_group_files
26
+ end
27
+
28
+ def exist?(user)
29
+ return true if exist_qwik_members?(user)
30
+ return true if @quickml_member.exist?(user)
31
+ false
32
+ end
33
+
34
+ #act-ring-invite.rb:125: next if @site.member.exist_qwik_members?(guest_mail)
35
+ #act-ring-new.rb:60: return 'exist' if @site.member.exist_qwik_members?(guest_mail)
36
+ def exist_qwik_members?(user)
37
+ return false if db_page.nil?
38
+ db.exist?(user)
39
+ end
40
+
41
+ def add(user, invite=nil)
42
+ db.add(user, invite)
43
+ end
44
+
45
+ def remove(user)
46
+ db.remove(user) if db_page
47
+ end
48
+
49
+ def list(obf=true)
50
+ ar = []
51
+ ar += db.hash.keys.to_a if db_page
52
+ ar += @quickml_member.list
53
+ ar = ar.uniq
54
+ if obf && @site.is_open?
55
+ ar = ar.map {|u|
56
+ MailAddress.obfuscate(u)
57
+ }
58
+ end
59
+ return ar
60
+ end
61
+
62
+ def each
63
+ list.each {|u|
64
+ yield u
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ def db_page
71
+ k = 'SiteMember'
72
+ return @site[k] if @site.exist?(k)
73
+ k = '_'+k
74
+ return @site[k] if @site.exist?(k)
75
+ return @site.create(k)
76
+ end
77
+
78
+ def db
79
+ page = db_page
80
+ return page.wikidb
81
+ end
82
+ end
83
+
84
+ class QuickMLMember # QuickML compatible
85
+ include Enumerable
86
+
87
+ def initialize(config, site)
88
+ @config = config
89
+ @site = site
90
+ @str = nil
91
+ @ar = []
92
+
93
+ check_new
94
+ end
95
+
96
+ def update_group_files
97
+ # @group_db.update_files
98
+ end
99
+
100
+ def list
101
+ check_new
102
+ @ar
103
+ end
104
+
105
+ def exist?(user)
106
+ list.include?(user)
107
+ end
108
+
109
+ private
110
+
111
+ def check_new
112
+ str = get_content
113
+ return if str == @str
114
+ @str = str
115
+ @ar = QuickMLMember.check_new_internal(@str)
116
+ end
117
+
118
+ def get_content
119
+ f = @site.path+'_GroupMembers.txt'
120
+ return f.read if f.exist?
121
+
122
+ f = @site.path+',members'
123
+ return f.read if f.exist?
124
+
125
+ return nil
126
+ end
127
+
128
+ def self.check_new_internal(str)
129
+ ar = []
130
+ return ar if str.nil?
131
+ str.each {|line|
132
+ firstchar = line[0, 1]
133
+ next if firstchar == '#' || firstchar == ';'
134
+ k, v = line.chomp.split
135
+ next if k.nil?
136
+ ar << k
137
+ }
138
+ return ar
139
+ end
140
+ end
141
+ end
142
+
143
+ if $0 == __FILE__
144
+ require 'qwik/test-common'
145
+ $test = true
146
+ end
147
+
148
+ if defined?($test) && $test
149
+ class TestSiteMember < Test::Unit::TestCase
150
+ include TestSession
151
+
152
+ alias ok assert
153
+
154
+ def test_all
155
+ user = 'user@e.com'
156
+ member = @site.member
157
+
158
+ # test_exist?
159
+ page = @site.create('_SiteMember')
160
+ ok_eq(false, member.exist?(user))
161
+ page.store(user)
162
+ ok_eq(false, member.exist?(user))
163
+ page.store(',user@e.com')
164
+ ok_eq(true, member.exist?(user))
165
+ page.store(',user@e.com,')
166
+ ok_eq(true, member.exist?(user))
167
+ page.store(',user@e.com,a')
168
+ ok_eq(true, member.exist?(user))
169
+ page.store(',user@e.com,a,')
170
+ ok_eq(true, member.exist?(user))
171
+
172
+ # test_remove
173
+ member.remove(user)
174
+ ok_eq(false, member.exist?(user))
175
+ ok_eq('', page.load)
176
+
177
+ # test_add
178
+ member.add(user)
179
+ ok_eq(true, member.exist?(user))
180
+
181
+ # test_invite
182
+ guest = 'guest@example.com'
183
+ member.add(guest, user)
184
+ ok_eq(true, member.exist?(guest))
185
+
186
+ ok_eq(",user@e.com,\n,guest@example.com,user@e.com\n", page.load)
187
+ assert(member.list.include?(user))
188
+ assert(member.list.include?(guest))
189
+ member.remove(guest)
190
+ ok_eq(true, !member.exist?(guest))
191
+
192
+ @site.delete('_SiteMember')
193
+ ok_eq(true, !member.exist?(user))
194
+ ok_eq([], member.list)
195
+
196
+ # test_quickml_member
197
+ ok_eq(true, !member.exist?(user))
198
+ store(user)
199
+ ok_eq(true, member.exist?(user))
200
+
201
+ ok_eq([user], member.list)
202
+ store('# user@e.com')
203
+ ok_eq(true, !member.exist?(user))
204
+
205
+ store('; user@e.com')
206
+ ok_eq(true, !member.exist?(user))
207
+
208
+ store('')
209
+ ok_eq(true, !member.exist?(user))
210
+ ok_eq([], member.list)
211
+
212
+ # test_obfuscate
213
+ page = @site['_SiteConfig']
214
+ assert_match(/:open:false/, page.load)
215
+ ok_eq(false, @site.is_open?)
216
+ page.store(':open:true')
217
+ ok_eq(':open:true', page.load)
218
+ ok_eq(true, @site.is_open?)
219
+
220
+ member.add(user)
221
+ member.add(guest)
222
+ assert(member.list.include?('user@e...'))
223
+ assert(member.list.include?('guest@e...'))
224
+ end
225
+
226
+ def store(content) # quickml_member
227
+ (@dir+'_GroupMembers.txt').put(content)
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,97 @@
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
+ require 'monitor'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+
9
+ module Qwik
10
+ class Site
11
+ def sitemonitor
12
+ @sitemonitor = SiteMonitor.new(@config, self) unless defined? @sitemonitor
13
+ return @sitemonitor
14
+ end
15
+ end
16
+
17
+ class SiteMonitor
18
+ MAX_LISTENER = 5
19
+
20
+ def initialize(config, site)
21
+ @config = config
22
+ @site = site
23
+
24
+ @buf = []
25
+ @buf.extend(MonitorMixin)
26
+ @empty_cond = @buf.new_cond
27
+
28
+ @listener = []
29
+ end
30
+
31
+ def shout(event)
32
+ @buf.synchronize {
33
+ @buf.push(event)
34
+ @empty_cond.broadcast
35
+ }
36
+ end
37
+
38
+ def listen(action)
39
+ len = @listener.length
40
+ # if MAX_LISTENER < len
41
+ # return
42
+ # end
43
+
44
+ @listener << action
45
+
46
+ index = @buf.length
47
+ loop {
48
+ @buf.synchronize {
49
+ @empty_cond.wait_while {
50
+ @buf[index].nil?
51
+ }
52
+ ev = @buf[index]
53
+ index += 1
54
+ yield(ev)
55
+ }
56
+ }
57
+ end
58
+ end
59
+ end
60
+
61
+ if $0 == __FILE__
62
+ require 'qwik/test-common'
63
+ $test = true
64
+ end
65
+
66
+ if defined?($test) && $test
67
+ class TestMonitor < Test::Unit::TestCase
68
+ include TestSession
69
+
70
+ def listen_one(monitor)
71
+ monitor.listen(nil) {|ev|
72
+ return ev
73
+ }
74
+ end
75
+
76
+ def test_monitors
77
+ monitor = @site.sitemonitor
78
+
79
+ t1 = Thread.new {
80
+ ev = listen_one(monitor)
81
+ ok_eq(1, ev)
82
+ }
83
+
84
+ t2 = Thread.new {
85
+ ev = listen_one(monitor)
86
+ ok_eq(1, ev)
87
+ }
88
+
89
+ sleep 0.01
90
+ monitor.shout(1)
91
+
92
+ t1.join
93
+ t2.join
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,62 @@
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 db(); @pages.db; end
10
+ def backupdb(); @pages.backupdb; end
11
+
12
+ def last_page_time; @pages.last_page_time; end
13
+ def [](k) @pages[k]; end
14
+ def exist?(k) @pages.exist?(k); end
15
+ def each(*a, &b) @pages.each(*a, &b); end
16
+ def each_all(*a, &b) @pages.each_all(*a, &b); end
17
+ def to_a(*a) @pages.to_a(*a); end
18
+ def create(k) @pages.create(k); end
19
+ def create_new(); @pages.create_new; end
20
+ def get_new_id(); @pages.get_new_id; end
21
+ def delete(k) @pages.delete(k); end
22
+ def title_list(); @pages.title_list; end
23
+ def date_list(); @pages.date_list; end
24
+ # def path(f) @pages.path(f); end
25
+ def close(); @pages.close; end
26
+ def get_by_title(t) @pages.get_by_title(t); end
27
+
28
+ def get_superpage(k)
29
+ page = self[k]
30
+ return page if page
31
+ page = self["_#{k}"]
32
+ return page if page
33
+ return nil
34
+ end
35
+ end
36
+ end
37
+
38
+ if $0 == __FILE__
39
+ require 'qwik/test-module-session'
40
+ require 'qwik/farm'
41
+ $test = true
42
+ end
43
+
44
+ if defined?($test) && $test
45
+ class TestSitePages < Test::Unit::TestCase
46
+ include TestSession
47
+
48
+ def test_all
49
+ # test_get_superpage
50
+ eq nil, @site.get_superpage('t') # Not found.
51
+ page = @site.create '_t'
52
+ eq '_t', @site.get_superpage('t').key # There is a private page.
53
+ page = @site.create 't'
54
+ eq 't', @site.get_superpage('t').key # There is a public page.
55
+
56
+ # test_get_superpage_for_super_page
57
+ eq '_SideMenu', @site.get_superpage('SideMenu').key
58
+ page = @site.create 'SideMenu'
59
+ eq 'SideMenu', @site.get_superpage('SideMenu').key
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,139 @@
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-time'
7
+
8
+ module Qwik
9
+ class Site
10
+ # ============================== plan
11
+ PLAN_RE = /\Aplan_(\d\d\d\d\d\d\d\d)\z/
12
+
13
+ def get_pages_with_date
14
+ pages = []
15
+ self.each {|page|
16
+ if PLAN_RE =~ page.key
17
+ datestr = $1
18
+ date = Time.parse(datestr).to_i
19
+ pages << [page.key, date.to_i]
20
+ next
21
+ end
22
+
23
+ =begin
24
+ tags = page.get_tags
25
+ if tags
26
+ tags.each {|tag|
27
+ date = Time.date_parse(tag)
28
+ if date
29
+ pages << [page.key, date.to_i]
30
+ end
31
+ }
32
+ end
33
+ =end
34
+ }
35
+ return pages
36
+ end
37
+
38
+ # ============================== footer
39
+ def get_footer(now)
40
+ pages = get_pages_with_date
41
+ footer = ''
42
+ footer << generate_plan(pages, now)
43
+ return footer
44
+ end
45
+
46
+ private
47
+
48
+ def generate_plan(pages, now)
49
+ return '' if pages.empty?
50
+
51
+ # Select near futer. From yesterday to 1 month in the future.
52
+ pages = plan_select_future(pages, now)
53
+ pages = plan_select_near_future(pages, now)
54
+ return '' if pages.empty?
55
+
56
+ # Sort by date.
57
+ pages = pages.sort_by {|pagekey, datei|
58
+ datei
59
+ }
60
+
61
+ str = "* Plan\n"
62
+ pages.each {|pagekey, datei|
63
+ date = Time.at(datei)
64
+ date_abbr = Time.date_abbr(now, date)
65
+
66
+ page = self[pagekey]
67
+ title = page.get_title
68
+
69
+ url = self.page_url(pagekey)
70
+
71
+ str << "- [#{date_abbr}] #{title}\n"
72
+ str << url+"\n"
73
+ }
74
+
75
+ return str
76
+ end
77
+
78
+ def plan_select_future(pages, now)
79
+ day = 60*60*24 # 1 day
80
+ nowi = now.to_i
81
+ return pages.select {|pagekey, datei|
82
+ diff = datei - nowi
83
+ -day < diff
84
+ }
85
+ end
86
+
87
+ def plan_select_near_future(pages, now)
88
+ month = 60*60*24*30 # 1 month
89
+ nowi = now.to_i
90
+ return pages.select {|pagekey, datei|
91
+ diff = datei - nowi
92
+ diff < month
93
+ }
94
+ end
95
+ end
96
+ end
97
+
98
+ if $0 == __FILE__
99
+ require 'qwik/test-common'
100
+ $test = true
101
+ end
102
+
103
+ if defined?($test) && $test
104
+ class TestSitePlan < Test::Unit::TestCase
105
+ include TestSession
106
+
107
+ def create_plan_pages(site)
108
+ page = site.create 'plan_19700101'
109
+ page.store("* t")
110
+ page = site.create 'plan_19700115'
111
+ page.store("* t")
112
+ page = site.create 'plan_19700201'
113
+ page.store("* t")
114
+ page = site.create 'plan_19710101'
115
+ page.store("* t")
116
+ end
117
+
118
+ def test_site_plan
119
+ create_plan_pages(@site)
120
+ pages = @site.get_pages_with_date
121
+ eq [["plan_19700101", -32400],
122
+ ["plan_19700115", 1177200],
123
+ ["plan_19700201", 2646000],
124
+ ["plan_19710101", 31503600]],
125
+ pages
126
+ end
127
+
128
+ def test_site_footer
129
+ res = session
130
+
131
+ eq '', @site.get_footer(Time.at(0))
132
+
133
+ create_plan_pages(@site)
134
+ eq "* Plan\n- [01-01] t\nhttp://example.com/test/plan_19700101.html\n- [01-15] t\nhttp://example.com/test/plan_19700115.html\n", @site.get_footer(Time.at(0))
135
+
136
+ eq "* Plan\n- [01-15] t\nhttp://example.com/test/plan_19700115.html\n- [02-01] t\nhttp://example.com/test/plan_19700201.html\n", @site.get_footer(Time.at(60*60*24*10)) # 10 days later.
137
+ end
138
+ end
139
+ end