Soks 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/README.txt +4 -0
  2. data/lib/helpers/default-helpers.rb +94 -56
  3. data/lib/helpers/mail2wiki-helper.rb +8 -6
  4. data/lib/soks-servlet.rb +19 -16
  5. data/lib/soks-storage.rb +6 -7
  6. data/lib/soks-utils.rb +26 -0
  7. data/lib/soks-view.rb +4 -4
  8. data/lib/soks.rb +2 -1
  9. data/templates/default/attachment/newpage.js +2 -2
  10. data/templates/default/attachment/stylesheet.css +14 -3
  11. data/templates/default/content/A%20page%20with%20an%20umlaut%20%F6%20in%20its%20title.textile +1 -0
  12. data/templates/default/content/All%20News.textile +18 -1
  13. data/templates/default/content/Bil%20Kleb.textile +1 -0
  14. data/templates/default/content/Bil.textile +1 -0
  15. data/templates/default/content/Bill%20Wood.textile +3 -0
  16. data/templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +1 -0
  17. data/templates/default/content/Bug%3A%20Type%20a%20title%20here.textile +31 -0
  18. data/templates/default/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +4 -2
  19. data/templates/default/content/Latest%20News.textile +19 -2
  20. data/templates/default/content/List%20of%20changes.textile +43 -0
  21. data/templates/default/content/New%20Recent%20Changes%20class.textile +10 -0
  22. data/templates/default/content/News%3A%20Version%200%2E0%2E6%20Released.textile +13 -0
  23. data/templates/default/content/Planned%20Features.textile +9 -8
  24. data/templates/default/content/README.textile +4 -0
  25. data/templates/default/content/Recent%20Changes%20to%20This%20Site.textile +282 -205
  26. data/templates/default/content/Skorgu.textile +3 -0
  27. data/templates/default/content/ctrl%2Dn.textile +1 -1
  28. data/templates/default/content/sandbox.textile +20 -0
  29. data/templates/default/start.rb +15 -5
  30. data/templates/default/version.txt +1 -1
  31. data/templates/default/views/Page_edit.rhtml +6 -3
  32. data/templates/default/views/frame.rhtml +3 -2
  33. data/test/test_soks-storage.rb +69 -0
  34. data/test/test_soks-utils.rb +84 -0
  35. data/test/test_soks-view.rb +43 -0
  36. metadata +14 -11
  37. data/templates/default/content/Attached%20ruby%20logo.textile +0 -1
  38. data/templates/default/content/Attached%20test%20thing.textile +0 -1
  39. data/templates/default/content/Known%20bugs.textile +0 -18
  40. data/templates/default/content/Picture%20of%20Type%20a%20title%20here.textile +0 -1
  41. data/templates/default/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile +0 -1
  42. data/templates/default/content/Picture%20of%20powered%20by%20ruby%20logo.textile +0 -1
  43. data/templates/default/content/Recent%20News.textile +0 -9
  44. data/templates/default/content/Type%20a%20title%20here.textile +0 -1
@@ -22,7 +22,9 @@
22
22
  </ul>
23
23
  </div>
24
24
 
25
- <form class='editpage' method='post' action='<%= url pagename, "save" %>' >
25
+ <form class='editpage' method='post' action='<%= url pagename, "save" %>' >
26
+ <fieldset>
27
+
26
28
  <div id='edittitle'>
27
29
  Title:
28
30
  <input name='newtitle'
@@ -37,10 +39,11 @@
37
39
  <textarea name='content'
38
40
  rows=30
39
41
  cols=65
40
- onclick="this.value=this.value.replace('Type what you want here and click save','')"
41
- ><%= page.content %></textarea>
42
+ onfocus="if( this.value == 'Type what you want here and click save' ) { this.value = '' }" ><%= page.content %></textarea>
42
43
  </div>
43
44
 
45
+ </fieldset>
46
+
44
47
  Hello <a href='<%= url person %>'><%= person %></a> (Quit browser to log out). Would you like to
45
48
  <input name='action' value='Save Changes' type='submit' accesskey="S" /></form>,
46
49
  <form class='editpage' method='post' action='<%= url pagename %>' >
@@ -27,7 +27,7 @@
27
27
  <input class='search'
28
28
  name='regex'
29
29
  value='Enter word & press return'
30
- onClick="this.value=this.value.replace('Enter word & press return','')"
30
+ onfocus="this.value=this.value.replace('Enter word & press return','')"
31
31
  size='17' />
32
32
  </form>
33
33
 
@@ -39,6 +39,7 @@
39
39
 
40
40
  <% if page %>
41
41
  <% dynamic_links = page.links_to - sidebarpage.links_from - [ sidebarpage ] %>
42
+ <% dynamic_links.delete_if { |page| page.name =~ /^Site Index ([a-z]|Other)\./i } %>
42
43
  <% unless dynamic_links.empty? %>
43
44
  <h2>Pages that link here</h2>
44
45
  <div class='linklist'>
@@ -57,6 +58,6 @@
57
58
  </div>
58
59
 
59
60
  <h2>Powered by <a href='http://www.soks.org'>Soks</a></h2>
60
- </div> <!-- menu --!>
61
+ </div> <!-- menu -->
61
62
  </body>
62
63
  </html>
@@ -0,0 +1,69 @@
1
+ require 'test/unit'
2
+ require 'fileutils'
3
+ require 'soks-storage'
4
+
5
+ class MockWiki
6
+ include WikiFlatFileStore
7
+
8
+ def initialize( folder )
9
+ @folder = folder
10
+ @pages = {}
11
+ end
12
+
13
+ def mutate( pagename )
14
+ p yield( @pages[pagename.downcase] ||= Page.new( pagename ) )
15
+ end
16
+ end
17
+
18
+ class TestWikiFlatFileStore < Test::Unit::TestCase
19
+ include FileUtils
20
+
21
+ def setup
22
+ @wiki = MockWiki.new(folder)
23
+ end
24
+
25
+ def test_rename
26
+ create_file 'a handy file.textile', 'hello world'
27
+ assert_equal( ['a handy file.textile'], files )
28
+ @wiki.move_files_if_names_are_not_url_encoded
29
+ assert_equal( ['a%20handy%20file.textile'], files )
30
+ end
31
+
32
+ def test_remove_unwanted_characters
33
+ create_file 'a&b.textile', 'hello world'
34
+ assert_equal( ['a&b.textile'], files )
35
+ @wiki.move_files_if_names_are_not_url_encoded
36
+ assert_equal( ['ab.textile'], files )
37
+ end
38
+
39
+ def test_avoid_overwriting_on_rename
40
+ create_file 'a&b.textile', 'hello world'
41
+ create_file 'ab.textile', 'hello world'
42
+ assert_equal( ['a&b.textile','ab.textile'], files )
43
+ @wiki.move_files_if_names_are_not_url_encoded
44
+ assert_equal( ['ab.textile','ab1.textile'], files )
45
+ end
46
+
47
+ def teardown
48
+ rmtree( folder )
49
+ end
50
+
51
+ private
52
+
53
+ def create_file( name, content )
54
+ File.open( File.join( folder, name ), 'w') { |f| f.puts content }
55
+ end
56
+
57
+ def files
58
+ Dir.entries( folder ).delete_if { |name| name =~ /^\.+$/ }
59
+ end
60
+
61
+ def folder
62
+ @folder ||= make_folder
63
+ end
64
+
65
+ def make_folder
66
+ mkdir( 'testcontent' )
67
+ 'testcontent'
68
+ end
69
+ end
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'soks-utils'
3
+ require 'fileutils'
3
4
 
4
5
  class ToTimeUnitsMT < Test::Unit::TestCase
5
6
 
@@ -34,4 +35,87 @@ class ToTimeUnitsMT < Test::Unit::TestCase
34
35
  assert_equal( 'year', (60*60*24*30*14).to_time_units )
35
36
  assert_equal( '11 years', (60*60*24*365*11).to_time_units )
36
37
  end
38
+ end
39
+
40
+ class TimeSameDay < Test::Unit::TestCase
41
+
42
+ def test_simple
43
+ other_day = Time.local(2005,04,01,9,30)
44
+ assert( other_day.same_day?( Time.local(2005,04,01,23,59) ) )
45
+ assert( other_day.same_day?( Time.local(2005,04,01,0,0) ) )
46
+ end
47
+
48
+ def test_not_match
49
+ other_day = Time.local(2005,04,01,9,30)
50
+ assert_equal( false, other_day.same_day?( Time.local(2004,04,02,9,30) ) )
51
+ assert_equal( false, other_day.same_day?( Time.local(2004,03,01,9,30) ) )
52
+ assert_equal( false, other_day.same_day?( Time.local(2003,04,01,9,30) ) )
53
+ end
54
+ end
55
+
56
+ class StringToValidPageName < Test::Unit::TestCase
57
+
58
+ def test_punctuation
59
+ assert_equal( 'abcdefghijklm', 'a/b\\c[d]e?f{g}h&i^j`k<l>m'.to_valid_pagename )
60
+ end
61
+
62
+ def test_trailing_space
63
+ assert_equal( 'abcdefghijklm', ' abcdefghijklm '.to_valid_pagename )
64
+ end
65
+ end
66
+
67
+ class FileUniqueFilename < Test::Unit::TestCase
68
+ include FileUtils
69
+
70
+ def teardown
71
+ rmtree( folder )
72
+ end
73
+
74
+ def test_no_collision
75
+ assert_equal( 'ok.txt', File.unique_filename( folder, 'ok.txt' ) )
76
+ create_file 'ok.jpg', ''
77
+ assert_equal( 'ok.txt', File.unique_filename( folder, 'ok.txt' ) )
78
+ end
79
+
80
+ def test_whitespace
81
+ assert_equal( 'ok.txt', File.unique_filename( folder, 'o k.txt' ) )
82
+ end
83
+
84
+ def test_collision
85
+ assert_equal( 'ok.txt', File.unique_filename( folder, 'ok.txt' ) )
86
+ create_file 'ok.txt', ''
87
+ assert_equal( 'ok1.txt', File.unique_filename( folder, 'ok.txt' ) )
88
+ end
89
+
90
+ def test_numbered_collision
91
+ assert_equal( 'ok1.txt', File.unique_filename( folder, 'ok1.txt' ) )
92
+ create_file 'ok1.txt', ''
93
+ assert_equal( 'ok11.txt', File.unique_filename( folder, 'ok1.txt' ) )
94
+ end
95
+
96
+ def test_high_number_collision
97
+ create_file 'ok.txt', ''
98
+ 1.upto( 9 ) { |n| create_file "ok#{n}.txt", '' }
99
+ assert_equal( 'ok10.txt', File.unique_filename( folder, 'ok.txt' ) )
100
+ end
101
+
102
+ private
103
+
104
+ def create_file( name, content )
105
+ File.open( File.join( folder, name ), 'w') { |f| f.puts content }
106
+ end
107
+
108
+ def files
109
+ Dir.entries( folder ).delete_if { |name| name =~ /^\.+$/ }
110
+ end
111
+
112
+ def folder
113
+ @folder ||= make_folder
114
+ end
115
+
116
+ def make_folder
117
+ mkdir( 'testcontent' )
118
+ 'testcontent'
119
+ end
120
+
37
121
  end
@@ -0,0 +1,43 @@
1
+ require 'test/unit'
2
+ require 'contrib/redcloth-3.0.3'
3
+ require 'soks-view'
4
+
5
+ class TestBruteMatch < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @match = BruteMatch.new
9
+ @match['one'] = :one
10
+ @match['two'] = :two
11
+ @match['one two'] = :one_two
12
+ @match['two three'] = :two_three
13
+ @match['three: four'] = :three_colon_four
14
+ end
15
+
16
+ def test_basic
17
+ assert_equal( [['three: four',:three_colon_four],['two',:two]], match('two three: four or more') )
18
+ end
19
+
20
+ def test_case
21
+ assert_equal( [['One',:one]] , match('One') )
22
+ end
23
+
24
+ def test_length
25
+ assert_equal( [['one two',:one_two]], match("a one two\nthree four") )
26
+ assert_equal( [['two three',:two_three],['one',:one]], match('a one two three four') )
27
+ end
28
+
29
+ def test_fullwords
30
+ assert_equal( [['two',:two]], match('aone two.') )
31
+ assert_equal( [['two three',:two_three]], match('two three: fourormore') )
32
+ end
33
+
34
+ def match( text )
35
+ matches = []
36
+ @match.match( text ) { |m,p|
37
+ matches << [m,p]
38
+ "$1"
39
+ }
40
+ matches
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.8
3
3
  specification_version: 1
4
4
  name: Soks
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.6
7
- date: 2005-03-15
6
+ version: 0.0.7
7
+ date: 2005-03-21
8
8
  summary: Yet another wiki.
9
9
  require_paths:
10
10
  - lib
@@ -12,7 +12,7 @@ require_paths:
12
12
  email: tamc@rubyforge.org
13
13
  homepage: http://rubyforge.org/projects/soks/
14
14
  rubyforge_project:
15
- description:
15
+ description: Another Ruby Wiki. See http://www.soks.org for details
16
16
  autorequire: soks
17
17
  default_executable:
18
18
  bindir: bin
@@ -80,18 +80,22 @@ files:
80
80
  - templates/default/attachment/rss.png
81
81
  - templates/default/attachment/stylesheet.css
82
82
  - templates/default/attachment/tiny-logo thumb.bmp
83
+ - templates/default/content/A%20page%20with%20an%20umlaut%20%F6%20in%20its%20title.textile
83
84
  - templates/default/content/All%20News.textile
84
85
  - templates/default/content/Api%20for%20classes%20to%20modify%20the%20wiki.textile
85
- - templates/default/content/Attached%20ruby%20logo.textile
86
- - templates/default/content/Attached%20test%20thing.textile
87
86
  - templates/default/content/Author.textile
88
87
  - templates/default/content/Automatic%20linking%20between%20pages.textile
89
88
  - templates/default/content/Automatic%20Summaries.textile
89
+ - templates/default/content/Bil%20Kleb.textile
90
+ - templates/default/content/Bil.textile
91
+ - templates/default/content/Bill%20Wood.textile
90
92
  - templates/default/content/bug%3A%20competing%20edits.textile
93
+ - templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile
91
94
  - templates/default/content/Bug%3A%20GEM%20limits%20title%20lengths.textile
92
95
  - templates/default/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile
93
96
  - templates/default/content/Bug%3A%20RSS%20feed%20does%20not%20validate.textile
94
97
  - templates/default/content/Bug%3A%20Textile%20mishandles%20paragraphs.textile
98
+ - templates/default/content/Bug%3A%20Type%20a%20title%20here.textile
95
99
  - templates/default/content/Bug%3A%20Unanticipated%20Rollbacks.textile
96
100
  - templates/default/content/ctrl%2Dn.textile
97
101
  - templates/default/content/Home%20Page.textile
@@ -108,30 +112,27 @@ files:
108
112
  - templates/default/content/How%20to%20use%20the%20keyboard%20shortcuts.textile
109
113
  - templates/default/content/How%20to%20use%20this%20wiki.textile
110
114
  - templates/default/content/Instructions%20and%20Howtos.textile
111
- - templates/default/content/Known%20bugs.textile
112
115
  - templates/default/content/Latest%20News.textile
113
116
  - templates/default/content/let%20me%20know.textile
114
117
  - templates/default/content/List%20of%20changes.textile
115
118
  - templates/default/content/New%20page%20templates%20or%20categories%20code.textile
116
119
  - templates/default/content/New%20Recent%20Changes%20class.textile
120
+ - templates/default/content/News%3A%20Version%200%2E0%2E6%20Released.textile
117
121
  - templates/default/content/Per%20Wiki%20Templates.textile
118
- - templates/default/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile
119
122
  - templates/default/content/Picture%20of%20a%20pair%20of%20soks.textile
120
- - templates/default/content/Picture%20of%20powered%20by%20ruby%20logo.textile
121
- - templates/default/content/Picture%20of%20Type%20a%20title%20here.textile
122
123
  - templates/default/content/Planned%20Features.textile
123
124
  - templates/default/content/README.textile
124
125
  - templates/default/content/Recent%20Blog%20Entries.textile
125
126
  - templates/default/content/Recent%20Changes%20to%20This%20Site.textile
126
- - templates/default/content/Recent%20News.textile
127
127
  - templates/default/content/RSS%20feed.textile
128
128
  - templates/default/content/Ruby.textile
129
+ - templates/default/content/sandbox.textile
129
130
  - templates/default/content/Sidebar%20Page.textile
131
+ - templates/default/content/Skorgu.textile
130
132
  - templates/default/content/SOKS%20features.textile
131
133
  - templates/default/content/Soks%20Licence.textile
132
134
  - templates/default/content/tamc.textile
133
135
  - templates/default/content/tamc2.textile
134
- - templates/default/content/Type%20a%20title%20here.textile
135
136
  - templates/default/views/frame.rhtml
136
137
  - templates/default/views/messages.yaml
137
138
  - templates/default/views/Page_content.rhtml
@@ -143,7 +144,9 @@ files:
143
144
  - templates/default/views/Page_search_results.rhtml
144
145
  - templates/default/views/Page_view.rhtml
145
146
  - templates/default/views/UploadPage_edit.rhtml
147
+ - test/test_soks-storage.rb
146
148
  - test/test_soks-utils.rb
149
+ - test/test_soks-view.rb
147
150
  - LICENSE.txt
148
151
  - README.txt
149
152
  test_files: []
@@ -1 +0,0 @@
1
- page deleted
@@ -1 +0,0 @@
1
- content moved to [[Attached ruby logo]]
@@ -1,18 +0,0 @@
1
- h2. Known bugs
2
-
3
- p{font-size: x-small;}. Known bugs was created automatically from pages whose title matches /^Bug:/i.
4
-
5
- <automaticsummary>
6
-
7
- * [[ Bug: Does not make use of if-modified-since request headers ]] revised on 2005 Jan 25 18:23 by AutomaticImport
8
- * [[ Bug: GEM limits title lengths ]] revised on 2005 Jan 26 08:55 by tamc2
9
- * [[ Bug: notextile does not prevent page inserts ]] revised on 2005 Feb 12 12:00 by tamc2
10
- * [[ Bug: RSS feed does not validate ]] revised on 2005 Mar 15 16:24 by tamc2
11
- * [[ Bug: Unanticipated Rollbacks ]] revised on 2005 Mar 08 05:50 by Bil Kleb
12
- * [[ Bug: Textile mishandles paragraphs ]] revised on 2005 Mar 09 05:13 by tamc2
13
- * [[ bug: competing edits ]] revised on 2005 Mar 10 14:47 by tamc2
14
-
15
-
16
- </automaticsummary>
17
-
18
- How to report a bug
@@ -1 +0,0 @@
1
- content moved to [[Picture of a logo for the ruby language]]
@@ -1,9 +0,0 @@
1
- h2. Recent News
2
-
3
- p{font-size: x-small;}. Recent News was created automatically from pages whose title matches /^News:/i.
4
-
5
- <automaticsummary>
6
-
7
- No pages found to summarise
8
-
9
- </automaticsummary>
@@ -1 +0,0 @@
1
- content moved to [[Bug: Search textarea and button rendered w/o vertical separation?]]