clwiki 2.4.0 → 3.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +19 -9
- data/app/controllers/cl_wiki/application_controller.rb +34 -1
- data/app/controllers/cl_wiki/page_controller.rb +53 -38
- data/app/controllers/cl_wiki/sessions_controller.rb +41 -0
- data/app/helpers/cl_wiki/application_helper.rb +3 -1
- data/app/models/cl_wiki/user.rb +89 -0
- data/app/views/cl_wiki/page/edit.html.erb +5 -1
- data/app/views/cl_wiki/page/recent.html.erb +1 -1
- data/app/views/cl_wiki/page/recent.rss.builder +10 -8
- data/app/views/cl_wiki/sessions/new.html.erb +10 -0
- data/config/clwiki.yml +16 -30
- data/config/initializers/clwiki.rb +4 -3
- data/config/routes.rb +9 -0
- data/lib/cl_wiki.rb +5 -1
- data/lib/cl_wiki/configuration.rb +28 -137
- data/lib/cl_wiki/engine.rb +3 -1
- data/lib/cl_wiki/file.rb +136 -118
- data/lib/cl_wiki/format/format.blockquote.rb +8 -6
- data/lib/cl_wiki/format/format.graphviz.digraph.rb +8 -7
- data/lib/cl_wiki/format/format.opml.rb +11 -9
- data/lib/cl_wiki/format/format.pre.blockquote.rb +8 -6
- data/lib/cl_wiki/format/format.simpletable.rb +10 -8
- data/lib/cl_wiki/memory_index.rb +102 -0
- data/lib/cl_wiki/page.rb +129 -257
- data/lib/cl_wiki/public_user.rb +9 -0
- data/lib/cl_wiki/user_base.rb +25 -0
- data/lib/cl_wiki/version.rb +3 -1
- data/lib/cl_wiki_lib.rb +9 -0
- data/lib/tasks/index.rake +4 -4
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/config/application.rb +1 -0
- data/test/dummy/config/environments/development.rb +2 -0
- data/test/dummy/config/initializers/clwiki.rb +3 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/log/development.log +5909 -0
- data/test/dummy/log/test.log +40450 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-8/-8X-3n5w3EAS5uiBS2GQxjMlqD43Qout1GsSJUU6e4k.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-P/-Pa1BPD1Ps1OvnKPyrGE4MiUEnlzMEccXN8CzzxSRjM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0D/0DBWc4mmZE_dxtKcI5zwuwFah928eWto3S4tV-h1qUY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0k/0ktSefuSiZXp-1v5uXwST57lRoAF2HvHzclO4Gtftgo.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/1V/1VmPI9-8O9Y8OP-JxSXl7-yNRMZHqapeh2drmkXiRGE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/28/28R8437OhGS51UlWKpnAZIJ3qJWxLaA1BJtFIEjW9aw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2W/2WKPDryRtGzZO6Uedw4RNjnI5M9YVH-IbFg5GvLvTTQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2v/2vD9gOomeGZ1sPMc23Aqsbr95WAu7fDeShhuZuf62cY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/3G/3GuA3P7RM10Vv7NgdH65pwfAH7gMHlJ_xBUO74i-ZjM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/3S/3SzCkB81tc9XbtFdEYxCeR3If141gvhEnHchU_C6hHs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/41/41dY2GtQJAt3CmkQn8IDa9B3clQaUT6XymanCfFZR2o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/46/46WEPovJzlkEgsdG0aV08HiNsRkf0L8Txt1SWLi4atg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/4I/4Ir0PJhTRUd9iGlSu6n2AREP-_amedFe4-1fKwB2wvg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/5L/5LXSsjTcB5Un8FHlrhi6AOjxwgzWoXeWBhU_hi1gdcg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/67/67V_0cxwrU68Onen7N2Lb9bTd1jLulH06F9zh1VgZ0U.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/6A/6AXD3XLczHK8MPb5e10-7sLcS45ZrP7Iwgyo9xle0nU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/6D/6D8TdXG6KyMkGDvPbv87qUCDz9_6gRZbNAohojB484w.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7L/7LVfTxjfHpOSp2FeG-uhloqIUqIZ7uE3nT40dqhoqY8.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7b/7bceaEE3qsyoVjeou6RR-V9w2Wgzraq0OI2erU4s9ew.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7h/7hRfgp9EsoD33qh0aNXeyg9qdGapPlUT6FmcL8xztY4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8c/8cq-JtJ9Zwg4F0bFdkqaGHjdB7a9JBmfDO_sczTWycI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8d/8d2c1LpTZA9uuWml5O7SZIziW2o693h9gykizTBPBqw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8h/8hO7EIQ5iOa2rL6ZlP318Lrk0unB2CfhHCI0TrUr-Oo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8x/8x0PXM3vatUzVGk-vKi80S7LXrGb6bE-3EzEj54VNak.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/92/92txvq5_0oqyi4tKR-CTpu_hucsOQk4gSa_Soq_XIlc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/95/9501Slgi11UyN1aBXNCu4pxOpaRKyBcmSmiqPPJanmw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/9v/9vfh8eoLcnq3s_rolIXPs15SPTQWGxJrrjpJ3PoABek.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/9w/9w-0hdVYmxONDHQlpGn7DFzlRA3oXqpW4x3t9LBUU6M.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/B3/B385Es3x0hpGSQNWzSjiDcExPuEV9m1dUZWlEp5zGbw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/BR/BRBOvy22uVEx9Z5Aal_0BfPilVYEQl6AYXG2u8yBqBg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/BX/BXdNycvZI2UN7cgqvk6P4MQCc1PH2bTwa9i9vP-s-jk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CA/CA9tJ74jTtOpYcNWZPrQLc26SkJdAu1BLuwFsWqiFX0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CO/CO-z80mMyQGRy-BwknxOV5bI2IFbcMMNc05j7v8Nqso.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CY/CYGZRzrr6e2EOdwxmPLy_tYjneXGrr_uhTMALX2jyGY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Cg/CgPqTXtSkCxEox0z95JfY89MndA2GhTTQK39fjKk6QU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ct/CtQeoxqXfctXd_NvChnCVaJ_cCjNuXJMv3LBXhswU6A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Dc/DcZ_YfpX7rLYFw-u7jSJCRp_z0iIyB7XKOcwm1cQexk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ex/Exqg59Ton1SZt_QH4hMa7wUFOAuIQnCan8B9578NzIg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/F5/F5c-QANC5X3kApAecuyiMZEme0NT_UUB6SjxKvb0ALg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fd/FdwPBPhLtL4s8RSPhJ53YoYoFdRkNxANV_zQYw-KsVc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fz/FzgTyTGCIlSZyXn77nSzsYhiD2AFBrNiMOwNeBtmV8Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/GK/GKrbCoxDofzkQCmA17lE84OT6RW_6NKm7jwyZ4n2T6s.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Gh/GhVuWwPtbWpQY_Ny4MyilnH9iUqCPxTDzOonAXM4od8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Gv/GvQrSgGYXiR-rgsPHFZq1oJ5zCkDK54muqIw6KW2GyA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Gw/Gwhhfk9vS7QWmHsW90WtAt0_Rp_7AIM-ZcHmEqLf_Rg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/H5/H5Yxi2VJxpyMb-cbgwBNua8O2zZ03Jk4ByV6yhIzAsQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/I0/I0OpFIfCc595P02GZa3LUD1uD-Payl41dWaW3oZSK7g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ID/IDb8KoiLtmLZLuTayZZRFbZN0JILZeJejeUyYRRGeAA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/IQ/IQoDS19BmJjvixXd16O_7P6DB-GRUEZgdNJexJ88fIc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/I_/I_zDBUxxL4b2Wk9_qqVs56Abw1jGccc4FgvKwuscswQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ig/IgcuJMmmdeYrq2F3D721tC7ficyRm92HIrLkim5DCxQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/J2/J2LffQpwOiS012wB_C4iABoBukTOT8hmHKFwpxPfYLQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/JI/JITjXC3hXUPgOQhDYsVjhPNjtTISt0j5uz2bjfoiSHI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/KL/KL75rsyvMJSIkYkXRijxh8cs7V1wtfLPjuodISQK5vc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/KY/KYIakAXVeKvIhu5WQ8kwH9RU6xpV8HJfKrBqHy00VvE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Kw/KwqVMeMNxvnaSP-a-H5nkYyxloW_xoqR5JhEnqJ9puQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/L1/L1KghIbeezpqVDyhAbCDc4pG11ElC5JpUl319-ZlZn8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Lh/LhI7QMLwiVavmyvwYzdc_t_V9OATXaBO8aCB2swJFCk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Lh/LhqYyoCtzXpfZq6UOhmZuZLSaAwZRX44sHfwPvPqezc.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Lo/Lovn2yBpV04WnAQwZeM3hLL015H5syYBH2ufgIc6qCM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Lz/LznMZWa43whMHpqnPRsbUfREY3y_fiXQKaiKVEYW4fw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/MC/MC7GYdrSShtV64GB3hoINaYL3vCRZKq9KvwcwrJAdQo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/MU/MU6iF1YPAQqpVK_kVAtiJPtbHaYpYdOcO0g5bJ9exj8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Md/MdIg3XLcnbFsMXC-6xslVtmBvWH7Q21BSt9l5pm305o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Mw/Mwfi5Xeky61jhIuc6ooo4439CHOyz1hS48_taMRSlKM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ni/Ni5yuK9FFnhLe5HciROve12UIYstBdESWm0LfdcuVVs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Nz/Nz3hkLq4WlqgoHg_ChdHSXbP7fVmCWCTw0lH0jkMmDg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/O3/O38OvSNrhXKbxauuC8GOBBnKrt2-rPaDmfyrXScgHcA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/OS/OSm-zAlxXS63lBjvzJeSWfqq5d3D9fu-_nBVFWyQ4j0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Oa/Oazc9AJ4e_67dU0aArJeCNEeWJKMIFPtAJtxTJoUKcs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/P1/P1WYRlLMdpqE0KcFDUng5g9am4POfcOwowV2amR4tZ0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/PV/PVDpEMY_ha4kHETTb3QvjOBoBUP4PMjNDNcIAgmDy2I.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Pl/PldDxSvU1o_UFPYTE0GJmUS9mHQXH88zEw5HN6GtlRE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Pu/PuU5S_LPnhAX43U1VVN3qP_sv0ph4stXSGo7I0e_jOw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/QJ/QJ6RPZNUkui_k3wTkb62zo8wczYY7q0B174GfSJjjWE.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/QX/QXCyCL-Eeb3uHm9iOvs4anspZqeFbQnNyzDfIsXgzC8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/R1/R1F4Qf-kXTMH0fTLahalFTHtNBvgDfkOkrPyW8zeN_E.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/R1/R1__Y-gz4zkDYrXWyCf6YTkvXO0RZlrpK6ynGGVuvnM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/R2/R2Xqb6eAeUW2xTaTaTjlkyUCirkb1qfYgW2CyY80VjM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/RM/RMXouh7GkRuhy8S6jnpxFD27HRVT0LEHj9iR53ps4o4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/RV/RVmt1mCn0tykR8xyBylvh-Hvi-Am87neA2IEkYHjg-g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Sb/Sb57Q81kn_46c151CSeuOFI2UarVIlevJHmB_glTpfI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Si/SiS4qKkPGbaIXzg2rpGa3SepickBkHi53MjRZreIVyw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/TF/TFylLOF6Be_hud-nZYcvvbD3NeyRKE8NUvv_JsuJ4cY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Tg/TgTXCuKAEg1DI5zjHO8tGMGuQGC9BRt9vgDZj2FdSa8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/UI/UIyRfqj_T27DnyWJiZK9BdUGTIDTQ9M953ArtrYz5fM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/U_/U_F-o3fo7oUYyn0O5KBlt3jOF53X_-4UuZb-_alPZPk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/U_/U_KCsVrX_QoGJ_FpUpCNU3XMT36CThwu8_0HYj_2k4w.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/U_/U_ie5WwVJPItNZrqfbIrnZpaRokYT5klrYU92QSugd8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ub/Ub-oUCoAiliSW8ohVsmtsflc4nPeiBvcjzgNbPLYQRc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ud/UdvIJcVNQ_08Vaoyx4KuRGNjazpB9-qjOtDMTud8R0Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Uz/UzEG5I_EszWbaSVnk497D0KfuIzsgHoPLVQd7e3mlQg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/V-/V-F9X0mrPgfTELxk9xdYnb27trOmB6nBDL973YWeOfU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/VA/VAOOXmbiiPy1jqpQQCDVrhkByG3pdeJoZCOvVkp-XVY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/VV/VVIuIm_HUOaEdZfXt-CmFQZb3ycoiXeeI-FV7nwkr0Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/VW/VWjUCUH0gfcamZHDpILUcC_1PnGFykHGk0wh8NpIRbQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/VX/VXHQHhwOUBuWlKPY6smpXG1xjASw927lyjUKBXBh3e0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Vn/VnE9ctuz42Ux3gd7YEwAa86NxA52PDCfU82OvtlrlX8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Vn/VnMqvZo9nqGF_5tt3gNbMyoG8jJVm0K0r1fANEBjfkw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/W1/W1YuEAoPMZTXfbxg_xWV9o2RP60SAKs5bhk7teKdL2g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/W2/W2ZyYMlYmyA7_1WcpiWhYUJa6wfPCZ5kZj_-Nuw31yM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wg/WgwI9C5-mh_smtsTGVmH4y76T5ifM4M_hKL1fn-K8iw.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ww/WwRKzl7ldAfUY6mvA4pcF6CJPsqgy9_yparRsi8cmpY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wy/WyWAl1y93bbTZWLS767hNEj7IMJ8fUXatNCS-25hJXE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/X5/X5GHIj6tnz-w7d-60OaYcbzJczzkTBtm24BOxzoSDdo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/X6/X6jU4SPOD_b1ks9tCApsvWRa7q8cBYCjw3gI6Dwvr34.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/X8/X88lT-cwuuj8gqiNY83uVqXFgeLcaHMc9Xh2X4Iux6k.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/XQ/XQ0aFc1cceisG4P8qUPhW8z1H3I71pMguVRRMgJ66cs.cache +5 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Xh/XhXLVYOEEwpzOBAWDdiCEpTMz7vC8wnlBHYHJkySh-0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/YB/YBJNyX7HNPq78obeHYRGnJKSVl9EtRPbcGD253-ia34.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Yu/YupDX89OAJ6u3BHBW-UJgO3nDfi7hwlpf_JHlnM8b6k.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ZH/ZHN5sHdNMxUCl3Ese5T5_AzQbD9WHqpgBL4PBOrgXJY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ZP/ZPRvYWthjzuQ0tqk5AdgQbeTUqhDboF8bvTtdrmg4Jo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ZV/ZVu2Ed9wpdsPLKStP971oLEJBwgJQHLInXIiQkIWC04.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Zb/ZbnyIl6znMAVquD2ZD5OYA9SPXmQJYWU7V8F2Hgp3Uc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Zj/ZjALwFkjfG3uebsyy_CeJp5VQMJLE03zxPxkNp-sZDA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/_E/_E-Bix511H4RJnJUAkPWvnNw4IThIvS9CEAku1gsVcg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/_F/_Fu404i1O4mKpjPluBsq-3FZQnyQvla_6jDnH03Lpw8.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/a-/a-t90hz_PZnc6ImKhk-cIh_WBB9vi_rChKzLv4hMBqw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/a5/a5cnzGcRAu4dPakq4_DHH9GanK42Ov5O1F62oeJR4Zo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/a5/a5uFYzSt5Xm8ZjP5N42LcV7y94YTaEkIep8jBUeErBc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aJ/aJK2kxoM9CsnZpxiFvP6RoP0sxHBiix9X1P6Mhy9Dcg.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aO/aOU10S2QEOBHcdKwGRfXqqHdYshmYD20LYiJIGMzIa0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aZ/aZEdK7dgijyjIs26V_QbKsDgO5JxeYXiT0Sl28M0e-U.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aq/aqBnFJWuQ-xmdUL8_asWtElNRrMr0W60LVdDqpt43L8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aq/aqNor7ePvH9sS4jPTBqDuXgPIzCEYDmzv6OL8nFaBfc.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/b5/B5yawfIgrEUdQrBwKkk65ra3p7vzQakH5rHh61IUCGQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/b5/b5KTv2Hrf5faN7X4XahT1s8L5t-EANtcFKrMEsGm3lw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bF/bFemYCjG73k2_Ys77S7qNyW7CYcyw4bngyc0OGneI-s.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bG/bGdy8gJL8acOmxK8AbkYbxNuakf4LlMZ-zPBkyL0E-0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bK/bKm8sxC3i0ycUMXr6pnD61MdwytUWfpNOJlBY6qJaWg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/dA/dA1M22RMQvVwb74tbFg-_237SferZuCI10s4R0zx8NI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/dF/dFOzXjFeRtB5bukRI9wGrh2O_GkOeBPnrJRMiv8_ZbM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/dw/dwbXKkD4yllXOeD4T7BKoGvLS26j9lxMkjMiIxfyt6E.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/eO/eOhX0bq10_h3P-ISuztuJ9tqU9WI-YU21LY8uIKWjCI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/eT/eTgN8O1TgsFV61pclFzCmmJ9qT7MgyGvtQrmRtJoNeg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ec/ec5x3WtYVdBZAlGgRklnM5CWLyA6JeDBJT_1HOhXF4g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/eu/eu6Xg0psMCuHIWG0WjCo9wwNOlWs-Z5OH4SyGEmdTNQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fC/fC-TBNdh4rVupPn2ObyZeIx6OSlpBSBQZfIzywI6xx0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fC/fCGqdV7zjLjwzE_j81Q26V2av1OhelK9ekz-obYezyM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fR/fRIbNtGTaNqdwIDyusrUmllglSGMNnqnw7VOLvf5D_k.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fq/fq7SFxQSEFZCuS7jQj0n-BQfbJ5mpLpmJQsd9mJVq68.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gG/gGBN3yxvq8azMjDv3hsSw_zLUj9KLuqHPDXZK8x8pFc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gQ/gQzw0n2XxT1vPdv-JNlsvC4baxnQXS_my3g0GHgk2DM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gc/gcwevUTNs8bX7r0PgMxjPfBObyrl1oUiYzRUtDwso20.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gd/gd3J0EmNeiTh2GzxcAKItmtUnUay9NG4Sm2vkiLKvmA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gj/gjXteWe57D8FaBOQUw29N_mwHCeTQW8oLjyv8fu3wNw.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gt/gtFeEhjHn0G9WhgiMKaNtXVgNYW9s_wBLE0VGegeAN8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/hA/hA4-M5cp310ZkSe59_BWszdgXy7mmYagSRCfelGBA9o.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/hc/hcXm7DBIrn3OjXXbh6UkevkxWDcflOZ9csWRVYgjSac.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/hj/hje-P0mJOOD6UQ7CsJ7BNZBSdKcCkvwHijuCCtQDWMw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/iC/iC3FCadetljjEIeMWfeqqDoMxhJi6rI20BpiVxtvgS4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/iV/iV16_jyEayI_vLgHw3HFhtJAiVOCIlzFho0Yt7a4v_Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/j6/j62KRIr4T81zq1Ujpg7AJRQdI0ry9HGKPt4nK6fRt1g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/jR/jRg0Zbr59-UMtrWO5t2VWNI3GqU7XWOUsE44dX5cPyk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/jj/jj9HUpCSrLEyONEZNLLkgJ8hJmxOCLpcVJeiBa0KDsE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/jq/jqnMk9arxuef2cdSQuxj3WOQuAfGKup3H2pjO7x1DOg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/k1/k14rvggyKI9dk-yVjn-Lk0p8qU360H_JuVG9aZ4q0OM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kb/Kb8Z49kajAX1vyy5d4-gA8StHhQp5yOUs0wtdZ7m8Hc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kb/kbEMkrgp2k0pezn_gFfMqA142QwoJYBKMj7cEkE-Hag.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/lD/lDpZHp5gBhRdNHdj1TwWq1_LZ_a56lxeksxqaEs2efA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/lL/lLUIzpNuP0NYh0_joJRWkVJ0OF9W3CyzdFBfs3818Lc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/mE/mEfGHxLvdPQrcbpjLw4q_wOPirMzrR4z58KgozQ1zNY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/mM/mMZ3DR5b7kx70JtEg-ImWOa_V1jnHcWgHqNqapxIMXk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/mX/mXCT6vriuTtwLaKGnTa5hwXSrwGtAmP6pV5lmjbHaYM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/mZ/mZjIy4zRS4hbS4vWHpdKd7jeZgLatEx_nlFqv_KSCrs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/mg/mge36-9r2gGuKcPoghbLDM72AV4gIVTl6gQDbk7hrkg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/nK/nKZaLuUqTl9pf5Nb1oVuabxd74q4oN8YTBeo6bNd-Vk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/nP/nPbHGaYfJSLZ2K3YTROe7T1RPqKoBQJwawQtZ_FN1-I.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/o9/o9KyTznHG0ZIHDI7kTg1Jp78qaga7gJqouXSKdocEjA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/oB/oBupyQ9cW436mBji6Rp7TtHE6CX_r8iq2sCBo0LNbc8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/oN/oN3TypgxDDLqcxy0Funa4RVCYXS-7qn6D56wgBiUT2Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/oW/oWo9dphQsanmdoiEL4YOq-nygJy3mBHxuB-V0YKtqKg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/om/omGcA_eTFAFIH3RJaPOpEW3yz0074cob3hozQFLOAxk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ot/otpWM-gZogHCGUHAd2Xu_B_U36zeJ9dAR2xKLiDheVE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/p0/p0WHrZZBaXbPaNj5XmQGTli4mi08Rv8DidQfwj28a6w.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/p5/p5Qqrs_bvLEarcHNwiFMoZXaTWvShlq8KdaiIXvi7g4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pA/pAvUFBt71eJx7E7oQbIxrEZ8YcMo9kboyGxjk73ZWrI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pB/pBwzUQUu-GcmLiQwn6KnbbDP0ipnVHzVaeArqdpqi98.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pC/pCePfKbmTQ6s2Tl7ki3oBput2ruhpCzpa6Vvejbb5xg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pS/pSLY6X9P48cnC-drvpZwa1ubJu-hjpiaTx_7Bj45riY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/q6/q6BYa32YJF11eGVapO4ouNl6gayPIsARgMavlzZmoi0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qW/Qwu_HFjM_p33h0ukEd8eZtvuDh1Zw5x1w77CDlTopH8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qW/qWlVTm6ozTv1T_Rvda-EsADQdVTcmfAesyZAq5Y4Ht4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qY/QYP6D7Cl8GTs3LFfMQg5vYyDceeOpPLwxvPpYiKHzIU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qY/qY78GTTnufmP1eP2CE16x833zGfQ0F5EVCFtUTMQ7Mw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qY/qy4PIHHAIEUKVx3kHjiN5YyIrun3jtvdSX5yXMkB2PQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qm/qmZZzCnL9PLIyZ0iBu6Alr69AUfHHI1fKdNRRgG04yg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/rP/rPrNeVrYtj3sM9uesyX26XheSoRwAHJAmshFxNu9Bjg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/rP/rp52ANh-KNLY9IZY1lxAbAsbbtpE0S41_F9fq3W6bq4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/s4/s4tbhiIn_CLebHU0ldR1hjB8M4TebDv0UHjWrn41K1c.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/s5/s5yv3jYvjyKZJ8SMzpj94eMKEuX46lAWV1ApHF-6bsM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/sO/sOBPF_p4Te56V9vdLV0Ywn6djNbmdPSIzvgYNPnAXYc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/sv/sv0a_JAC4GSc_cK-2OUAzhFwm_K3qzSfDefwpcqOCk4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/sv/svHBVuxn5XQE6HEBJ4AWbdxsIDZHr5qjwrGP-UVLxk4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/sw/sw2EAksRkslJNoJJCTS2FPOfHWCYvsS86AxmRMPjens.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/t1/t1cv6bP9cTAIs82lyIsnXGeAwB1KNVY5_5rgUvelr04.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tO/To1SPyNegqysLIqhSzrNQPh1VKKj19MespjJediCde4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tO/tOPkZNrO9FRDhSlCf7VWOexxRq2CE2X4_6KjyxJkq2A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tR/tRoxwnX8bACHK5pW9tIi4ILY4XuYTIpueH0fGr2t0rc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/t_/t_bP70PmOB70862dwKmCTkmZuzTqCreOzNYW4Yn2n6A.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/t_/t_ltg5_gjc0TqJfse-jdOUGwQu5AiK0znzxmaWt05x8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/uj/ujdE_ewC5UIxr6uw5F7YRfKKWiu8-15wzBlOjYHsnkQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ut/ut8uBMdgxX8_wfU0l6kGew6H8TLXAj74kFnaI252F3k.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ut/utQEOZtBKQK_bUUDeZX4Mgk00L4AOMVyq6zrKAoo1Xw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/v4/V4ZL0hYAfHe81zfd7otsIeeWkSiHQ26MT8zObK74mSA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/v4/v4pe2JlWkzR-IW0F4Bhw4WEAwHNgeT9Df5rOmKYSwAI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/vm/vmjBl9ZCF5hj4sG4e2nid94GcRQYmsOsu-_Q3Zlud5c.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/vz/vzBoVc4GQWi4UFp-4dBJnzrhyUuokPV8SCOxsdpOht8.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/wM/wMWxmf8BN_NAJRCyardukpfDMwts44Bz2a8doi-49Rg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/x7/x7KkTV3ibfIEysLB_ug5bfmnn2VLV_BldukPR3EoPBk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/x7/x7iSOdqAIVmVpn9ujTwJ_C7EqUgmMSri5vjjHdRIX10.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xY/xYdD9O1JRIfpVj9Kw_b3JTUBQZLI_dcy-bf9uXEp-jg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xx/xxkulLgT-tkVeDC50gUXRGGMou47BUdlYOwgs0j5muY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yn/yn_3aZZwyjcI0O6fwisZ7zvcu4Gq5bV31g3tHFxfQNg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yq/yqwjyepbYY4ctoMOySWiOIWUYwzl_BczAmXqJ5DPvb0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/z9/z9HQmzff5j_6CFyk6eQ52nYt9cPLXsxDQY0Yep1Hz-0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/zM/zMvcc87IG1SRbqwUNtWQfHgeWr5XN36OU8vg-v3rUus.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/zn/znjQpjNzh1iUAe9DljeFghnStRvqNIr1GuOTibVcEJQ.cache +0 -0
- data/test/dummy/tmp/testrep/BaaRamEwe.txt +5 -0
- data/test/dummy/tmp/testrep/BarFoo.txt +5 -0
- data/test/dummy/tmp/testrep/BazQuux.txt +5 -0
- data/test/dummy/tmp/testrep/FooBar.txt +5 -0
- data/test/dummy/tmp/testrep/NewEncryptedPage.txt +5 -0
- data/test/dummy/tmp/testrep/NewPage.txt +5 -0
- data/test/dummy/tmp/testrep/users/testy.json +1 -0
- data/test/dummy/tmp/wikirep/FrontPage.txt +5 -0
- data/test/dummy/tmp/wikirep/users/chrismo.json +1 -0
- data/test/dummy/wikirep/EncryptedPage.txt +0 -0
- data/test/dummy/wikirep/FrontPage.txt +11 -4
- data/test/dummy/wikirep/users/chrismo.json +1 -0
- data/test/helpers/wiki_helper_test.rb +2 -0
- data/test/lib/clwiki/clwiki_test_helper.rb +19 -2
- data/test/lib/clwiki/file_owner_test.rb +58 -0
- data/test/lib/clwiki/file_test.rb +91 -56
- data/test/lib/clwiki/memory_index_test.rb +61 -0
- data/test/lib/clwiki/page_test.rb +72 -148
- data/test/lib/clwiki/test_base.rb +19 -19
- data/test/test_helper.rb +7 -5
- metadata +498 -23
- data/lib/cl_wiki/find_in_file.rb +0 -33
- data/lib/cl_wiki/index.rb +0 -458
- data/lib/cl_wiki/tools/cron.reminders.rb +0 -241
- data/lib/cl_wiki/tools/movepages.rb +0 -27
- data/lib/cl_wiki/tools/pagestomove.txt +0 -56
- data/lib/cl_wiki/tools/rublog/clWiki.rb +0 -62
- data/lib/cl_wiki/tools/rublog/readme.txt +0 -2
- data/lib/cl_wiki/tools/singlepage.rb +0 -58
- data/lib/cl_wiki/tools/test/singlepagetest.rb +0 -9
- data/lib/cl_wiki/tools/thunderbird.rb +0 -23
- data/test/lib/clwiki/find_in_file_test.rb +0 -111
- data/test/lib/clwiki/index_test.rb +0 -32
data/lib/cl_wiki/find_in_file.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module ClWiki
|
2
|
-
class FindInFile
|
3
|
-
FULL_SEARCH = 0
|
4
|
-
FILE_NAME_ONLY = 1
|
5
|
-
|
6
|
-
attr_reader :find_path, :files
|
7
|
-
|
8
|
-
def initialize(find_path)
|
9
|
-
@find_path = find_path
|
10
|
-
end
|
11
|
-
|
12
|
-
def find(search_text, scope = FULL_SEARCH)
|
13
|
-
recursive_find_path = ::File.join(@find_path, '**', "*#{$wikiPageExt}")
|
14
|
-
regex = /#{search_text}/i
|
15
|
-
@files = Dir[recursive_find_path].grep(regex)
|
16
|
-
if scope == FULL_SEARCH
|
17
|
-
Dir[recursive_find_path].each do |path_filename|
|
18
|
-
if ::File.stat(path_filename).file?
|
19
|
-
f = ::File.open(path_filename)
|
20
|
-
begin
|
21
|
-
@files << path_filename if f.grep(regex) != []
|
22
|
-
ensure
|
23
|
-
f.close unless f.nil?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
@files.collect! { |fn| fn.sub(@find_path + '/', '') }
|
29
|
-
@files.uniq!
|
30
|
-
@files.length
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/cl_wiki/index.rb
DELETED
@@ -1,458 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
|
3
|
-
require File.dirname(__FILE__) + '/page'
|
4
|
-
require File.dirname(__FILE__) + '/configuration'
|
5
|
-
require 'cl/util/progress'
|
6
|
-
require 'cl/util/console'
|
7
|
-
|
8
|
-
gem 'clindex'
|
9
|
-
require 'index'
|
10
|
-
|
11
|
-
require 'drb'
|
12
|
-
|
13
|
-
module ClWiki
|
14
|
-
class Indexer
|
15
|
-
attr_reader :index
|
16
|
-
|
17
|
-
WAIT = true
|
18
|
-
|
19
|
-
def self.defaultPort
|
20
|
-
'9111'
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize(wiki_conf=$wiki_conf, fn=nil)
|
24
|
-
@wiki_conf = wiki_conf
|
25
|
-
|
26
|
-
@index = ClIndex.new
|
27
|
-
@recent = ClIndex.new
|
28
|
-
@pages = ClIndex.new
|
29
|
-
@hits = ClIndex.new if @wiki_conf.access_log_index
|
30
|
-
@rootDir = @wiki_conf.wiki_path
|
31
|
-
@fn = fn
|
32
|
-
@record_hits = true
|
33
|
-
load
|
34
|
-
end
|
35
|
-
|
36
|
-
def do_puts(text)
|
37
|
-
if @fn
|
38
|
-
::File.open(@fn, 'a+') do |f|
|
39
|
-
f.puts text
|
40
|
-
end
|
41
|
-
else
|
42
|
-
puts text
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def build(limit=-1, purge=false)
|
47
|
-
@record_hits = false
|
48
|
-
begin
|
49
|
-
fileCount = 0
|
50
|
-
raise '$wikiPageExt not set' if $wikiPageExt.empty? # for debugging only, really
|
51
|
-
files = Dir[::File.join(@rootDir, '**/*' + $wikiPageExt)]
|
52
|
-
if limit == -1
|
53
|
-
p = Progress.new(files.length)
|
54
|
-
else
|
55
|
-
p = Progress.new(limit)
|
56
|
-
end
|
57
|
-
p.start
|
58
|
-
files.each do |fn|
|
59
|
-
next if !::File.file?(fn)
|
60
|
-
break if (limit > -1) && (fileCount >= limit)
|
61
|
-
fileCount += 1
|
62
|
-
fullName = fn.sub(@rootDir, '')
|
63
|
-
fullName = fullName.sub(/#{$wikiPageExt}/, '')
|
64
|
-
index_page(fullName, purge)
|
65
|
-
do_puts p.progress(true)
|
66
|
-
end
|
67
|
-
ensure
|
68
|
-
@record_hits = true
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def index_page(fullName, purge=false)
|
73
|
-
put_status "indexing #{fullName}" do
|
74
|
-
pg = ClWiki::Page.new(fullName, @rootDir)
|
75
|
-
pg.read_raw_content
|
76
|
-
if purge && pg.content_never_edited?
|
77
|
-
put_status("purging #{fullName}")
|
78
|
-
pg.delete
|
79
|
-
remove_page_from_index(fullName)
|
80
|
-
else
|
81
|
-
formatter = ClWiki::PageFormatter.new(pg.raw_content, fullName)
|
82
|
-
formatter.formatLinks do |word|
|
83
|
-
add_to_index(word.downcase, fullName)
|
84
|
-
end
|
85
|
-
add_to_index(fullName, fullName)
|
86
|
-
add_to_pages(fullName)
|
87
|
-
|
88
|
-
add_to_recent(pg.mtime, fullName)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def add_to_index(term, fullPageName)
|
94
|
-
@index.add(term, fullPageName, WAIT)
|
95
|
-
end
|
96
|
-
|
97
|
-
def add_to_recent(modTime, fullPageName)
|
98
|
-
# remove all other instances of this page, we only need the current modTime
|
99
|
-
@recent.remove(fullPageName, WAIT)
|
100
|
-
@recent.add(modTime.strftime("%Y-%m-%dT%H:%M:%S"), fullPageName, WAIT)
|
101
|
-
end
|
102
|
-
|
103
|
-
def add_to_pages(fullPageName)
|
104
|
-
@pages.add(fullPageName, nil, WAIT)
|
105
|
-
end
|
106
|
-
|
107
|
-
def hits_filename
|
108
|
-
::File.join(::File.expand_path($wiki_path), 'hits.dat')
|
109
|
-
end
|
110
|
-
|
111
|
-
def index_filename
|
112
|
-
::File.join(::File.expand_path($wiki_path), 'index.dat')
|
113
|
-
end
|
114
|
-
|
115
|
-
def recent_filename
|
116
|
-
::File.join(::File.expand_path($wiki_path), 'recent.dat')
|
117
|
-
end
|
118
|
-
|
119
|
-
def pages_filename
|
120
|
-
::File.join(::File.expand_path($wiki_path), 'pages.dat')
|
121
|
-
end
|
122
|
-
|
123
|
-
def remove_page_from_index(fullPageName)
|
124
|
-
@index.remove(fullPageName, WAIT)
|
125
|
-
@recent.remove(fullPageName, WAIT)
|
126
|
-
end
|
127
|
-
|
128
|
-
def put_status(status)
|
129
|
-
if block_given?
|
130
|
-
do_puts Time.now.strftime("%I:%M:%S") + ' ' + status + '... '
|
131
|
-
yield
|
132
|
-
do_puts Time.now.strftime("%I:%M:%S") + ' ' + status + ' done '
|
133
|
-
else
|
134
|
-
do_puts Time.now.strftime("%I:%M:%S") + ' ' + status
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
def reindex_and_save_async(fullPageName)
|
139
|
-
thread = Thread.new do
|
140
|
-
reindex_page(fullPageName)
|
141
|
-
save
|
142
|
-
end
|
143
|
-
@wiki_conf.wait_on_thread(thread)
|
144
|
-
end
|
145
|
-
|
146
|
-
def reindex_page(fullPageName)
|
147
|
-
put_status 'Reindexing ' + fullPageName do
|
148
|
-
remove_page_from_index(fullPageName)
|
149
|
-
index_page(fullPageName)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def save
|
154
|
-
put_status 'Saving' do
|
155
|
-
put_status 'Saving Main' do
|
156
|
-
@index.save(index_filename, WAIT)
|
157
|
-
end
|
158
|
-
put_status 'Saving Recent' do
|
159
|
-
@recent.save(recent_filename, WAIT)
|
160
|
-
end
|
161
|
-
put_status 'Saving Pages' do
|
162
|
-
@pages.save(pages_filename, WAIT)
|
163
|
-
end
|
164
|
-
put_status 'Saving Hits' do
|
165
|
-
@hits.save(hits_filename, WAIT) if @wiki_conf.access_log_index
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
def load
|
171
|
-
put_status 'Loading' do
|
172
|
-
put_status 'Loading Main' do
|
173
|
-
@index.load(index_filename, WAIT) if ::File.exist?(index_filename)
|
174
|
-
end
|
175
|
-
put_status 'Loading Recent' do
|
176
|
-
@recent.load(recent_filename, WAIT) if ::File.exist?(recent_filename)
|
177
|
-
end
|
178
|
-
put_status 'Loading Pages' do
|
179
|
-
@pages.load(pages_filename, WAIT) if ::File.exist?(pages_filename)
|
180
|
-
end
|
181
|
-
if @wiki_conf.access_log_index
|
182
|
-
put_status 'Loading Hits' do
|
183
|
-
@hits.load(hits_filename, WAIT) if ::File.exist?(hits_filename)
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def dump_clindex(aindex, fn_prefix)
|
190
|
-
put_status "Dumping #{fn_prefix}..." do
|
191
|
-
hash = aindex.index
|
192
|
-
::File.open(fn_prefix + '.keys.dump.txt', 'w+') do |f|
|
193
|
-
keys = hash.keys
|
194
|
-
keys.sort.each do |key|
|
195
|
-
f.puts key
|
196
|
-
end
|
197
|
-
end
|
198
|
-
File.open(fn_prefix + '.full.dump.txt', 'w+') do |f|
|
199
|
-
fullary = hash.to_a
|
200
|
-
fullary.sort!
|
201
|
-
fullary.each do |keyValueAry|
|
202
|
-
f.puts keyValueAry[0].inspect + " => " + keyValueAry[1].inspect
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def dump
|
209
|
-
dump_clindex(@index, 'index')
|
210
|
-
dump_clindex(@recent, 'recent')
|
211
|
-
dump_clindex(@pages, 'pages')
|
212
|
-
dump_clindex(@hits, 'hits') if @wiki_conf.access_log_index
|
213
|
-
end
|
214
|
-
|
215
|
-
def search(text)
|
216
|
-
terms = text.split(' ')
|
217
|
-
allhits = nil
|
218
|
-
terms.each do |term|
|
219
|
-
termhits = []
|
220
|
-
@index.search(term, termhits, WAIT)
|
221
|
-
termhits.flatten!
|
222
|
-
if !allhits
|
223
|
-
allhits = termhits
|
224
|
-
else
|
225
|
-
allhits = allhits & termhits
|
226
|
-
end
|
227
|
-
end
|
228
|
-
allhits = [] if !allhits # shouldn't ever happen I'd wager
|
229
|
-
p allhits if $debug
|
230
|
-
allhits.flatten!
|
231
|
-
allhits.uniq!
|
232
|
-
allhits.sort!
|
233
|
-
p allhits if $debug
|
234
|
-
allhits
|
235
|
-
end
|
236
|
-
|
237
|
-
def sort_hits_by_recent(hits, top=-1)
|
238
|
-
hits_by_date = {}
|
239
|
-
# don't send top into this call to recent, we need all recent, then
|
240
|
-
# we filter that down to all matches, /then/ we take the topmost
|
241
|
-
# of that matching list
|
242
|
-
recent.each do |date, page_name_array|
|
243
|
-
hits_at_this_time = page_name_array & hits
|
244
|
-
hits_by_date[date] = hits_at_this_time if !hits_at_this_time.empty?
|
245
|
-
end
|
246
|
-
hits_by_date.sort { |a, b| b[0] <=> a[0] }[0..top]
|
247
|
-
end
|
248
|
-
|
249
|
-
def recent(top=-1)
|
250
|
-
@recent.do_read(WAIT) do
|
251
|
-
hash = @recent.index
|
252
|
-
hash.sort { |a, b| b[0] <=> a[0] }[0..top]
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
def pages_out(rootPage)
|
257
|
-
all = @index.all_terms(rootPage, WAIT)
|
258
|
-
#all.delete_if do |term|
|
259
|
-
# term[0..0] != '/' || !ClWikiPage.page_exists?(term.dup)
|
260
|
-
#end
|
261
|
-
all.delete_if do |term|
|
262
|
-
(term[0..0] != '/') || (term == '/') || (term == '//')
|
263
|
-
end
|
264
|
-
all.delete_if do |term|
|
265
|
-
!ClWikiPage.page_exists?(term.dup)
|
266
|
-
end
|
267
|
-
all
|
268
|
-
end
|
269
|
-
|
270
|
-
def page_exists?(fullPageName)
|
271
|
-
exists = false
|
272
|
-
exists = @pages.term_exists?(fullPageName, WAIT)
|
273
|
-
exists
|
274
|
-
end
|
275
|
-
|
276
|
-
def add_hit(fullPageName)
|
277
|
-
if @record_hits && @wiki_conf.access_log_index
|
278
|
-
put_status('Hit on ' + fullPageName)
|
279
|
-
@hits.add(fullPageName, Time.now, WAIT)
|
280
|
-
thread = Thread.new do
|
281
|
-
@hits.save(hits_filename, WAIT)
|
282
|
-
end
|
283
|
-
@wiki_conf.wait_on_thread(thread)
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
def hit_summary(start_index=0, end_index=-1)
|
288
|
-
if @wiki_conf.access_log_index
|
289
|
-
hit_index = nil
|
290
|
-
@hits.do_read(WAIT) do
|
291
|
-
hit_index = @hits.index.dup
|
292
|
-
end
|
293
|
-
hit_index.sort { |a, b| b[1].length <=> a[1].length }[start_index..end_index]
|
294
|
-
end
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
class IndexClient
|
299
|
-
def initialize(wiki_conf=$wiki_conf)
|
300
|
-
case wiki_conf.useIndex
|
301
|
-
when ClWiki::Configuration::USE_INDEX_NO
|
302
|
-
raise 'wikiConf.useIndex says to not use an index'
|
303
|
-
when ClWiki::Configuration::USE_INDEX_DRB
|
304
|
-
DRb.start_service()
|
305
|
-
@indexer = DRbObject.new(nil, "druby://localhost:#{wiki_conf.indexPort}")
|
306
|
-
when ClWiki::Configuration::USE_INDEX_LOCAL
|
307
|
-
$indexer ||= ClWiki::Indexer.new(wiki_conf, wiki_conf.index_log_fn)
|
308
|
-
@indexer = $indexer
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
def reindex_page_and_save_async(fullPageName)
|
313
|
-
@indexer.reindex_and_save_async(fullPageName)
|
314
|
-
end
|
315
|
-
|
316
|
-
def reindex_page(full_page_name)
|
317
|
-
@indexer.reindex_page(full_page_name)
|
318
|
-
end
|
319
|
-
|
320
|
-
def save
|
321
|
-
@indexer.save
|
322
|
-
end
|
323
|
-
|
324
|
-
def search(term, titles_only=false)
|
325
|
-
hits = @indexer.search(term).flatten
|
326
|
-
if titles_only
|
327
|
-
hits.delete_if do |fullName|
|
328
|
-
!(fullName =~ /#{term}/i)
|
329
|
-
end
|
330
|
-
end
|
331
|
-
hits
|
332
|
-
end
|
333
|
-
|
334
|
-
def page_exists?(fullPageName)
|
335
|
-
@indexer.page_exists?(fullPageName)
|
336
|
-
end
|
337
|
-
|
338
|
-
def sort_hits_by_recent(hits, top=-1)
|
339
|
-
@indexer.sort_hits_by_recent(hits, top)
|
340
|
-
end
|
341
|
-
|
342
|
-
def recent(top=-1)
|
343
|
-
@indexer.recent(top)
|
344
|
-
end
|
345
|
-
|
346
|
-
def add_hit(fullPageName)
|
347
|
-
@indexer.add_hit(fullPageName)
|
348
|
-
end
|
349
|
-
|
350
|
-
def hit_summary(start_index=0, end_index=-1)
|
351
|
-
@indexer.hit_summary(start_index, end_index)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
|
357
|
-
def launch_server(port=nil, fn=nil)
|
358
|
-
port = ClWiki::Indexer.defaultPort if !port
|
359
|
-
idxServer = ClWiki::Indexer.new(fn)
|
360
|
-
puts "ClWikiIndexer launching on localhost:#{port}..."
|
361
|
-
DRb.start_service("druby://localhost:#{port}", idxServer)
|
362
|
-
DRb.thread.join
|
363
|
-
end
|
364
|
-
|
365
|
-
if __FILE__ == $0
|
366
|
-
def do_page_exists(fullPageName)
|
367
|
-
if @i.page_exists?(fullPageName)
|
368
|
-
puts fullPageName + ' exists'
|
369
|
-
else
|
370
|
-
puts fullPageName + ' does not exist'
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
def do_search(search)
|
375
|
-
puts @i.search(search).join("\n")
|
376
|
-
puts
|
377
|
-
end
|
378
|
-
|
379
|
-
def do_index_dump
|
380
|
-
puts 'Dumping...'
|
381
|
-
@i.dump
|
382
|
-
end
|
383
|
-
|
384
|
-
def do_recent
|
385
|
-
puts @i.recent
|
386
|
-
puts
|
387
|
-
end
|
388
|
-
|
389
|
-
def do_hits
|
390
|
-
puts @i.hit_summary.inspect
|
391
|
-
puts
|
392
|
-
end
|
393
|
-
|
394
|
-
def show_help
|
395
|
-
puts 'ClWikiIndexer'
|
396
|
-
puts
|
397
|
-
puts '-h Show this help'
|
398
|
-
puts
|
399
|
-
puts '-s Launch drb server'
|
400
|
-
puts "-p Drb port. Default is #{ClWiki::Indexer.defaultPort}"
|
401
|
-
puts '-f [fn] File to route output to. stdout used if not specified'
|
402
|
-
puts '-b Do a full re-build of the index'
|
403
|
-
puts '-bp Do a full re-build, purging unused pages. An unused page'
|
404
|
-
puts ' is one where the contents are the default content after'
|
405
|
-
puts ' creation, but has never been edited.'
|
406
|
-
puts '-l [x] If -b, limit number of pages built to x'
|
407
|
-
puts '<none> load index to search for terms entered in stdin'
|
408
|
-
puts '-q [term] load index and search for term'
|
409
|
-
puts '-r [page] load index and see if page exists'
|
410
|
-
puts '-x [page] load index and re-index the specified page'
|
411
|
-
puts '-d debug'
|
412
|
-
puts '-dump dumps full index to text file'
|
413
|
-
puts '-recent show 1st recent hits'
|
414
|
-
puts '-hits show 1st hit count'
|
415
|
-
end
|
416
|
-
|
417
|
-
$debug = if_switch('-d')
|
418
|
-
|
419
|
-
if if_switch('-h')
|
420
|
-
show_help
|
421
|
-
elsif if_switch('-s')
|
422
|
-
launch_server(get_switch('-p'), get_switch('-f'))
|
423
|
-
elsif if_switch('-b') || if_switch('-bp')
|
424
|
-
limit = -1
|
425
|
-
limit = get_switch('-l').to_i if get_switch('-l')
|
426
|
-
@i = ClWiki::Indexer.new
|
427
|
-
$wiki_conf.access_log_index = false
|
428
|
-
@i.build(limit, if_switch('-bp'))
|
429
|
-
@i.save
|
430
|
-
else
|
431
|
-
puts 'loading index...'
|
432
|
-
@i = ClWiki::Indexer.new
|
433
|
-
$wiki_conf.access_log_index = false
|
434
|
-
#@i.load
|
435
|
-
if get_switch('-q')
|
436
|
-
do_search(get_switch('-q'))
|
437
|
-
elsif if_switch('-recent')
|
438
|
-
do_recent
|
439
|
-
elsif if_switch('-hits')
|
440
|
-
do_hits
|
441
|
-
elsif get_switch('-r')
|
442
|
-
do_page_exists(get_switch('-r'))
|
443
|
-
elsif if_switch('-dump')
|
444
|
-
do_index_dump
|
445
|
-
elsif if_switch('-x')
|
446
|
-
@i.index_page(get_switch('-x'))
|
447
|
-
@i.save
|
448
|
-
else
|
449
|
-
begin
|
450
|
-
print 'input search term (empty to quit): '
|
451
|
-
search = gets.chomp
|
452
|
-
break if search.empty?
|
453
|
-
do_search(search)
|
454
|
-
end while true
|
455
|
-
end
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|