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,56 @@
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
+ module GetText
9
+ def set_catalog (catalog)
10
+ @gettext_catalog = catalog
11
+ end
12
+
13
+ def gettext (text)
14
+ return text if ! defined?(@gettext_catalog) || @gettext_catalog.nil?
15
+ return @gettext_catalog[text] || text
16
+ end
17
+
18
+ alias :_ :gettext
19
+ end
20
+ end
21
+
22
+ if $0 == __FILE__
23
+ require 'qwik/testunit'
24
+ require 'qwik/catalog-factory'
25
+ $test = true
26
+ end
27
+
28
+ if defined?($test) && $test
29
+ class MockGetText
30
+ include Qwik::GetText
31
+
32
+ def test_all(t)
33
+ # $KCODE = 's'
34
+
35
+ # test_gettext
36
+ t.assert_equal 'hello', gettext('hello')
37
+
38
+ # test_set_catalog
39
+ cf = Qwik::CatalogFactory.new
40
+ cf.load_all_here('catalog-??.rb')
41
+ catalog_ja = cf.get_catalog('ja')
42
+ set_catalog(catalog_ja)
43
+
44
+ # test_gettext_ja
45
+ t.assert_equal '����ɂ���', gettext('hello')
46
+ t.assert_equal '����ɂ���', _('hello')
47
+ end
48
+ end
49
+
50
+ class TestMockGetText < Test::Unit::TestCase
51
+ def test_all
52
+ mock = MockGetText.new
53
+ mock.test_all(self)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,157 @@
1
+ #
2
+ # Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
3
+ # Copyright (C) 2003-2006 Kouichirou Eto
4
+ # All rights reserved.
5
+ # This is free software with ABSOLUTELY NO WARRANTY.
6
+ #
7
+ # You can redistribute it and/or modify it under the terms of
8
+ # the GNU General Public License version 2.
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+ require 'qwik/group-db'
13
+
14
+ module QuickML
15
+ class Group
16
+ def newly_created?
17
+ return ! @db.exist?(:Members)
18
+ end
19
+
20
+ private
21
+
22
+ # ==================== Count
23
+ def init_count
24
+ @count = Group.load_count(@db)
25
+ end
26
+
27
+ def self.load_count(db)
28
+ return 0 if ! db.exist?(:Count)
29
+ content = db.get(:Count)
30
+ return (content.to_a.first || '1').chomp.to_i
31
+ end
32
+
33
+ def inc_count
34
+ @count += 1
35
+ @db.put(:Count, @count)
36
+ end
37
+
38
+ # ==================== Charset
39
+ def init_charset
40
+ @charset = Group.load_charset(@db)
41
+ end
42
+
43
+ def self.load_charset(db)
44
+ return nil if ! db.exist?(:Charset)
45
+ return parse_charset(db.get(:Charset))
46
+ end
47
+
48
+ def self.parse_charset(content)
49
+ return (content.to_a.first || '').chomp
50
+ end
51
+
52
+ def save_charset(charset)
53
+ return if charset.nil?
54
+ @db.put(:Charset, charset+"\n")
55
+ end
56
+
57
+ # ==================== Alertedp
58
+ def alerted?
59
+ return @db.exist?(:Alerted)
60
+ end
61
+
62
+ def close_alertedp_file
63
+ @db.put(:Alerted, '')
64
+ end
65
+
66
+ def remove_alertedp_file
67
+ @db.delete(:Alerted)
68
+ end
69
+ end
70
+ end
71
+
72
+ if $0 == __FILE__
73
+ require 'qwik/group'
74
+ require 'qwik/test-module-ml'
75
+ $test = true
76
+ end
77
+
78
+ if defined?($test) && $test
79
+ class TestGroupConditions < Test::Unit::TestCase
80
+ include TestModuleML
81
+
82
+ def setup_group
83
+ return QuickML::Group.new(@ml_config, 'test@example.com')
84
+ end
85
+
86
+ def test_all
87
+ c = QuickML::Group
88
+
89
+ group = setup_group
90
+
91
+ t_make_readable(QuickML::Group, :db)
92
+
93
+ # ==================== Conditions.
94
+ # test_newly_created?
95
+ ok_eq(true, group.newly_created?)
96
+
97
+ # ==================== Count
98
+ # test_init_count
99
+ t_make_public(QuickML::Group, :init_count)
100
+ group.init_count
101
+
102
+ t_make_readable(QuickML::Group, :count)
103
+ ok_eq(0, group.count)
104
+ ok_eq(nil, group.db.get(:Count))
105
+
106
+ # test_inc_count
107
+ t_make_public(QuickML::Group, :inc_count)
108
+ group.inc_count
109
+ ok_eq(1, group.count)
110
+ ok_eq('1', group.db.get(:Count))
111
+
112
+ # test_load_count
113
+ ok_eq(1, c.load_count(group.db))
114
+ group.inc_count
115
+ ok_eq(2, c.load_count(group.db))
116
+
117
+ # ==================== Charset
118
+ # test_init_charset
119
+ t_make_public(QuickML::Group, :init_charset)
120
+ group.init_charset
121
+
122
+ t_make_readable(QuickML::Group, :charset)
123
+ ok_eq(nil, group.charset)
124
+
125
+ # test_parse_charset
126
+ ok_eq('', c.parse_charset(''))
127
+ ok_eq('t', c.parse_charset("t\n"))
128
+ ok_eq('t', c.parse_charset("t\ns\n"))
129
+ ok_eq('iso-2022-jp', c.parse_charset("iso-2022-jp\n"))
130
+
131
+ # test_save_charset
132
+ t_make_public(QuickML::Group, :save_charset)
133
+ group.save_charset('iso-2022-jp')
134
+ ok_eq("iso-2022-jp\n", group.db.get(:Charset))
135
+ group.init_charset
136
+ ok_eq('iso-2022-jp', group.charset)
137
+
138
+ # test_load_charset
139
+ ok_eq('iso-2022-jp', c.load_charset(group.db))
140
+
141
+ # ==================== Alertedp
142
+ # test_alerted?
143
+ t_make_public(QuickML::Group, :alerted?)
144
+ ok_eq(false, group.alerted?)
145
+
146
+ # test_close_alertedp_file
147
+ t_make_public(QuickML::Group, :close_alertedp_file)
148
+ group.close_alertedp_file
149
+ ok_eq(true, group.alerted?)
150
+
151
+ # test_remove_alertedp_file
152
+ t_make_public(QuickML::Group, :remove_alertedp_file)
153
+ group.remove_alertedp_file
154
+ ok_eq(false, group.alerted?)
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,247 @@
1
+ #
2
+ # Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
3
+ # Copyright (C) 2003-2006 Kouichirou Eto
4
+ # All rights reserved.
5
+ # This is free software with ABSOLUTELY NO WARRANTY.
6
+ #
7
+ # You can redistribute it and/or modify it under the terms of
8
+ # the GNU General Public License version 2.
9
+ #
10
+
11
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
12
+ require 'qwik/group-db'
13
+
14
+ module QuickML
15
+ class Group
16
+ def forward?
17
+ return @group_config.forward?
18
+ end
19
+
20
+ def group_config_check_exist
21
+ @group_config.check_exist
22
+ end
23
+
24
+ def get_max_members
25
+ return @group_config[:max_members]
26
+ end
27
+
28
+ private
29
+
30
+ def init_group_config
31
+ @group_config = GroupConfig.new(@db)
32
+ group_config = GroupConfig.get_group_config(@config)
33
+ @group_config.set_default(group_config)
34
+ @group_config.write
35
+ end
36
+ end
37
+
38
+ class GroupConfig
39
+ DefaultConfig = {
40
+ :auto_unsubscribe_count => nil,
41
+ :max_mail_length => nil,
42
+ :max_members => nil,
43
+ :ml_alert_time => nil,
44
+ :ml_life_time => nil,
45
+ :forward => false,
46
+ :permanent => false,
47
+ :unlimited => false,
48
+ }
49
+
50
+ KEYS = DefaultConfig.keys.map {|s| s.to_s }.sort.map {|k| k.intern }
51
+
52
+ def initialize(db)
53
+ @db = db
54
+ @default = nil
55
+ @group_config = {}
56
+ @group_config.update(DefaultConfig)
57
+ @content = nil
58
+ read
59
+ end
60
+
61
+ def set_default(default)
62
+ @default = default
63
+ end
64
+
65
+ def check_exist
66
+ write if ! exist?
67
+ end
68
+
69
+ def exist?
70
+ return @db.exist?(:Config)
71
+ end
72
+
73
+ def [](key)
74
+ read
75
+ return @group_config[key]
76
+ end
77
+
78
+ def forward?
79
+ return true if @db.exist?(:Forward)
80
+ return true if self[:forward]
81
+ return false
82
+ end
83
+
84
+ def permanent?
85
+ return true if @db.exist?(:Permanent)
86
+ return true if self[:permanent]
87
+ return false
88
+ end
89
+
90
+ def unlimited?
91
+ return true if @db.exist?(:Unlimited)
92
+ return true if self[:unlimited]
93
+ return false
94
+ end
95
+
96
+ def write
97
+ raise 'must have default' if @default.nil?
98
+ GroupConfig.set_default(@default, @group_config)
99
+ content = GroupConfig.generate(@group_config)
100
+ return if content == @content # Do nothing.
101
+ @db.put(:Config, content)
102
+ @content = content
103
+ end
104
+
105
+ private
106
+
107
+ def read
108
+ content = @db.get(:Config)
109
+ return if content && content == @content # Do nothing.
110
+ @content = content
111
+ config = GroupConfig.parse_hash(@content)
112
+ @group_config.update(config)
113
+ return
114
+ end
115
+
116
+ def self.parse_hash(str)
117
+ config = {}
118
+ return config if str.nil?
119
+ str.each {|line|
120
+ k = v = nil
121
+ line.chomp!
122
+ if /\A\s+:([a-z_]+) => (\d+),\z/ =~ line
123
+ k = $1.intern
124
+ v = $2.to_i
125
+ config[k] = v
126
+ elsif /\A:([a-z_]+):(\d+)\z/ =~ line
127
+ k = $1.intern
128
+ v = $2.to_i
129
+ config[k] = v
130
+ elsif /\A:([a-z_]+):([a-z]+)\z/ =~ line
131
+ k = $1.intern
132
+ v = $2
133
+ v = true if v == 'true'
134
+ v = false if v == 'false'
135
+ config[k] = v
136
+ end
137
+ }
138
+ return config
139
+ end
140
+
141
+ def self.set_default(default, group_config)
142
+ default.each {|k, v|
143
+ group_config[k] ||= v
144
+ }
145
+ end
146
+
147
+ def self.generate(config)
148
+ return KEYS.map {|k|
149
+ ":#{k}:#{config[k]}\n"
150
+ }.join
151
+ end
152
+
153
+ def self.get_group_config(config)
154
+ return {
155
+ :auto_unsubscribe_count => config[:auto_unsubscribe_count],
156
+ :max_mail_length => config[:max_ml_mail_length] ||
157
+ config[:max_mail_length],
158
+ :max_members => config[:max_members],
159
+ :ml_alert_time => config[:ml_alert_time],
160
+ :ml_life_time => config[:ml_life_time],
161
+ }
162
+ end
163
+
164
+ end
165
+ end
166
+
167
+ if $0 == __FILE__
168
+ require 'qwik/farm'
169
+ require 'qwik/server-memory'
170
+ require 'qwik/test-module-session'
171
+ require 'qwik/config'
172
+ $test = true
173
+ end
174
+
175
+ if defined?($test) && $test
176
+ class TestGroupConfig < Test::Unit::TestCase
177
+ include TestSession
178
+
179
+ def test_class_method
180
+ c = QuickML::GroupConfig
181
+
182
+ # test_parse_hash
183
+ ok_eq({}, c.parse_hash(''))
184
+ ok_eq({:max_members=>20}, c.parse_hash('{
185
+ :max_members => 20,
186
+ }'))
187
+ m = c.parse_hash(':max_members:20')
188
+ ok_eq({:max_members=>20}, m)
189
+ m = c.parse_hash(':forward:true')
190
+ ok_eq({:forward=>true}, m)
191
+
192
+ # test_generate
193
+ ok_eq(":auto_unsubscribe_count:\n:forward:\n:max_mail_length:\n:max_members:\n:ml_alert_time:\n:ml_life_time:\n:permanent:\n:unlimited:\n", c.generate({}))
194
+ end
195
+
196
+ def test_all
197
+ sites_dir = '.test/data/'
198
+ group_name = 'test'
199
+ db = QuickML::GroupDB.new(sites_dir, group_name)
200
+ db.set_site(@site)
201
+
202
+ config = Qwik::Config.new
203
+ group_config = QuickML::GroupConfig.new(db)
204
+ default = QuickML::GroupConfig.get_group_config(config)
205
+ group_config.set_default(default)
206
+ group_config.write
207
+
208
+ # ==================== GroupConfig
209
+ # test_exist?
210
+ ok_eq(true, group_config.exist?)
211
+
212
+ # test_[]
213
+ ok_eq(100, group_config[:max_members])
214
+
215
+ # test_forward?
216
+ ok_eq(false, group_config.forward?)
217
+
218
+ # test_permanent?
219
+ ok_eq(false, group_config.permanent?)
220
+
221
+ # test_unlimited?
222
+ ok_eq(false, group_config.unlimited?)
223
+
224
+ # test_write
225
+ group_config.instance_eval {
226
+ @group_config[:max_members] = 10
227
+ }
228
+ ok_eq(10, group_config[:max_members])
229
+ group_config.write
230
+
231
+ # test_read
232
+ t_make_public(QuickML::GroupConfig, :read)
233
+ group_config.read
234
+ ok_eq(10, group_config[:max_members])
235
+
236
+ str = db.get(:Config)
237
+ ok_eq(":auto_unsubscribe_count:5\n:forward:false\n:max_mail_length:102400\n:max_members:10\n:ml_alert_time:2073600\n:ml_life_time:2678400\n:permanent:false\n:unlimited:false\n", str)
238
+
239
+ # test_forward?
240
+ ok_eq(false, group_config.forward?)
241
+
242
+ page = @site['_GroupConfig']
243
+ page.put_with_time(':forward:true', Time.at(Time.now.to_i+10))
244
+ ok_eq(true, group_config.forward?)
245
+ end
246
+ end
247
+ end