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,252 @@
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/config'
7
+ require 'qwik/server-memory'
8
+ require 'qwik/server-webrick'
9
+ require 'qwik/logger'
10
+
11
+ require 'qwik/action'
12
+ require 'qwik/periodic'
13
+ require 'qwik/request'
14
+ require 'qwik/response'
15
+
16
+ require 'qwik/util-pid'
17
+ require 'qwik/qp'
18
+
19
+ require 'logger'
20
+
21
+ module Qwik
22
+ class Server < WEBrick::HTTPServer
23
+ include PidModule
24
+
25
+ def initialize(qconfig)
26
+ @qconfig = qconfig
27
+ @memory = ServerMemory.new(@qconfig)
28
+
29
+ # init_trap
30
+ trap(:TERM) { shutdown; }
31
+ trap(:INT) { shutdown; }
32
+ if Signal.list.key?("HUP")
33
+ trap(:HUP) { reopen; }
34
+ end
35
+
36
+ init_directory(@qconfig)
37
+
38
+ webrick_conf, @pidfile = init_webrick_conf(@qconfig, @memory)
39
+
40
+ init_bury_logger
41
+
42
+ super(webrick_conf)
43
+
44
+ mount('/', Servlet) # Delegate all accesses.
45
+ end
46
+ attr_reader :memory
47
+
48
+ def init_directory(config)
49
+ config.cache_dir.path.check_directory
50
+ config.sites_dir.path.check_directory
51
+ (config.sites_dir.path+config.default_sitename).check_directory
52
+ config.etc_dir.path.check_directory
53
+ config.grave_dir.path.check_directory
54
+ config.log_dir.path.check_directory
55
+ end
56
+
57
+ def init_webrick_conf(config, memory)
58
+ # qwik-error.log
59
+ web_error_log = (config.log_dir.path + Logger::WEB_ERROR_LOG).to_s
60
+ pidfile = config.web_pid_file # qwikweb.pid
61
+ servertype = WEBrick::Daemon
62
+ if config.debug
63
+ pidfile += '-d'
64
+ servertype = WEBrick::SimpleServer
65
+ web_error_log = $stdout
66
+ web_error_log = 'qwik-error.log' if config.test
67
+ end
68
+
69
+ # qwik-access.log
70
+ log = config.log_dir.path + Logger::WEB_ACCESS_LOG
71
+ logger = Qwik::Logger.new(log.to_s)
72
+ logger.verbose = true if config.debug && ! config.test
73
+ memory[:qwik_access_log] = logger
74
+
75
+ web_error_logger = WEBrick::Log.new(web_error_log, WEBrick::Log::INFO)
76
+ memory[:logger] = web_error_logger
77
+
78
+ access_log_file = (config.log_dir.path + Logger::ACCESS_LOG).to_s
79
+ accesslog_logger =
80
+ [[WEBrick::BasicLog.new(access_log_file, WEBrick::Log::INFO),
81
+ WEBrick::AccessLog::COMBINED_LOG_FORMAT]]
82
+
83
+ server = Server.server_name
84
+ #server = "Apache/2.0.54 (Unix) #{server}" # Imitate Apache server
85
+
86
+ webrick_config = {
87
+ :HostnameLookups => false,
88
+ :BindAddress => config.bind_address,
89
+ :Port => config.web_port.to_i,
90
+ :Logger => web_error_logger,
91
+ :ServerType => servertype,
92
+ :StartCallback => Proc.new { start_server; },
93
+ :StopCallback => Proc.new { stop_server; },
94
+ :AccessLog => accesslog_logger,
95
+ :ServerSoftware => server,
96
+ :QwikConfig => config,
97
+ :QwikMemory => memory,
98
+ #:MaxClients => 100,
99
+ #:WEBrickThread => false, # test
100
+ }
101
+
102
+ return webrick_config, pidfile
103
+ end
104
+
105
+ # callback from :StartCallback
106
+ def start_server
107
+ write_pid_file(@pidfile)
108
+
109
+ threads = []
110
+ threads << SweepThread.new(@qconfig, @memory)
111
+ threads << WeeklySendReportThread.new(@memory)
112
+ threads << DailySendReportThread.new(@memory)
113
+ threads << HourlySendReportThread.new(@memory)
114
+ @memory[:threads] = threads
115
+ threads.each {|th|
116
+ t = Thread.new {
117
+ th.start
118
+ }
119
+ t.abort_on_exception = true
120
+ }
121
+
122
+ #qp @qconfig.debug
123
+ if @qconfig.debug
124
+ require 'qwik/autoreload'
125
+ AutoReload.start(1, true, 'Web') # auto reload every sec.
126
+ end
127
+ end
128
+
129
+ # callback from :StopCallback
130
+ def stop_server
131
+ remove_pid_file(@pidfile)
132
+ end
133
+
134
+ def reopen
135
+ # qwik-access.log is an instance of Qwik::Logger
136
+ logger = @memory[:qwik_access_log]
137
+ logger.reopen
138
+
139
+ # qwik-error.log is an instance of WEBrick::Log
140
+ logger = @memory[:logger]
141
+ logger.reopen
142
+
143
+ # access.log is an instance of WEBrick::BasicLog
144
+ webrick_accesslog = @config[:AccessLog][0][0]
145
+ webrick_accesslog.reopen
146
+ end
147
+
148
+ def init_bury_logger
149
+ log_file = (@qconfig.log_dir.path + "bury.log").to_s
150
+ # '::Logger' means standard library class.
151
+ log = ::Logger.new(log_file, 'monthly')
152
+ log.level = ::Logger::INFO
153
+ @memory[:bury_log] = log
154
+ end
155
+
156
+ def self.version
157
+ return VERSION
158
+ end
159
+
160
+ def self.server_name
161
+ return "qwikWeb/#{VERSION}+#{RELEASE_DATE}"
162
+ end
163
+ end
164
+
165
+ class Servlet < WEBrick::HTTPServlet::AbstractServlet
166
+ def do_GET(request, response)
167
+ start_time = Time.now
168
+
169
+ config = @server[:QwikConfig]
170
+ memory = @server[:QwikMemory]
171
+
172
+ req = Request.new(config)
173
+ req.parse_webrick(request)
174
+
175
+ res = Response.new(config)
176
+ res.set_webrick(response)
177
+
178
+ action = Action.new
179
+ action.init(config, memory, req, res)
180
+ action.run
181
+
182
+ res.setback(response)
183
+
184
+ diff = Time.now - start_time
185
+ diffsec = sprintf("%.2f", diff)
186
+
187
+ if response.body.is_a? String
188
+ response.body.gsub!(/__qwik_page_generate_time__/, diffsec)
189
+ end
190
+
191
+ qlog = memory[:qwik_access_log]
192
+ logline = Logger.format_log_line(req, response, diff)
193
+ if qlog && ! Logger::IGNORE_ACTION.include?(req.plugin)
194
+ qlog.take_log(logline) # Take a log.
195
+ end
196
+
197
+ if res.basicauth
198
+ proc = res.basicauth
199
+ WEBrick::HTTPAuth::basic_auth(request, response, 'qwik', &proc)
200
+ end
201
+ end
202
+
203
+ alias do_POST do_GET
204
+ end
205
+ end
206
+
207
+ if $0 == __FILE__
208
+ require 'qwik/test-common'
209
+ require 'qwik/testunit'
210
+ require 'qwik/act-theme'
211
+ $test = true
212
+ end
213
+
214
+ if defined?($test) && $test
215
+ require 'qwik/test-module-server'
216
+
217
+ class TestServer < Test::Unit::TestCase
218
+ include TestServerModule
219
+
220
+ def test_frontpage
221
+ return if $0 != __FILE__ # Only for unit test.
222
+ server, config, memory, wreq, wres = setup_server
223
+ wreq.path = '/'
224
+ wres = session(config, memory, wreq, wres)
225
+ ok_eq("text/html; charset=Shift_JIS", wres['content-type'])
226
+ ok_eq(?<, wres.body[0])
227
+
228
+ teardown_server(server)
229
+ end
230
+
231
+ def test_css
232
+ return if $0 != __FILE__ # Only for unit test.
233
+ server, config, memory, wreq, wres = setup_server
234
+ wreq.path = '/.theme/css/base.css'
235
+ wres = session(config, memory, wreq, wres)
236
+ ok_eq('text/css', wres['content-type'])
237
+ assert_match(%r|^/*|, wres.body)
238
+ teardown_server(server)
239
+ end
240
+
241
+ def test_head
242
+ return if $0 != __FILE__ # Only for unit test.
243
+ server, config, memory, wreq, wres = setup_server
244
+ wreq.path = '/'
245
+ wreq.request_method = 'HEAD'
246
+ wres = session(config, memory, wreq, wres)
247
+ ok_eq("text/html; charset=Shift_JIS", wres['content-type'])
248
+ ok_eq(?<, wres.body[0])
249
+ teardown_server(server)
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,149 @@
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 siteconfig
10
+ # @siteconfig = SiteConfig.new(@config, self) unless defined? @siteconfig
11
+ #return @siteconfig
12
+ return SiteConfig.new(@config, self)
13
+ end
14
+
15
+ def is_open?
16
+ return (siteconfig['open'] == 'true')
17
+ end
18
+
19
+ def is_blessed?
20
+ file = @path + ",blessed"
21
+ return file.exist?
22
+ end
23
+ end
24
+
25
+ class SiteConfig
26
+ def initialize(config, site)
27
+ @config = config
28
+ @site = site
29
+
30
+ @default = default_config
31
+
32
+ page = get_page
33
+
34
+ @db = page.wikidb
35
+ end
36
+
37
+ def get_page
38
+ #page = @site.get_superpage('SiteConfig')
39
+ page = @site['_SiteConfig']
40
+ return page if page
41
+ return @site.create('_SiteConfig')
42
+ end
43
+
44
+ def [](k)
45
+ v = @db[k]
46
+ return @default[k] if v.nil?
47
+ return v
48
+ end
49
+
50
+ private
51
+
52
+ # FIXME: Read default site config from super/_SiteConfig.txt
53
+ def default_config
54
+ {
55
+ 'open' => 'false',
56
+ 'theme' => 'qwikgreen',
57
+ 'sitename' => '',
58
+ 'aid' => 'q02-22', # amazon associate id
59
+ 'ml_life_time' => (60 * 60 * 24 * 31).to_s, # 1 month
60
+ 'reportmail' => 'hourly',
61
+ 'reportfrom' => '',
62
+ 'titlelink' => 'false',
63
+ 'redirect' => 'false',
64
+ 'siteurl' => '',
65
+ 'siteml' => '',
66
+ 'max_file_size' => (10 * 1024 * 1024).to_s, # 10MB
67
+ 'page_title_first'=> 'true',
68
+ }
69
+ end
70
+
71
+ =begin
72
+ # Read default site config from super/_SiteConfig.txt
73
+ def read_default_config
74
+ dir = @config.super_dir.path
75
+ str = (dir + '_SiteConfig.txt').read
76
+ array = WikiDB.parse(str)
77
+ hash = array.to_hash
78
+ return hash
79
+ end
80
+ =end
81
+ end
82
+ end
83
+
84
+ if $0 == __FILE__
85
+ require 'qwik/test-module-session'
86
+ require 'qwik/site'
87
+ require 'qwik/farm'
88
+ $test = true
89
+ end
90
+
91
+ if defined?($test) && $test
92
+ class TestSiteConfig < Test::Unit::TestCase
93
+ include TestSession
94
+
95
+ def test_is_open?
96
+ eq false, @site.is_open?
97
+ page = @site.create '_SiteConfig'
98
+ page.store ':open:true'
99
+ eq true, @site.is_open?
100
+ page.store ':open:false'
101
+ eq false, @site.is_open?
102
+ @site.delete '_SiteConfig'
103
+ eq false, @site.is_open?
104
+ end
105
+
106
+ def test_siteconfig
107
+ page = @site.create '_SiteConfig'
108
+
109
+ # test_theme
110
+ assert_instance_of String, @site.siteconfig['theme']
111
+ page.store(':theme:qwik')
112
+
113
+ # test_sitename
114
+ # eq 'example.com', @site.siteconfig['sitename']
115
+ # eq 'example.com/test', @site.title
116
+ page.store ':sitename:TestSite'
117
+ eq 'TestSite', @site.siteconfig['sitename']
118
+ eq 'TestSite', @site.title
119
+
120
+ # test_title
121
+ page = @site.create 'TestPage'
122
+ eq 'TestPage', page.get_title
123
+ # eq 'TestPage - TestSite', @site.title('TestPage')
124
+ eq 'TestSite', @site.title
125
+
126
+ page = @site.create '1'
127
+ eq '1', page.get_title
128
+ # eq '1 - TestSite', @site.title('1')
129
+ page.store('* TestTitle')
130
+ # eq 'TestTitle - TestSite', @site.title('1')
131
+
132
+ # test_bless
133
+ is false, @site.is_blessed?
134
+ file = @site.path + ",blessed"
135
+ file.write("")
136
+ is true, @site.is_blessed?
137
+ end
138
+
139
+ def test_siteconfig_class
140
+ siteconfig = @site.siteconfig
141
+
142
+ assert_equal "#<Page:_SiteConfig>", siteconfig.get_page.inspect
143
+
144
+ assert_equal 'false', siteconfig['open']
145
+
146
+ assert_equal '10485760', siteconfig['max_file_size']
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,136 @@
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 sitedb
10
+ @sitedb = SiteDB.new(@config, self) unless defined? @sitedb
11
+ return @sitedb
12
+ end
13
+ end
14
+
15
+ class SiteDB
16
+ def initialize(config, site)
17
+ require 'sqlite' # SQLite
18
+ #require 'sqlite3' # SQLite3
19
+ file = "#{config.cache_dir.path.to_win_dir}/#{site.sitename}.db"
20
+ @db = ::SQLite::Database.new(file, 0)
21
+ # @db = ::SQLite3::Database.new(file)
22
+ end
23
+
24
+ def table_exist?(table)
25
+ @db.table_info(table) {|row|
26
+ return true
27
+ }
28
+ false
29
+ end
30
+
31
+ def quote(org)
32
+ ::SQLite::Database.quote(org)
33
+ end
34
+
35
+ def encode(org)
36
+ ::SQLite::Database.encode(org)
37
+ end
38
+
39
+ def decode(org)
40
+ ::SQLite::Database.decode(org)
41
+ end
42
+
43
+ def check_table(table)
44
+ raise unless /\A[a-z]+\z/ =~ table
45
+ quote(table) # make sure
46
+ end
47
+
48
+ def table_create(table)
49
+ t = check_table(table)
50
+ sql = <<'EOT'
51
+ create table #{t}
52
+ (
53
+ id INTEGER PRIMARY KEY,
54
+ key TEXT,
55
+ value VARCHAR
56
+ );
57
+ create index idx_#{t}_key on #{t} ( key );
58
+ EOT
59
+ @db.execute(sql)
60
+ end
61
+
62
+ def delete(t, k)
63
+ t = check_table(t)
64
+ k = quote(k)
65
+ @db.execute("delete from #{t} where key='#{k}';")
66
+ end
67
+
68
+ def set(t, k, v)
69
+ t = check_table(t)
70
+ k = quote(k)
71
+ delete(t, k) if get(t, k)
72
+ v = encode(v)
73
+ @db.execute("insert into #{t} values (NULL, '#{k}', '#{v}');")
74
+ end
75
+
76
+ def get(t, k)
77
+ t = check_table(t)
78
+ k = quote(k)
79
+ v = @db.get_first_value("select value from #{t} where key='#{k}'" )
80
+ return nil if v.nil?
81
+ decode(v)
82
+ end
83
+ end
84
+ end
85
+
86
+ if $0 == __FILE__
87
+ require 'qwik/testunit'
88
+ require 'qwik/test-common'
89
+ require 'qwik/config'
90
+ require 'qwik/server-memory'
91
+ $test = true
92
+ end
93
+
94
+ if defined?($test) && $test
95
+ module Qwik
96
+ class SiteDB
97
+ attr_reader :db
98
+ def test(t)
99
+ end
100
+ end
101
+ end
102
+
103
+ class TestSiteDB < Test::Unit::TestCase
104
+ def test_all
105
+ # not yet.
106
+ end
107
+ end
108
+
109
+ class CheckSiteDB < Test::Unit::TestCase
110
+ include TestSession
111
+
112
+ def test_all
113
+ db = @site.sitedb
114
+
115
+ # test_quote
116
+ eq "''", db.quote("'") # only this...
117
+ eq 'BAhpAA==', db.encode(0) # marshal and base64
118
+ eq 0, db.decode('BAhpAA==')
119
+
120
+ # test_sitedb
121
+ assert_instance_of(SQLite::Database, db.db)
122
+ #assert_instance_of(SQLite3::Database, db.db)
123
+ db.db.database_list {|row|
124
+ assert_instance_of(Array, row)
125
+ }
126
+
127
+ #eq '2.8.15', SQLite::Database::VERSION
128
+ #eq 'iso8859', SQLite::Database::ENCODING
129
+ db.table_create('test') unless db.table_exist?('test')
130
+ db.set('test', 'k', 'v')
131
+ eq 'v', db.get('test', 'k')
132
+ db.delete('test', 'k')
133
+ eq nil, db.get('test', 'k')
134
+ end
135
+ end
136
+ end