clwiki 2.0.0

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 (134) hide show
  1. data/LICENSE +31 -0
  2. data/Rakefile +53 -0
  3. data/app/assets/javascripts/cl_wiki/application.js +29 -0
  4. data/app/assets/stylesheets/cl_wiki/application.css +103 -0
  5. data/app/controllers/cl_wiki/application_controller.rb +4 -0
  6. data/app/controllers/cl_wiki/page_controller.rb +106 -0
  7. data/app/helpers/cl_wiki/application_helper.rb +4 -0
  8. data/app/views/cl_wiki/page/edit.html.erb +8 -0
  9. data/app/views/cl_wiki/page/find.html.erb +27 -0
  10. data/app/views/cl_wiki/page/recent.html.erb +4 -0
  11. data/app/views/cl_wiki/page/recent.rss.builder +18 -0
  12. data/app/views/cl_wiki/page/show.html.erb +1 -0
  13. data/app/views/layouts/cl_wiki/application.html.erb +14 -0
  14. data/config/clwiki.yml +73 -0
  15. data/config/initializers/clwiki.rb +9 -0
  16. data/config/routes.rb +15 -0
  17. data/lib/cl_wiki.rb +12 -0
  18. data/lib/cl_wiki/configuration.rb +171 -0
  19. data/lib/cl_wiki/engine.rb +5 -0
  20. data/lib/cl_wiki/file.rb +171 -0
  21. data/lib/cl_wiki/find_in_file.rb +33 -0
  22. data/lib/cl_wiki/format/format.blockquote.rb +15 -0
  23. data/lib/cl_wiki/format/format.graphviz.digraph.rb +16 -0
  24. data/lib/cl_wiki/format/format.opml.rb +105 -0
  25. data/lib/cl_wiki/format/format.pre.blockquote.rb +15 -0
  26. data/lib/cl_wiki/format/format.simpletable.rb +25 -0
  27. data/lib/cl_wiki/index.rb +455 -0
  28. data/lib/cl_wiki/page.rb +516 -0
  29. data/lib/cl_wiki/tools/cron.reminders.rb +241 -0
  30. data/lib/cl_wiki/tools/movepages.rb +27 -0
  31. data/lib/cl_wiki/tools/pagestomove.txt +56 -0
  32. data/lib/cl_wiki/tools/rublog/clWiki.rb +62 -0
  33. data/lib/cl_wiki/tools/rublog/readme.txt +2 -0
  34. data/lib/cl_wiki/tools/singlepage.rb +58 -0
  35. data/lib/cl_wiki/tools/test/singlepagetest.rb +9 -0
  36. data/lib/cl_wiki/tools/thunderbird.rb +23 -0
  37. data/lib/cl_wiki/version.rb +3 -0
  38. data/test/dummy/README.rdoc +259 -0
  39. data/test/dummy/Rakefile +6 -0
  40. data/test/dummy/app/assets/javascripts/application.js +16 -0
  41. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  42. data/test/dummy/app/controllers/application_controller.rb +5 -0
  43. data/test/dummy/app/helpers/application_helper.rb +2 -0
  44. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  45. data/test/dummy/config.ru +4 -0
  46. data/test/dummy/config/application.rb +37 -0
  47. data/test/dummy/config/boot.rb +9 -0
  48. data/test/dummy/config/database.yml +25 -0
  49. data/test/dummy/config/environment.rb +5 -0
  50. data/test/dummy/config/environments/development.rb +34 -0
  51. data/test/dummy/config/environments/production.rb +81 -0
  52. data/test/dummy/config/environments/test.rb +36 -0
  53. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  54. data/test/dummy/config/initializers/inflections.rb +16 -0
  55. data/test/dummy/config/initializers/locale.rb +7 -0
  56. data/test/dummy/config/initializers/mime_types.rb +5 -0
  57. data/test/dummy/config/initializers/secret_token.rb +12 -0
  58. data/test/dummy/config/initializers/session_store.rb +3 -0
  59. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  60. data/test/dummy/config/locales/en.yml +23 -0
  61. data/test/dummy/config/routes.rb +5 -0
  62. data/test/dummy/db/development.sqlite3 +0 -0
  63. data/test/dummy/log/development.log +1963 -0
  64. data/test/dummy/log/test.log +1340 -0
  65. data/test/dummy/public/404.html +27 -0
  66. data/test/dummy/public/422.html +26 -0
  67. data/test/dummy/public/500.html +26 -0
  68. data/test/dummy/public/favicon.ico +0 -0
  69. data/test/dummy/script/rails +6 -0
  70. data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  71. data/test/dummy/tmp/cache/assets/development/sprockets/17ea26cbf693e610505bdc24be534847 +0 -0
  72. data/test/dummy/tmp/cache/assets/development/sprockets/1883f3d938430da389005555d27c0bad +0 -0
  73. data/test/dummy/tmp/cache/assets/development/sprockets/1b9132b83b822937e80ef987f7da1760 +0 -0
  74. data/test/dummy/tmp/cache/assets/development/sprockets/259fb44b87b29348087957b4937a1953 +0 -0
  75. data/test/dummy/tmp/cache/assets/development/sprockets/37f8e4f0491b6401433af823dfb471d9 +0 -0
  76. data/test/dummy/tmp/cache/assets/development/sprockets/48d7a2c40083020f9e7d97d4d73f26fa +0 -0
  77. data/test/dummy/tmp/cache/assets/development/sprockets/4b0bfb6eb9d6983eb9defa58dd96dae4 +0 -0
  78. data/test/dummy/tmp/cache/assets/development/sprockets/4da11f1195532cd7b80f2dde7cf843d5 +0 -0
  79. data/test/dummy/tmp/cache/assets/development/sprockets/57347ee373d74c87e1515a059c701085 +0 -0
  80. data/test/dummy/tmp/cache/assets/development/sprockets/61b40e54192bf61d97ce2aef71e7d694 +0 -0
  81. data/test/dummy/tmp/cache/assets/development/sprockets/633b01c5a65fcd6457baf30d1cc94148 +0 -0
  82. data/test/dummy/tmp/cache/assets/development/sprockets/6ad8bb345cc43acfca78c043b7bfefae +0 -0
  83. data/test/dummy/tmp/cache/assets/development/sprockets/87a335a43cb68a253dea2b6c0269a4d6 +0 -0
  84. data/test/dummy/tmp/cache/assets/development/sprockets/8a38b2f4390e68175dae4b4b1c144e2e +0 -0
  85. data/test/dummy/tmp/cache/assets/development/sprockets/8ddc1a668acec35c2707ebc47768f59c +0 -0
  86. data/test/dummy/tmp/cache/assets/development/sprockets/8f5ab7b6f73a1e9f16421b299134e39a +0 -0
  87. data/test/dummy/tmp/cache/assets/development/sprockets/9835aec4bc0277b8f02d0e86c977fdba +0 -0
  88. data/test/dummy/tmp/cache/assets/development/sprockets/ae4f771558859f9c120a0f22328e8521 +0 -0
  89. data/test/dummy/tmp/cache/assets/development/sprockets/afed0eaa6fcf7a263498a08a5cc02cf0 +0 -0
  90. data/test/dummy/tmp/cache/assets/development/sprockets/be786e5567855cdc6817603725fd1b8d +0 -0
  91. data/test/dummy/tmp/cache/assets/development/sprockets/bf9b02df32690fb2a936818715d611f3 +0 -0
  92. data/test/dummy/tmp/cache/assets/development/sprockets/c2bf9d91a6a2786263b9912b948f435d +0 -0
  93. data/test/dummy/tmp/cache/assets/development/sprockets/ce4c918439a53cb89d02313ed990d5de +0 -0
  94. data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  95. data/test/dummy/tmp/cache/assets/development/sprockets/d9c791f08c547f30854ad746a89b0bb5 +0 -0
  96. data/test/dummy/tmp/cache/assets/development/sprockets/ddc3a7b5173ff5c911a53004b56e4305 +0 -0
  97. data/test/dummy/tmp/cache/assets/development/sprockets/dfed1391742203d15f08cb07173bccba +0 -0
  98. data/test/dummy/tmp/cache/assets/development/sprockets/e282b6bdaa0e070754f8558b9de5e417 +0 -0
  99. data/test/dummy/tmp/cache/assets/development/sprockets/f0e957c30443ade693f73ff470f0f894 +0 -0
  100. data/test/dummy/tmp/cache/assets/development/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5 +0 -0
  101. data/test/dummy/tmp/cache/assets/development/sprockets/fb41fedee86fd2d10ddd938bf5d68eb7 +0 -0
  102. data/test/dummy/tmp/cache/assets/test/sprockets/1883f3d938430da389005555d27c0bad +0 -0
  103. data/test/dummy/tmp/cache/assets/test/sprockets/48d7a2c40083020f9e7d97d4d73f26fa +0 -0
  104. data/test/dummy/tmp/cache/assets/test/sprockets/61b40e54192bf61d97ce2aef71e7d694 +0 -0
  105. data/test/dummy/tmp/cache/assets/test/sprockets/8f5ab7b6f73a1e9f16421b299134e39a +0 -0
  106. data/test/dummy/tmp/cache/assets/test/sprockets/9835aec4bc0277b8f02d0e86c977fdba +0 -0
  107. data/test/dummy/tmp/cache/assets/test/sprockets/ae4f771558859f9c120a0f22328e8521 +0 -0
  108. data/test/dummy/tmp/cache/assets/test/sprockets/be786e5567855cdc6817603725fd1b8d +0 -0
  109. data/test/dummy/tmp/cache/assets/test/sprockets/c2bf9d91a6a2786263b9912b948f435d +0 -0
  110. data/test/dummy/tmp/cache/assets/test/sprockets/ce4c918439a53cb89d02313ed990d5de +0 -0
  111. data/test/dummy/tmp/cache/assets/test/sprockets/e282b6bdaa0e070754f8558b9de5e417 +0 -0
  112. data/test/dummy/tmp/cache/assets/test/sprockets/f0e957c30443ade693f73ff470f0f894 +0 -0
  113. data/test/dummy/tmp/cache/assets/test/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5 +0 -0
  114. data/test/dummy/tmp/testrep/FooBar.txt +1 -0
  115. data/test/dummy/tmp/testrep/FrontPage.txt +1 -0
  116. data/test/dummy/tmp/testrep/QuuxBaz.txt +1 -0
  117. data/test/dummy/wikirep/AboutClWiki.txt +31 -0
  118. data/test/dummy/wikirep/ChrisMorris.txt +4 -0
  119. data/test/dummy/wikirep/DotTest.txt +6 -0
  120. data/test/dummy/wikirep/FooBar.txt +4 -0
  121. data/test/dummy/wikirep/FooBarQuux.txt +4 -0
  122. data/test/dummy/wikirep/FrontPage.txt +14 -0
  123. data/test/dummy/wikirep/HtmlAreaTest.txt +4 -0
  124. data/test/dummy/wikirep/PreTagsTest.txt +27 -0
  125. data/test/dummy/wikirep/TheMan.txt +4 -0
  126. data/test/helpers/wiki_helper_test.rb +4 -0
  127. data/test/lib/clwiki/clwiki_test_helper.rb +3 -0
  128. data/test/lib/clwiki/file_test.rb +93 -0
  129. data/test/lib/clwiki/find_in_file_test.rb +111 -0
  130. data/test/lib/clwiki/index_test.rb +32 -0
  131. data/test/lib/clwiki/page_test.rb +239 -0
  132. data/test/lib/clwiki/test_base.rb +25 -0
  133. data/test/test_helper.rb +15 -0
  134. metadata +312 -0
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/clwiki_test_helper'
2
+ require 'index'
3
+
4
+ class TestClWikiIndex < TestBase
5
+ def test_indexing_files_with_same_mod_timestamp
6
+ @temp_sub_dir = File.join(@temp_dir, 'SubPage')
7
+ file_a = File.join(@temp_dir, 'TestFileA.txt')
8
+ file_b = File.join(@temp_dir, 'TestFileB.txt')
9
+ file_c = File.join(@temp_sub_dir, 'TestSubPageA.txt')
10
+ [file_a, file_b, file_c].each do |fn|
11
+ FileUtils.makedirs(File.dirname(fn))
12
+ File.open(fn, 'w+') do |f| f.puts "sample file" end
13
+ end
14
+ # couldn't find a way to set the mtime quickly, so just trusting
15
+ # the above code will run within the same second...
16
+ assert_equal(File.mtime(file_a), File.mtime(file_b))
17
+ assert_equal(File.mtime(file_a), File.mtime(file_c))
18
+ @mtime = File.mtime(file_a)
19
+ @i = ClWiki::Indexer.new
20
+ $wiki_conf.access_log_index = false
21
+ Dir.chdir(@temp_dir) do
22
+ # puts .dat files into the tmp dir
23
+ @i.build
24
+ end
25
+ recent = @i.recent
26
+ assert_equal(1, recent.length)
27
+ first = recent[0]
28
+ assert_equal(2, first.length)
29
+ assert_equal(@mtime, first[0])
30
+ assert_equal(["/SubPage/TestSubPageA", '/TestFileA', '/TestFileB'], first[1])
31
+ end
32
+ end
@@ -0,0 +1,239 @@
1
+ require File.dirname(__FILE__) + '/clwiki_test_helper'
2
+ require 'page'
3
+ require 'tmpdir'
4
+
5
+ # stub this out for testing
6
+ class ClWiki::Page
7
+ @@page_exists = false
8
+ @@page_globally_exists = false
9
+
10
+ def self.set_page_exists(value)
11
+ @@page_exists = value
12
+ end
13
+
14
+ def self.page_exists?(pageFullName)
15
+ @@page_exists
16
+ end
17
+ end
18
+
19
+ class TestClWikiPage < TestBase
20
+ def test_wiki_page
21
+ newPage = ClWiki::Page.new('/NewPage')
22
+ end
23
+
24
+ def do_test_convert_to_link(pageName, pagePath='/FrontPage')
25
+ f = ClWiki::PageFormatter.new(nil, pagePath)
26
+ # fullPageName = f.expand_path(pageName, pagePath)
27
+ ClWiki::Page.set_page_exists(false)
28
+ $wiki_conf.editable = true
29
+ assert_equal(
30
+ pageName + "<a href='#{pageName}/edit'>?</a>",
31
+ f.convertToLink(pageName))
32
+ $wiki_conf.editable = false
33
+ assert_equal(
34
+ pageName,
35
+ f.convertToLink(pageName))
36
+ ClWiki::Page.set_page_exists(true)
37
+
38
+ # now that links serve up a separate link for each page in the
39
+ # hierarchy, testing this is cumbersome - and there's already
40
+ # tests for testFormatLinkPages which exercise this same thing
41
+
42
+ # assert_equal(
43
+ # "<a href=clwikicgi.rb?page=" + fullPageName + ">" + pageName + "</a>",
44
+ # f.convertToLink(pageName))
45
+ end
46
+
47
+ def test_convert_to_link_main
48
+ do_test_convert_to_link("TestPage")
49
+ end
50
+
51
+ def test_convert_to_link_sub_bs
52
+ do_test_convert_to_link("TestPage\TestSubPage")
53
+ end
54
+
55
+ def test_convert_to_link_sub_fs
56
+ do_test_convert_to_link("TestPage/TestSubPage")
57
+ end
58
+
59
+ def test_convert_to_link_bs_sub
60
+ do_test_convert_to_link("\TestPage/TestSubPage")
61
+ end
62
+
63
+ def test_convert_to_link_fs_sub
64
+ do_test_convert_to_link("/TestPage/TestSubPage")
65
+ end
66
+
67
+ def test_convert_to_link_fs_sub_sub
68
+ do_test_convert_to_link("/TestPage/TestSubPage\NotherSubPage")
69
+ end
70
+
71
+ def test_convert_to_link_fs_sub_sub2
72
+ do_test_convert_to_link("/TestPage/TestSubPage/NotherSubPage")
73
+ end
74
+
75
+ def test_convert_to_link_collapse_path
76
+ do_test_convert_to_link("TestSubPage/NotherSubPage", "/TestPage/TestSubPage")
77
+ do_test_convert_to_link("SubPage/NotherSubPage", "/TestPage/SubPage/SubPage")
78
+ end
79
+
80
+ def test_gsub_words
81
+ original =
82
+ 'test page PageName ' +
83
+ 'PageName/SubPage PageName\SubPage\SubPage ' +
84
+ '/PageName/SubPage \PageName\SubPage\SubPage ' +
85
+ 'test.thing test, <tagger> </tagger> oops>whoops ' +
86
+ 'oops<thing>bleh hen<butter '
87
+
88
+ expected_results =
89
+ %w(test page PageName
90
+ PageName SubPage PageName SubPage SubPage PageName SubPage PageName SubPage SubPage
91
+ test thing test <tagger> </tagger> oops whoops
92
+ oops <thing> bleh hen butter)
93
+
94
+ actual_results = Array.new
95
+ f = ClWiki::PageFormatter.new(original)
96
+ f.gsubWords { |word| actual_results << word }
97
+ assert_equal(expected_results, actual_results)
98
+ end
99
+
100
+ def do_test_format_links(content, expected_content, page_exists=true)
101
+ $wiki_conf.editable = true
102
+ f = ClWiki::PageFormatter.new(content, nil)
103
+ ClWiki::Page.set_page_exists(page_exists)
104
+ assert_equal(expected_content, f.formatLinks, "content: #{content} page_exists: #{page_exists} editable")
105
+
106
+ $wiki_conf.editable = false
107
+ f = ClWiki::PageFormatter.new(content, nil)
108
+ ClWiki::Page.set_page_exists(page_exists)
109
+ if page_exists
110
+ assert_equal(expected_content, f.formatLinks, "content: #{content} page_exists: #{page_exists} not editable")
111
+ else
112
+ assert_equal(content, f.formatLinks, "content: #{content} page_exists: #{page_exists} not editable")
113
+ end
114
+ end
115
+
116
+ def test_format_link_pages
117
+ do_test_format_links('TestPage', "TestPage<a href='TestPage/edit'>?</a>", false)
118
+ do_test_format_links('TestPage', "<a href='TestPage'>TestPage</a>", true)
119
+
120
+ # this is an important test. The scanning includes some punctuation
121
+ # as word characters, but not others. Comma ain't one of them, so this
122
+ # makes sure the division of characters is working right.
123
+ do_test_format_links('TestPage,', "<a href='TestPage'>TestPage</a>,", true)
124
+
125
+ # the current parsing skips over the brackets, so the tags
126
+ # are returned intact. IE 5 just ignores them.
127
+ # In the future I need to code no wiki links within
128
+ # brackets which means parsing them.
129
+ do_test_format_links('<NoWikiLinks>TestPage</NoWikiLinks>', "TestPage")
130
+
131
+ # No WikiLinks within < >, to avoid problems with href
132
+ do_test_format_links('<a href="www.NotAWikiPage.com">some link</a>', '<a href="www.NotAWikiPage.com">some link</a>')
133
+
134
+ do_test_format_links('/TestPage', "/<a href='TestPage'>TestPage</a>", true)
135
+ do_test_format_links('TestPage/TestSubPage', "<a href='TestPage'>TestPage</a>/<a href='TestSubPage'>TestSubPage</a>", true)
136
+ do_test_format_links('/TestPage/TestSubPage', "/<a href='TestPage'>TestPage</a>/<a href='TestSubPage'>TestSubPage</a>", true)
137
+ do_test_format_links('//TestPage/TestSubPage', "//<a href='TestPage'>TestPage</a>/<a href='TestSubPage'>TestSubPage</a>", true)
138
+ end
139
+
140
+ def test_is_wiki_name
141
+ f = ClWiki::PageFormatter.new
142
+ assert(f.is_wiki_name?("WikiName"))
143
+ assert(!f.is_wiki_name?("WikiName,"))
144
+ assert(!f.is_wiki_name?("Wikiname"))
145
+ assert(!f.is_wiki_name?("wIkiName"))
146
+ assert(!f.is_wiki_name?("<h1>wikiName</h1><br>Other"))
147
+ assert(!f.is_wiki_name?("<WikiName>"))
148
+ assert(!f.is_wiki_name?("WIKI"))
149
+ assert(f.is_wiki_name?('WikiName/SubWikiName'))
150
+ assert(f.is_wiki_name?('WikiName\SubWikiName'))
151
+ assert(f.is_wiki_name?('/WikiName/SubWikiName'))
152
+ assert(!f.is_wiki_name?('./WikiName/SubWikiName'))
153
+ assert(!f.is_wiki_name?('/.WikiName/SubWikiName'))
154
+ assert(!f.is_wiki_name?('/Wiki.Name/SubWikiName'))
155
+ assert(!f.is_wiki_name?('WikiName/Notwikiname'))
156
+ assert(!f.is_wiki_name?('Notwikiname/WikiName'))
157
+ assert(!f.is_wiki_name?('WikiName/WikiName/Notwikiname'))
158
+ assert(!f.is_wiki_name?('/'))
159
+ assert(!f.is_wiki_name?('//'))
160
+ end
161
+
162
+ def test_custom_formatter
163
+ page = ClWiki::Page.new('MyPage')
164
+ page.update_content("[]\n[/]", page.mtime)
165
+ assert_match /#{Regexp.escape("<blockquote>\n</blockquote>")}/, page.read_content(false)
166
+ end
167
+
168
+ def test_custom_formatter_path_config
169
+ Dir.mktmpdir do |dir|
170
+ $wiki_conf.custom_formatter_load_path << dir
171
+ File.open(File.join(dir, 'format.reverser.rb'), 'w') do |f|
172
+ f.print <<-RUBY
173
+ class ReverseText < ClWiki::CustomFormatter
174
+ def ReverseText.match_re
175
+ /.*/
176
+ end
177
+
178
+ def ReverseText.format_content(content, page)
179
+ if content
180
+ content.reverse
181
+ end
182
+ end
183
+ end
184
+
185
+ ClWiki::CustomFormatters.instance.register(ReverseText)
186
+ RUBY
187
+ end
188
+ page = ClWiki::Page.new('RevPage')
189
+ page.update_content("awesome", page.mtime)
190
+ assert_match /emosewa/, page.read_content(false)
191
+ end
192
+ end
193
+ end
194
+
195
+ class TestClWikiPageFormatter < TestBase
196
+ def test_only_html
197
+ assert(ClWiki::PageFormatter.only_html('<tag>'))
198
+ assert(!ClWiki::PageFormatter.only_html('<tag'))
199
+ assert(!ClWiki::PageFormatter.only_html('tag>'))
200
+ assert(!ClWiki::PageFormatter.only_html('tag'))
201
+ assert(!ClWiki::PageFormatter.only_html(''))
202
+ assert(!ClWiki::PageFormatter.only_html(' '))
203
+ assert(ClWiki::PageFormatter.only_html(' < t a g > '))
204
+ assert(!ClWiki::PageFormatter.only_html('<t>a<g>'))
205
+
206
+ # if this passes, method is misnamed, now
207
+ assert( ClWiki::PageFormatter.only_html('<h1>a</h1>'))
208
+ assert( ClWiki::PageFormatter.only_html(' <h5> a </h5> '))
209
+ assert( ClWiki::PageFormatter.only_html(' <h5> <a href> </h5> '))
210
+ assert(!ClWiki::PageFormatter.only_html(' <h5> <a href> </h5> stuff '))
211
+ end
212
+ end
213
+
214
+ class TestGlobalHitReducer < TestBase
215
+ def test_global_hit_reducer
216
+ # for global links, we want matches to be limited to exact matches.
217
+ # If //RootPage/SubPage has seven children:
218
+ #
219
+ # //RootPage/SubPage/ChildOne
220
+ # //RootPage/SubPage/ChildTwo
221
+ # ...
222
+ #
223
+ # and the content is SubPage, we don't want a global link to the
224
+ # find results of SubPage, but a direct link to //RootPage/SubPage.
225
+ # If there's also a //OtherPage/SubPage, then the global link in this
226
+ # case will still go to Find Results.
227
+
228
+ hits = ['//RootPage/SubPage', '//RootPage/SubPage/ChildOne']
229
+ reduced = ClWiki::GlobalHitReducer.reduce_to_exact_if_exists('SubPage', hits)
230
+ assert_equal(['//RootPage/SubPage'], reduced)
231
+
232
+ reduced = ClWiki::GlobalHitReducer.reduce_to_exact_if_exists('SubPa', hits)
233
+ assert_equal(hits, reduced)
234
+
235
+ hits = ['//RootPage/SubPage', '//OtherPage/SubPage']
236
+ reduced = ClWiki::GlobalHitReducer.reduce_to_exact_if_exists('SubPage', hits)
237
+ assert_equal(hits, reduced)
238
+ end
239
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/clwiki_test_helper'
2
+
3
+ require 'rubygems'
4
+ gem 'clutil'
5
+ require 'cl/util/test'
6
+ require 'configuration'
7
+
8
+ # TODO: Refactor away to module or somesuch
9
+ class TestBase < TempDirTest
10
+ def set_temp_dir
11
+ @temp_dir = '/tmp/clwiki'
12
+ @test_wiki_path = @temp_dir
13
+ $wiki_path = @test_wiki_path
14
+ $wiki_conf = ClWiki::Configuration.new
15
+ $wiki_conf.wiki_path = $wiki_path
16
+ $wiki_conf.useIndex = ClWiki::Configuration::USE_INDEX_NO
17
+ end
18
+
19
+ # to ward off the new Test::Unit detection of classes with no test
20
+ # methods
21
+ def default_test
22
+ super unless(self.class == TestBase)
23
+ end
24
+ end
25
+
@@ -0,0 +1,15 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
metadata ADDED
@@ -0,0 +1,312 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: clwiki
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - chrismo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: clutil
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: clindex
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Old, tired, crappy wiki, semi-reborn as a Rails 4 Engine.
47
+ email:
48
+ - chrismo@clabs.org
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - app/assets/javascripts/cl_wiki/application.js
54
+ - app/assets/stylesheets/cl_wiki/application.css
55
+ - app/controllers/cl_wiki/application_controller.rb
56
+ - app/controllers/cl_wiki/page_controller.rb
57
+ - app/helpers/cl_wiki/application_helper.rb
58
+ - app/views/cl_wiki/page/edit.html.erb
59
+ - app/views/cl_wiki/page/find.html.erb
60
+ - app/views/cl_wiki/page/recent.html.erb
61
+ - app/views/cl_wiki/page/recent.rss.builder
62
+ - app/views/cl_wiki/page/show.html.erb
63
+ - app/views/layouts/cl_wiki/application.html.erb
64
+ - config/clwiki.yml
65
+ - config/initializers/clwiki.rb
66
+ - config/routes.rb
67
+ - lib/cl_wiki/configuration.rb
68
+ - lib/cl_wiki/engine.rb
69
+ - lib/cl_wiki/file.rb
70
+ - lib/cl_wiki/find_in_file.rb
71
+ - lib/cl_wiki/format/format.blockquote.rb
72
+ - lib/cl_wiki/format/format.graphviz.digraph.rb
73
+ - lib/cl_wiki/format/format.opml.rb
74
+ - lib/cl_wiki/format/format.pre.blockquote.rb
75
+ - lib/cl_wiki/format/format.simpletable.rb
76
+ - lib/cl_wiki/index.rb
77
+ - lib/cl_wiki/page.rb
78
+ - lib/cl_wiki/tools/cron.reminders.rb
79
+ - lib/cl_wiki/tools/movepages.rb
80
+ - lib/cl_wiki/tools/pagestomove.txt
81
+ - lib/cl_wiki/tools/rublog/clWiki.rb
82
+ - lib/cl_wiki/tools/rublog/readme.txt
83
+ - lib/cl_wiki/tools/singlepage.rb
84
+ - lib/cl_wiki/tools/test/singlepagetest.rb
85
+ - lib/cl_wiki/tools/thunderbird.rb
86
+ - lib/cl_wiki/version.rb
87
+ - lib/cl_wiki.rb
88
+ - LICENSE
89
+ - Rakefile
90
+ - test/dummy/app/assets/javascripts/application.js
91
+ - test/dummy/app/assets/stylesheets/application.css
92
+ - test/dummy/app/controllers/application_controller.rb
93
+ - test/dummy/app/helpers/application_helper.rb
94
+ - test/dummy/app/views/layouts/application.html.erb
95
+ - test/dummy/config/application.rb
96
+ - test/dummy/config/boot.rb
97
+ - test/dummy/config/database.yml
98
+ - test/dummy/config/environment.rb
99
+ - test/dummy/config/environments/development.rb
100
+ - test/dummy/config/environments/production.rb
101
+ - test/dummy/config/environments/test.rb
102
+ - test/dummy/config/initializers/backtrace_silencers.rb
103
+ - test/dummy/config/initializers/inflections.rb
104
+ - test/dummy/config/initializers/locale.rb
105
+ - test/dummy/config/initializers/mime_types.rb
106
+ - test/dummy/config/initializers/secret_token.rb
107
+ - test/dummy/config/initializers/session_store.rb
108
+ - test/dummy/config/initializers/wrap_parameters.rb
109
+ - test/dummy/config/locales/en.yml
110
+ - test/dummy/config/routes.rb
111
+ - test/dummy/config.ru
112
+ - test/dummy/db/development.sqlite3
113
+ - test/dummy/log/development.log
114
+ - test/dummy/log/test.log
115
+ - test/dummy/public/404.html
116
+ - test/dummy/public/422.html
117
+ - test/dummy/public/500.html
118
+ - test/dummy/public/favicon.ico
119
+ - test/dummy/Rakefile
120
+ - test/dummy/README.rdoc
121
+ - test/dummy/script/rails
122
+ - test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705
123
+ - test/dummy/tmp/cache/assets/development/sprockets/17ea26cbf693e610505bdc24be534847
124
+ - test/dummy/tmp/cache/assets/development/sprockets/1883f3d938430da389005555d27c0bad
125
+ - test/dummy/tmp/cache/assets/development/sprockets/1b9132b83b822937e80ef987f7da1760
126
+ - test/dummy/tmp/cache/assets/development/sprockets/259fb44b87b29348087957b4937a1953
127
+ - test/dummy/tmp/cache/assets/development/sprockets/37f8e4f0491b6401433af823dfb471d9
128
+ - test/dummy/tmp/cache/assets/development/sprockets/48d7a2c40083020f9e7d97d4d73f26fa
129
+ - test/dummy/tmp/cache/assets/development/sprockets/4b0bfb6eb9d6983eb9defa58dd96dae4
130
+ - test/dummy/tmp/cache/assets/development/sprockets/4da11f1195532cd7b80f2dde7cf843d5
131
+ - test/dummy/tmp/cache/assets/development/sprockets/57347ee373d74c87e1515a059c701085
132
+ - test/dummy/tmp/cache/assets/development/sprockets/61b40e54192bf61d97ce2aef71e7d694
133
+ - test/dummy/tmp/cache/assets/development/sprockets/633b01c5a65fcd6457baf30d1cc94148
134
+ - test/dummy/tmp/cache/assets/development/sprockets/6ad8bb345cc43acfca78c043b7bfefae
135
+ - test/dummy/tmp/cache/assets/development/sprockets/87a335a43cb68a253dea2b6c0269a4d6
136
+ - test/dummy/tmp/cache/assets/development/sprockets/8a38b2f4390e68175dae4b4b1c144e2e
137
+ - test/dummy/tmp/cache/assets/development/sprockets/8ddc1a668acec35c2707ebc47768f59c
138
+ - test/dummy/tmp/cache/assets/development/sprockets/8f5ab7b6f73a1e9f16421b299134e39a
139
+ - test/dummy/tmp/cache/assets/development/sprockets/9835aec4bc0277b8f02d0e86c977fdba
140
+ - test/dummy/tmp/cache/assets/development/sprockets/ae4f771558859f9c120a0f22328e8521
141
+ - test/dummy/tmp/cache/assets/development/sprockets/afed0eaa6fcf7a263498a08a5cc02cf0
142
+ - test/dummy/tmp/cache/assets/development/sprockets/be786e5567855cdc6817603725fd1b8d
143
+ - test/dummy/tmp/cache/assets/development/sprockets/bf9b02df32690fb2a936818715d611f3
144
+ - test/dummy/tmp/cache/assets/development/sprockets/c2bf9d91a6a2786263b9912b948f435d
145
+ - test/dummy/tmp/cache/assets/development/sprockets/ce4c918439a53cb89d02313ed990d5de
146
+ - test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6
147
+ - test/dummy/tmp/cache/assets/development/sprockets/d9c791f08c547f30854ad746a89b0bb5
148
+ - test/dummy/tmp/cache/assets/development/sprockets/ddc3a7b5173ff5c911a53004b56e4305
149
+ - test/dummy/tmp/cache/assets/development/sprockets/dfed1391742203d15f08cb07173bccba
150
+ - test/dummy/tmp/cache/assets/development/sprockets/e282b6bdaa0e070754f8558b9de5e417
151
+ - test/dummy/tmp/cache/assets/development/sprockets/f0e957c30443ade693f73ff470f0f894
152
+ - test/dummy/tmp/cache/assets/development/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5
153
+ - test/dummy/tmp/cache/assets/development/sprockets/fb41fedee86fd2d10ddd938bf5d68eb7
154
+ - test/dummy/tmp/cache/assets/test/sprockets/1883f3d938430da389005555d27c0bad
155
+ - test/dummy/tmp/cache/assets/test/sprockets/48d7a2c40083020f9e7d97d4d73f26fa
156
+ - test/dummy/tmp/cache/assets/test/sprockets/61b40e54192bf61d97ce2aef71e7d694
157
+ - test/dummy/tmp/cache/assets/test/sprockets/8f5ab7b6f73a1e9f16421b299134e39a
158
+ - test/dummy/tmp/cache/assets/test/sprockets/9835aec4bc0277b8f02d0e86c977fdba
159
+ - test/dummy/tmp/cache/assets/test/sprockets/ae4f771558859f9c120a0f22328e8521
160
+ - test/dummy/tmp/cache/assets/test/sprockets/be786e5567855cdc6817603725fd1b8d
161
+ - test/dummy/tmp/cache/assets/test/sprockets/c2bf9d91a6a2786263b9912b948f435d
162
+ - test/dummy/tmp/cache/assets/test/sprockets/ce4c918439a53cb89d02313ed990d5de
163
+ - test/dummy/tmp/cache/assets/test/sprockets/e282b6bdaa0e070754f8558b9de5e417
164
+ - test/dummy/tmp/cache/assets/test/sprockets/f0e957c30443ade693f73ff470f0f894
165
+ - test/dummy/tmp/cache/assets/test/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5
166
+ - test/dummy/tmp/testrep/FooBar.txt
167
+ - test/dummy/tmp/testrep/FrontPage.txt
168
+ - test/dummy/tmp/testrep/QuuxBaz.txt
169
+ - test/dummy/wikirep/AboutClWiki.txt
170
+ - test/dummy/wikirep/ChrisMorris.txt
171
+ - test/dummy/wikirep/DotTest.txt
172
+ - test/dummy/wikirep/FooBar.txt
173
+ - test/dummy/wikirep/FooBarQuux.txt
174
+ - test/dummy/wikirep/FrontPage.txt
175
+ - test/dummy/wikirep/HtmlAreaTest.txt
176
+ - test/dummy/wikirep/PreTagsTest.txt
177
+ - test/dummy/wikirep/TheMan.txt
178
+ - test/helpers/wiki_helper_test.rb
179
+ - test/lib/clwiki/clwiki_test_helper.rb
180
+ - test/lib/clwiki/file_test.rb
181
+ - test/lib/clwiki/find_in_file_test.rb
182
+ - test/lib/clwiki/index_test.rb
183
+ - test/lib/clwiki/page_test.rb
184
+ - test/lib/clwiki/test_base.rb
185
+ - test/test_helper.rb
186
+ homepage: http://github.com/chrismo/clwiki
187
+ licenses: []
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ segments:
199
+ - 0
200
+ hash: 2392727636455211900
201
+ required_rubygems_version: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ segments:
208
+ - 0
209
+ hash: 2392727636455211900
210
+ requirements: []
211
+ rubyforge_project:
212
+ rubygems_version: 1.8.23
213
+ signing_key:
214
+ specification_version: 3
215
+ summary: Old, tired, crappy wiki, semi-reborn as a Rails 4 Engine.
216
+ test_files:
217
+ - test/dummy/app/assets/javascripts/application.js
218
+ - test/dummy/app/assets/stylesheets/application.css
219
+ - test/dummy/app/controllers/application_controller.rb
220
+ - test/dummy/app/helpers/application_helper.rb
221
+ - test/dummy/app/views/layouts/application.html.erb
222
+ - test/dummy/config/application.rb
223
+ - test/dummy/config/boot.rb
224
+ - test/dummy/config/database.yml
225
+ - test/dummy/config/environment.rb
226
+ - test/dummy/config/environments/development.rb
227
+ - test/dummy/config/environments/production.rb
228
+ - test/dummy/config/environments/test.rb
229
+ - test/dummy/config/initializers/backtrace_silencers.rb
230
+ - test/dummy/config/initializers/inflections.rb
231
+ - test/dummy/config/initializers/locale.rb
232
+ - test/dummy/config/initializers/mime_types.rb
233
+ - test/dummy/config/initializers/secret_token.rb
234
+ - test/dummy/config/initializers/session_store.rb
235
+ - test/dummy/config/initializers/wrap_parameters.rb
236
+ - test/dummy/config/locales/en.yml
237
+ - test/dummy/config/routes.rb
238
+ - test/dummy/config.ru
239
+ - test/dummy/db/development.sqlite3
240
+ - test/dummy/log/development.log
241
+ - test/dummy/log/test.log
242
+ - test/dummy/public/404.html
243
+ - test/dummy/public/422.html
244
+ - test/dummy/public/500.html
245
+ - test/dummy/public/favicon.ico
246
+ - test/dummy/Rakefile
247
+ - test/dummy/README.rdoc
248
+ - test/dummy/script/rails
249
+ - test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705
250
+ - test/dummy/tmp/cache/assets/development/sprockets/17ea26cbf693e610505bdc24be534847
251
+ - test/dummy/tmp/cache/assets/development/sprockets/1883f3d938430da389005555d27c0bad
252
+ - test/dummy/tmp/cache/assets/development/sprockets/1b9132b83b822937e80ef987f7da1760
253
+ - test/dummy/tmp/cache/assets/development/sprockets/259fb44b87b29348087957b4937a1953
254
+ - test/dummy/tmp/cache/assets/development/sprockets/37f8e4f0491b6401433af823dfb471d9
255
+ - test/dummy/tmp/cache/assets/development/sprockets/48d7a2c40083020f9e7d97d4d73f26fa
256
+ - test/dummy/tmp/cache/assets/development/sprockets/4b0bfb6eb9d6983eb9defa58dd96dae4
257
+ - test/dummy/tmp/cache/assets/development/sprockets/4da11f1195532cd7b80f2dde7cf843d5
258
+ - test/dummy/tmp/cache/assets/development/sprockets/57347ee373d74c87e1515a059c701085
259
+ - test/dummy/tmp/cache/assets/development/sprockets/61b40e54192bf61d97ce2aef71e7d694
260
+ - test/dummy/tmp/cache/assets/development/sprockets/633b01c5a65fcd6457baf30d1cc94148
261
+ - test/dummy/tmp/cache/assets/development/sprockets/6ad8bb345cc43acfca78c043b7bfefae
262
+ - test/dummy/tmp/cache/assets/development/sprockets/87a335a43cb68a253dea2b6c0269a4d6
263
+ - test/dummy/tmp/cache/assets/development/sprockets/8a38b2f4390e68175dae4b4b1c144e2e
264
+ - test/dummy/tmp/cache/assets/development/sprockets/8ddc1a668acec35c2707ebc47768f59c
265
+ - test/dummy/tmp/cache/assets/development/sprockets/8f5ab7b6f73a1e9f16421b299134e39a
266
+ - test/dummy/tmp/cache/assets/development/sprockets/9835aec4bc0277b8f02d0e86c977fdba
267
+ - test/dummy/tmp/cache/assets/development/sprockets/ae4f771558859f9c120a0f22328e8521
268
+ - test/dummy/tmp/cache/assets/development/sprockets/afed0eaa6fcf7a263498a08a5cc02cf0
269
+ - test/dummy/tmp/cache/assets/development/sprockets/be786e5567855cdc6817603725fd1b8d
270
+ - test/dummy/tmp/cache/assets/development/sprockets/bf9b02df32690fb2a936818715d611f3
271
+ - test/dummy/tmp/cache/assets/development/sprockets/c2bf9d91a6a2786263b9912b948f435d
272
+ - test/dummy/tmp/cache/assets/development/sprockets/ce4c918439a53cb89d02313ed990d5de
273
+ - test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6
274
+ - test/dummy/tmp/cache/assets/development/sprockets/d9c791f08c547f30854ad746a89b0bb5
275
+ - test/dummy/tmp/cache/assets/development/sprockets/ddc3a7b5173ff5c911a53004b56e4305
276
+ - test/dummy/tmp/cache/assets/development/sprockets/dfed1391742203d15f08cb07173bccba
277
+ - test/dummy/tmp/cache/assets/development/sprockets/e282b6bdaa0e070754f8558b9de5e417
278
+ - test/dummy/tmp/cache/assets/development/sprockets/f0e957c30443ade693f73ff470f0f894
279
+ - test/dummy/tmp/cache/assets/development/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5
280
+ - test/dummy/tmp/cache/assets/development/sprockets/fb41fedee86fd2d10ddd938bf5d68eb7
281
+ - test/dummy/tmp/cache/assets/test/sprockets/1883f3d938430da389005555d27c0bad
282
+ - test/dummy/tmp/cache/assets/test/sprockets/48d7a2c40083020f9e7d97d4d73f26fa
283
+ - test/dummy/tmp/cache/assets/test/sprockets/61b40e54192bf61d97ce2aef71e7d694
284
+ - test/dummy/tmp/cache/assets/test/sprockets/8f5ab7b6f73a1e9f16421b299134e39a
285
+ - test/dummy/tmp/cache/assets/test/sprockets/9835aec4bc0277b8f02d0e86c977fdba
286
+ - test/dummy/tmp/cache/assets/test/sprockets/ae4f771558859f9c120a0f22328e8521
287
+ - test/dummy/tmp/cache/assets/test/sprockets/be786e5567855cdc6817603725fd1b8d
288
+ - test/dummy/tmp/cache/assets/test/sprockets/c2bf9d91a6a2786263b9912b948f435d
289
+ - test/dummy/tmp/cache/assets/test/sprockets/ce4c918439a53cb89d02313ed990d5de
290
+ - test/dummy/tmp/cache/assets/test/sprockets/e282b6bdaa0e070754f8558b9de5e417
291
+ - test/dummy/tmp/cache/assets/test/sprockets/f0e957c30443ade693f73ff470f0f894
292
+ - test/dummy/tmp/cache/assets/test/sprockets/f6b3cbb9c04d5af74d780464c9a34ee5
293
+ - test/dummy/tmp/testrep/FooBar.txt
294
+ - test/dummy/tmp/testrep/FrontPage.txt
295
+ - test/dummy/tmp/testrep/QuuxBaz.txt
296
+ - test/dummy/wikirep/AboutClWiki.txt
297
+ - test/dummy/wikirep/ChrisMorris.txt
298
+ - test/dummy/wikirep/DotTest.txt
299
+ - test/dummy/wikirep/FooBar.txt
300
+ - test/dummy/wikirep/FooBarQuux.txt
301
+ - test/dummy/wikirep/FrontPage.txt
302
+ - test/dummy/wikirep/HtmlAreaTest.txt
303
+ - test/dummy/wikirep/PreTagsTest.txt
304
+ - test/dummy/wikirep/TheMan.txt
305
+ - test/helpers/wiki_helper_test.rb
306
+ - test/lib/clwiki/clwiki_test_helper.rb
307
+ - test/lib/clwiki/file_test.rb
308
+ - test/lib/clwiki/find_in_file_test.rb
309
+ - test/lib/clwiki/index_test.rb
310
+ - test/lib/clwiki/page_test.rb
311
+ - test/lib/clwiki/test_base.rb
312
+ - test/test_helper.rb