clwiki 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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