ruwiki 0.9.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 (96) hide show
  1. data/Readme.rubygems +86 -0
  2. data/Readme.tarfile +65 -0
  3. data/bin/ruwiki +58 -0
  4. data/bin/ruwiki.cgi +87 -0
  5. data/bin/ruwiki_convert +56 -0
  6. data/bin/ruwiki_service.rb +82 -0
  7. data/bin/ruwiki_servlet +53 -0
  8. data/contrib/enscript-token.rb +55 -0
  9. data/contrib/rublog_integrator.rb +68 -0
  10. data/data/Default/ProjectIndex.ruwiki +49 -0
  11. data/data/Ruwiki/Antispam.ruwiki +65 -0
  12. data/data/Ruwiki/BugTracking.ruwiki +33 -0
  13. data/data/Ruwiki/ChangeLog.ruwiki +102 -0
  14. data/data/Ruwiki/Configuring_Ruwiki.ruwiki +151 -0
  15. data/data/Ruwiki/Extending_Ruwiki.ruwiki +317 -0
  16. data/data/Ruwiki/LicenseAndAuthorInfo.ruwiki +30 -0
  17. data/data/Ruwiki/ProjectIndex.ruwiki +84 -0
  18. data/data/Ruwiki/Roadmap.ruwiki +225 -0
  19. data/data/Ruwiki/RuwikiTemplatingLibrary.ruwiki +156 -0
  20. data/data/Ruwiki/RuwikiUtilities.ruwiki +157 -0
  21. data/data/Ruwiki/SandBox.ruwiki +9 -0
  22. data/data/Ruwiki/To_Do.ruwiki +51 -0
  23. data/data/Ruwiki/TroubleShooting.ruwiki +33 -0
  24. data/data/Ruwiki/WikiFeatures.ruwiki +17 -0
  25. data/data/Ruwiki/WikiMarkup.ruwiki +261 -0
  26. data/data/Tutorial/AddingPages.ruwiki +16 -0
  27. data/data/Tutorial/AddingProjects.ruwiki +16 -0
  28. data/data/Tutorial/ProjectIndex.ruwiki +11 -0
  29. data/data/Tutorial/SandBox.ruwiki +9 -0
  30. data/data/agents.banned +60 -0
  31. data/data/agents.readonly +321 -0
  32. data/data/hostip.banned +30 -0
  33. data/data/hostip.readonly +28 -0
  34. data/lib/ruwiki.rb +622 -0
  35. data/lib/ruwiki/auth.rb +56 -0
  36. data/lib/ruwiki/auth/gforge.rb +73 -0
  37. data/lib/ruwiki/backend.rb +318 -0
  38. data/lib/ruwiki/backend/flatfiles.rb +217 -0
  39. data/lib/ruwiki/config.rb +244 -0
  40. data/lib/ruwiki/exportable.rb +192 -0
  41. data/lib/ruwiki/handler.rb +342 -0
  42. data/lib/ruwiki/lang/de.rb +339 -0
  43. data/lib/ruwiki/lang/en.rb +334 -0
  44. data/lib/ruwiki/lang/es.rb +339 -0
  45. data/lib/ruwiki/page.rb +262 -0
  46. data/lib/ruwiki/servlet.rb +38 -0
  47. data/lib/ruwiki/template.rb +553 -0
  48. data/lib/ruwiki/utils.rb +24 -0
  49. data/lib/ruwiki/utils/command.rb +102 -0
  50. data/lib/ruwiki/utils/converter.rb +297 -0
  51. data/lib/ruwiki/utils/manager.rb +639 -0
  52. data/lib/ruwiki/utils/servletrunner.rb +295 -0
  53. data/lib/ruwiki/wiki.rb +147 -0
  54. data/lib/ruwiki/wiki/tokens.rb +136 -0
  55. data/lib/ruwiki/wiki/tokens/00default.rb +211 -0
  56. data/lib/ruwiki/wiki/tokens/01wikilinks.rb +166 -0
  57. data/lib/ruwiki/wiki/tokens/02actions.rb +63 -0
  58. data/lib/ruwiki/wiki/tokens/abbreviations.rb +40 -0
  59. data/lib/ruwiki/wiki/tokens/calendar.rb +147 -0
  60. data/lib/ruwiki/wiki/tokens/headings.rb +43 -0
  61. data/lib/ruwiki/wiki/tokens/lists.rb +112 -0
  62. data/lib/ruwiki/wiki/tokens/rubylists.rb +48 -0
  63. data/ruwiki.conf +22 -0
  64. data/ruwiki.pkg +0 -0
  65. data/templates/default/body.tmpl +19 -0
  66. data/templates/default/content.tmpl +7 -0
  67. data/templates/default/controls.tmpl +23 -0
  68. data/templates/default/edit.tmpl +27 -0
  69. data/templates/default/error.tmpl +14 -0
  70. data/templates/default/footer.tmpl +23 -0
  71. data/templates/default/ruwiki.css +297 -0
  72. data/templates/default/save.tmpl +8 -0
  73. data/templates/sidebar/body.tmpl +19 -0
  74. data/templates/sidebar/content.tmpl +8 -0
  75. data/templates/sidebar/controls.tmpl +8 -0
  76. data/templates/sidebar/edit.tmpl +27 -0
  77. data/templates/sidebar/error.tmpl +13 -0
  78. data/templates/sidebar/footer.tmpl +22 -0
  79. data/templates/sidebar/ruwiki.css +347 -0
  80. data/templates/sidebar/save.tmpl +10 -0
  81. data/templates/simple/body.tmpl +13 -0
  82. data/templates/simple/content.tmpl +7 -0
  83. data/templates/simple/controls.tmpl +8 -0
  84. data/templates/simple/edit.tmpl +25 -0
  85. data/templates/simple/error.tmpl +10 -0
  86. data/templates/simple/footer.tmpl +10 -0
  87. data/templates/simple/ruwiki.css +192 -0
  88. data/templates/simple/save.tmpl +8 -0
  89. data/tests/harness.rb +52 -0
  90. data/tests/tc_backend_flatfile.rb +103 -0
  91. data/tests/tc_bugs.rb +74 -0
  92. data/tests/tc_exportable.rb +64 -0
  93. data/tests/tc_template.rb +145 -0
  94. data/tests/tc_tokens.rb +335 -0
  95. data/tests/testall.rb +20 -0
  96. metadata +182 -0
@@ -0,0 +1,317 @@
1
+ page!content: = Extending Ruwiki 0.9.0
2
+ Ruwiki is relatively easily extended to support new features. There are
3
+ four primary ways in which Ruwiki can be extended or modified by the
4
+ end user: templates, translating Ruwiki messages and labels, markup
5
+ tokens, and creating new backends.
6
+
7
+ == Templates
8
+ Templating is done with a heavily modified version of the \RDoc
9
+ template.rb library included in the distribution of Ruwiki. The
10
+ templating library allows for nested templates, and this is used
11
+ extensively in Ruwiki. This library is documented in
12
+ RuwikiTemplatingLibrary.
13
+
14
+ There are four major templates: content, edit, save, and error. Each of
15
+ these has a slightly different combination of template files used, and
16
+ this means that there are different sets of variables available.
17
+
18
+ The major templates are “composite templates” that are
19
+ defined as follows:
20
+ ; content or search : body.tmpl, content.tmpl, controls.tmpl, footer.tmpl
21
+ ; edit or preview : body.tmpl, edit.tmpl
22
+ ; save : body.tmpl, save.tmpl, controls.tmpl, footer.tmpl
23
+ ; error : body.tmpl, error.tmpl
24
+
25
+ === Common Variables
26
+ The following template variables are presented for all composite
27
+ templates.
28
+ ; <tt>%css_link%</tt> : The contents of the CSS file for the template set.
29
+ ; <tt>%home_link%</tt> : A link to the root page of the Wiki.
30
+ ; <tt>%editable%</tt> : A boolean value to mark the page as editable or not. Used in a conditional block in the templates.
31
+ ; <tt>%cgi_url%</tt> : The URL for the Wiki.
32
+ ; <tt>%content%</tt> : The formatted content of the current page.
33
+ ; <tt>%page_project%</tt> : The project for the current page.
34
+ ; <tt>%page_raw_topic%</tt> : The topic for the current page, escaped for safe transmission over the web.
35
+ ; <tt>%page_topic%</tt> : The printable topic for the current page.
36
+ ; <tt>%url_project%</tt> : The URL to the current page&rsquo;s project.
37
+ ; <tt>%url_topic_search%</tt> : The URL to search for the current topic in the current project.
38
+ ; <tt>%link_topic_search%</tt> : A link to the current topic search.
39
+
40
+ === Variables for :content, :save, :search, :edit, :preview
41
+ ; <tt>%message%</tt> : A message presented at the top of the Wiki when Ruwiki needs to inform the user of something that is not an error.
42
+
43
+ === Variables for :content, :save, :search
44
+ ; <tt>%wiki_title%</tt> : The title of the Wiki.
45
+ ; <tt>%label_topic_or_search%</tt> : Either <tt>#topic#</tt> or <tt>#search#</tt>.
46
+ ; <tt>%page_topic_name%</tt> : The same as <tt>%page_topic%</tt>.
47
+
48
+ === Variables for :edit, :preview
49
+ ; <tt>%wiki_title%</tt> : The title of the Wiki with a tag to indicate that the page is being edited.
50
+ ; <tt>%page_content%</tt> : The content of the page.
51
+ ; <tt>%page_version%</tt> : The current version number of the page.
52
+ ; <tt>%unedited_page_content%</tt> : The formatted, unedited content of the page.
53
+ ; <tt>%pre_page_content%</tt> : A Web-escaped form of the page content.
54
+ ; <tt>%edit_comment%</tt> : The current edit comment.
55
+
56
+ === Variables for :error
57
+ ; <tt>%wiki_title%</tt> : The title of the Wiki with an error message.
58
+ ; <tt>%name%</tt> : The name of the error.
59
+ ; <tt>%backtrace%</tt> : The backtrace of the error.
60
+ ; <tt>%backtrace_email%</tt> : The backtrace of the error formatted for sending by email.
61
+ ; <tt>%webmaster%</tt> : The email address of the webmaster.
62
+
63
+ == Translating Ruwiki Messages
64
+ : NOTE: The mechanism for specifying language may be changed in a
65
+ : future version of Ruwiki, although the internationalisation mechanism
66
+ : will not be changing.
67
+
68
+ Ruwiki is internationalized. This method sets the Ruwiki error messages
69
+ (and a few other messages) to the specified language Module. The
70
+ language Module must have a constant Hash called <tt>Message</tt>
71
+ containing a set of symbols and localized versions of the messages
72
+ associated with them.
73
+
74
+ If the file <em>ruwiki/lang/es.rb</em> contains the module
75
+ <tt>Ruwiki::Lang::ES</tt>, the messages for RSS could be localized to
76
+ Spanish thus:
77
+
78
+ require 'ruwiki/lang/es'
79
+ ...
80
+ wiki.config.language = Ruwiki::Lang::ES
81
+
82
+ Localization is currently per wiki instance. In a servlet environment,
83
+ this may mean that only a single language is recognised.
84
+
85
+ It is recommended that the hash be created with a default proc that
86
+ reports unknown message keys.
87
+
88
+ Message = Hash.new { |h, k| "Language ERROR: Unknown message key #{k.inspect}." }
89
+
90
+ == Extending Ruwiki Markup
91
+
92
+ : <strong>WARNING:</strong> These \APIs will change in Ruwiki 0.9.0,
93
+ : replacing the instance variables @project, @backend, and @script with
94
+ : a Handler object. There may be other changes as well.
95
+
96
+ Ruwiki&rsquo;s WikiMarkup can be extended by creating a new
97
+ Ruwiki::Wiki::Token. Tokens will be automatically loaded if they are
98
+ placed in <em>ruwiki/wiki/tokens</em>.
99
+
100
+ It is recommended that new tokens be added to the test cases in
101
+ <tt>tests/tc_tokens.rb</tt>.
102
+
103
+ The following Ruwiki::Wiki::Token class will convert strings in the
104
+ forms of \[ruby-talk:12345] to links.
105
+
106
+ class RubyTalkLinks < Ruwiki::Wiki::Token
107
+ def self.rank
108
+ 2
109
+ end
110
+
111
+ def self.regexp
112
+ %r{\[ruby-talk:(\d+)\]}
113
+ end
114
+
115
+ def replace
116
+ lm = @match.captures[0]
117
+ %Q(<a class="rw_extlink" href="http://www.ruby-talk.org/#{lm}">#{@match[0]}</a>)
118
+ end
119
+ end
120
+
121
+ === Known Instance Variables
122
+ ==== @match
123
+ The match data for this token instance is is kept in @match. This is
124
+ what will be used in #replace and #restore.
125
+
126
+ ==== @project
127
+ The project being processed.
128
+
129
+ ==== @backend
130
+ The Backend for the wiki. If you are using Ruwiki tokenizers outside of
131
+ Ruwiki, this does not need to be a \BackendDelegator, but can be the
132
+ direct Backend (which expects less information).
133
+
134
+ ==== @script
135
+ The URI to the script.
136
+
137
+ ==== @message
138
+ The message hash for displaying localised messages.
139
+
140
+ ==== @title
141
+ The title of the wiki instance.
142
+
143
+ === Required Methods
144
+ ==== ::regexp
145
+ Ruwiki tokens are matched only through regular expression matches. As
146
+ shown in the example above, the regular expression for ruby-talk
147
+ mailing list posts is <tt>%r{\[ruby-\talk:(\d+)\]}</tt>. The purpose of
148
+ the ::regexp method is to return the regexp for matching.
149
+
150
+ For most inline matches, Ruwiki will ensure that the escape character
151
+ (\) works automatically. For whole-line matches, it is necessary to
152
+ match the escape character manually and provide a #restore method.
153
+
154
+ As an example, the \HRule class implements these methods.
155
+
156
+ def self.regexp
157
+ %r|^\\?-{4,}|
158
+ end
159
+
160
+ def restore
161
+ @match[0][1 .. -1]
162
+ end
163
+
164
+ It may also be necessary to match escapes manually on inline matches
165
+ that must be along word boundaries where the regular expression
166
+ includes characters that normally match word boundaries. The project
167
+ index match (e.g., \::Ruwiki) regular expression does this
168
+ <tt>%r{(\B|\\)::([A-Z][a-z]+)}</tt>.
169
+
170
+ ==== #replace
171
+ This returns the formatted token. In the \RubyTalkLinks class above,
172
+ the matched regular expression will be replaced with a hyperlink. The
173
+ text of the hyperlink will be the matched text; the target of the
174
+ hyperlink will include the first captured value.
175
+
176
+ def replace
177
+ lm = @match.captures[0]
178
+ %Q(<a class="rw_extlink" href="http://www.ruby-talk.org/#{lm}">#{@match[0]}</a>)
179
+ end
180
+
181
+ === Optional Methods
182
+ ==== ::rank
183
+ By default, a token will be processed in the order created. Tokens may
184
+ be given a specific rank to ensure that they are processed in a
185
+ particular order. The default rank is <tt>9999</tt>.
186
+
187
+ ==== #restore
188
+ Restores the token without replacement. Implements the results of the
189
+ escape character. Each Token class is responsible for its own
190
+ restoration. As noted in #regexp, whole-line tokens are most likely to
191
+ need a #restore implementation.
192
+
193
+ ==== ::post_replace
194
+ Performs any necessary massaging of the data. The Lists token uses this
195
+ to ensure that lists are collapsed together; the Paragraph token uses
196
+ this to ensure that there are no empty paragraph tag pairs
197
+ (&lt;p&gt;&lt;/p&gt;).
198
+
199
+ : <strong>Note:</strong> This has been changed from Ruwiki 0.6.x.
200
+ : Plugins written for the Ruwiki 0.6.x Token API will need to be
201
+ : modified so that this is defined as:
202
+
203
+ def self.post_replace
204
+ ...
205
+ end
206
+
207
+ : as opposed to:
208
+
209
+ def post_replace
210
+ ...
211
+ end
212
+
213
+ == Extending Ruwiki Backends
214
+ Ruwiki can support varying backends, as the backend interface has been
215
+ abstracted completely from the data store. The backend
216
+ <strong>must</strong>:
217
+
218
+ # reside in <em>ruwiki/backends/</em> as <em>backend_name</em>.rb.
219
+ # be registered by adding the <em>backend_name</em> as a symbol (e.g., :<em>backend_name</em>) to Ruwiki::KNOWN_BACKENDS.
220
+ # inherit from Ruwiki::Backend.
221
+ # exist as Ruwiki::Backend::<em>\Backend_name</em>.
222
+
223
+ === Required Methods
224
+ ==== #initialize(storage_options)
225
+ The backend may only obtain its configuration information from an
226
+ option hash provided by the \BackendDelegate. This is obtained from
227
+ <tt>wiki.config.options[backend]</tt>. If a configuration error is
228
+ detected during initialization, the backend should raise the
229
+ \Ruwiki::Backend exception class \BackendError. This would be done
230
+ with:
231
+
232
+ raise Ruwiki::Backend::BackendError.new([:message_symbol, [message_parameters]])
233
+
234
+ Backend writers should add appropriate messages to the
235
+ <em>lang/en.rb</em> at a minimum. The \BackendDelegator will detect
236
+ this and report the results appropriately.
237
+
238
+ ==== #load(topic, project)
239
+ The backend will be provided the name of the topic and project. It must
240
+ return the selected page as a hash of hashes. The hash must match that
241
+ of \Ruwiki::Page#export. It will be passed as the parameter to
242
+ \Ruwiki:::Page.new.
243
+
244
+ ==== #store(page)
245
+ This method must store the provided Ruwiki::Page object. Current Ruwiki
246
+ backend implementations store the Ruwiki::Page#export hash. This method
247
+ is responsible for calling the private method Backend#make_diff and
248
+ adding the result to the list of diffs for the page.
249
+
250
+ ===== Backend#make_diff(oldpage, newpage)
251
+ This method expects two page objects, or their Ruwiki::Page#export
252
+ representation. It will return a hash representing the difference set
253
+ between the two pages.
254
+
255
+ ==== #obtain_lock(page, time, expire, address = 'UKNOWN')
256
+ Obtains an exclusive lock on the page. The \BackendDelegator is called
257
+ with the page, the address, and a timeout which is provided. The time
258
+ is provided by the call to the BackendDelegate, and the expire is also
259
+ provided by the call to the BackendDelegate which is given a timeout
260
+ value (by default 600 seconds). If the lock is still in effect, a
261
+ second call to #obtain_lock should renew the timeout on the lock.
262
+
263
+ ==== #release_lock(page, address = 'UNKNOWN')
264
+ Releases the exclusive lock on the page. The lock should not be released
265
+ unless the IP address on the lock is the same or the lock has expired.
266
+
267
+ ==== #project_exists?(project)
268
+ Returns <tt>true</tt> if the project exists.
269
+
270
+ ==== #page_exists?(topic, project = 'Default')
271
+ Returns <tt>true</tt> if the page exists within the specified project.
272
+
273
+ ==== #create_project(project)
274
+ Attempts to create the project.
275
+
276
+ ==== #search_project(project, search_string)
277
+ String search all topic names and content in a project and return a
278
+ hash of topic hits:
279
+
280
+ topicname => hits
281
+
282
+ ==== #list_projects
283
+ Return an array of all projects.
284
+
285
+ ==== #list_topics(project)
286
+ Return an array of all topics within the project.
287
+
288
+ === Future Methods
289
+ Note that these methods are currently optional (they are not yet called
290
+ from Ruwiki), but will become required moving forward as the functions
291
+ are implemented in Ruwiki.
292
+
293
+ ==== #destroy(page)
294
+ Removes the page from the wiki. This should <strong>not</strong> remove
295
+ the change history of the topic (in the event that the page has been
296
+ removed maliciously). There will be a separate method to remove the
297
+ page history.
298
+
299
+ ==== #destroy_project(project)
300
+ Attempts to destroy the project.
301
+
302
+ === Optional Methods
303
+ These methods are completely optional. They are guarded in the
304
+ \BackendDelegate by a call to #respond_to?().
305
+
306
+ ==== #global_search(search_string)
307
+ The global search in the backend delegate is by default implemented as
308
+ a looping search through all projects. A backend may have a more
309
+ efficient backend global search mechanism. If the backend responds to
310
+ #global_search, then the \BackendDelegate will use this method.
311
+ properties!project: Ruwiki
312
+ properties!title: Extending_Ruwiki
313
+ properties!topic: Extending_Ruwiki
314
+ properties!version: 1
315
+ ruwiki!content-version: 2
316
+ ruwiki!version: 0.9.0
317
+ properties!editable: false
@@ -0,0 +1,30 @@
1
+ page!content: = Ruwiki Licence
2
+ Ruwiki is copyright &copy; 2002 - 2004 [mailto:alan@digikata.com Alan
3
+ Chen] and [mailto:ruwiki@halostatue.ca Austin Ziegler].
4
+
5
+ Ruwiki is provided free of use and without any warranty express or
6
+ implied. You may use, distribute, or modify Ruwiki under the conditions
7
+ of Ruby&rsquo;s licence or the [http://www.gnu.org/copyleft/gpl.html
8
+ GNU General Public Licence].
9
+
10
+ * Ruwiki includes a modified version of rdoc/template.rb originally by Dave Thomas for use in \RDoc.
11
+
12
+ == Translations
13
+ * Translation to German by [mailto:chneukirchen@yahoo.de Christian Neukirchen] on 2003.10.22, with corrections by Mauricio Fern&aacute;ez. Note that the initial template translations (./templates/de/) were done via \AltaVista Babelfish and should not be blamed on Christian.
14
+ * Translation to Spanish by [mailto:batsman.geo@yahoo.com Mauricio Fern&aacute;ndez] on 2003.10.22. Note that the initial template translations (./templates/es/) were done via \AltaVista Babelfish and should not be blamed on Mauricio.
15
+
16
+ == Austin&rsquo;s Other Projects
17
+ Austin has also released several other projects available on the RAA that you may be interested in:
18
+ * [http://raa.ruby-lang.org/list.rhtml?name=mime-types MIME::Types], \RubyForge [http://rubyforge.org/projects/mime-types project].
19
+ * [http://raa.ruby-lang.org/list.rhtml?name=pdf-writer PDF::Writer], \RubyForge [http://rubyforge.org/projects/ruby-pdf project].
20
+ * [http://raa.ruby-lang.org/list.rhtml?name=text-format Text::Format], \RubyForge [http://rubyforge.org/projects/text-format project].
21
+ * [http://raa.ruby-lang.org/list.rhtml?name=trans-simple Transaction::Simple], \RubyForge [http://rubyforge.org/projects/trans-simple project].
22
+ * [http://raa.ruby-lang.org/list.rhtml?name=uninheritable Uninheritable], Transaction::Simple&rsquo;s \RubyForge [http://rubyforge.org/projects/trans-simple project].
23
+ * [http://raa.ruby-lang.org/list.rhtml?name=diff-lcs Diff::LCS], Ruwiki&rsquo;s \RubyForge [http://rubyforge.org/projects/ruwiki project].
24
+ properties!project: Ruwiki
25
+ properties!title: LicenseAndAuthorInfo
26
+ properties!topic: LicenseAndAuthorInfo
27
+ properties!version: 1
28
+ ruwiki!content-version: 2
29
+ ruwiki!version: 0.9.0
30
+ properties!editable: false
@@ -0,0 +1,84 @@
1
+ page!content: = Ruwiki 0.9.0
2
+ This is the \ProjectIndex page for Ruwiki. For any given project, the
3
+ \ProjectIndex topic will be the default topic for plain project links.
4
+
5
+ == Features and Information
6
+ * This wiki supports a variety of WikiFeatures that you may be interested in. The rules for WikiMarkup are similar to some other wikis, but there are a few unique markup capabilities in Ruwiki.
7
+ * Configuring_Ruwiki is simple.
8
+ * Extending_Ruwiki is almost as simple.
9
+ * What you need to know for using Ruwiki's [[Antispam]] capabilities.
10
+ * Who wrote Ruwiki? Read the LicenseAndAuthorInfo.
11
+
12
+ == Requirements
13
+ Ruwiki currently requires Ruby 1.8, Diff::LCS 1.1.2 and
14
+ Archive::Tar::Minitar 0.5.1. These packages are included in the
15
+ <em>packages/</em> directory in the
16
+ <code>ruwiki-0.9.0-full.tar.gz</code> form of the distribution.
17
+
18
+ The YAML backend requires Ruby 1.8.2 preview 3 or later.
19
+
20
+ == Upgrading
21
+ Ruwiki 0.9.0 has a flatfile format that is incompatible with versions
22
+ of Ruwiki older than Ruwiki 0.8.0. If you are upgrading from one of
23
+ these versions, you must use the bin/ruwiki_convert. The simple case
24
+ will be (assuming that your data files are in ./data):
25
+
26
+ % ruwiki_convert ./data
27
+
28
+ The ruwiki_convert utility is automatically installed by \RubyGems and
29
+ RPA. See RuwikiUtilities for more information. Note that this utility
30
+ will probably be incorporated into the main Ruwiki utility in a future
31
+ version.
32
+
33
+ == Getting Started
34
+ There are some differences between the startup of <tt>.tar.gz</tt>,
35
+ \RubyGems, and RPA installations of Ruwiki.
36
+
37
+ === \QuickStart (Read-only: \RubyGem and RPA Installation Only)
38
+ Run:
39
+ % ruwiki_servlet --central
40
+
41
+ Point your web browser to \http://localhost:8808/.
42
+
43
+ === \QuickStart (CGI)
44
+ # Install the Ruwiki CGI (<tt>ruwiki.cgi</tt>) program in a place where your webserver can execute it.
45
+ #* <strong>\RubyGem:</strong> <tt>ruwiki install cgi,data --to <em>directory</em></tt>
46
+ #* <strong><tt>.tar.gz</tt>:</strong> Extract the Ruwiki directory to that directory. <tt>cp bin/ruwiki.cgi .</tt> <em>or</em> <tt>copy bin\ruwiki.cgi .</tt>
47
+ # Point your web browser to the appropriate URL.
48
+
49
+ === \QuickStart (\WEBrick)
50
+ # Install the Ruwiki servlet or data.
51
+ #* <strong>\RubyGem:</strong> <tt>ruwiki install data --to <em>directory</em></tt> <em>or</em> <tt>ruwiki install servlet,data --to <em>directory</em></tt>
52
+ #* <strong><tt>.tar.gz</tt>:</strong> Extract the Ruwiki directory.
53
+ # Run <tt>ruwiki_servlet</tt>. Under the <tt>.tar.gz</tt>, this would be <tt>bin/ruwiki_servlet</tt> <em>or</em> <tt>ruby bin\ruwiki_servlet</tt>
54
+ # Point your web browser to \http://localhost:8808/.
55
+
56
+ == Support
57
+ * Troubles with Ruwiki? See TroubleShooting for some suggestions. Have a new problem? Add it to the main [http://ruwiki.rubyforge.org/ruwiki.cgi/Ruwiki/TroubleShooting TroubleShooting] page.
58
+ * Subscribe to [http://rubyforge.org/mailman/listinfo/ruwiki-discuss ruwiki-discuss] ([http://rubyforge.org/pipermail/ruwiki-discuss/ archives]).
59
+ * You can also use the [http://rubyforge.org/forum/?group_id=84 Ruwiki Public Forum] or the on \RubyForge.
60
+
61
+ == Tracking Ruwiki Development
62
+ The development progress of Ruwiki is kept primarily in the wiki
63
+ itself, but the services of [http://rubyforge.org RubyForge] are used
64
+ as well.
65
+ * The BugTracking page in Ruwiki keeps track of open and closed bugs in Ruwiki. Bugs can also be found in the \RubyForge [http://rubyforge.org/tracker/?atid=407&group_id=84&func=browse bug tracker] and [http://rubyforge.org/tracker/?atid=408&group_id=84&func=browse Support Requests].
66
+ * The To_Do list keeps track of major development goals for Ruwiki. Items for this list can be found on \RubyForge in [http://rubyforge.org/tracker/?atid=410&group_id=84&func=browse Feature Requests] and [http://rubyforge.org/tracker/?atid=409&group_id=84&func=browse Patches].
67
+ * There is a mailing list to track CVS changes: [http://rubyforge.org/mailman/listinfo/ruwiki-checkin ruwiki-checkin] ([http://rubyforge.org/pipermail/ruwiki-checkin/ archives]).
68
+
69
+ == Different Features?
70
+ If this wiki doesn&rsquo;t have the right combination of features, (or if it
71
+ just doesn&rsquo;t feel right) try these other Ruby-based Wikis:
72
+
73
+ * [http://pimwiki.rubyforge.org/ PIMWiki]
74
+ * [http://instiki.rubyforge.org/ Instiki]
75
+ * [http://www.walrus-ruby.org/amrita/cgi-bin/aswiki/aswiki.cgi Amrita Wiki]
76
+ * [http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=top RWiki]
77
+ * [http://www.xpsd.com/MiniRubyWiki MiniRubyWiki]
78
+ properties!project: Ruwiki
79
+ properties!title: ProjectIndex
80
+ properties!topic: ProjectIndex
81
+ properties!version: 1
82
+ ruwiki!content-version: 2
83
+ ruwiki!version: 0.9.0
84
+ properties!editable: false
@@ -0,0 +1,225 @@
1
+ page!content: = Ruwiki 0.9.0: The Road Ahead
2
+ This roadmap is accurate as of the release of 0.9.0.
3
+
4
+ What lies ahead for Ruwiki? The To_Do list will give a detailed list
5
+ of what is to follow, but this list is not the roadmap. There is no
6
+ clear indication of the reason for &mdash; and in some cases, the
7
+ meaning of &mdash; the items on the list. The intention of this
8
+ document is to expand on that list. As items are completed, they will
9
+ be removed from this document.
10
+
11
+ == A Note About Targets
12
+ Ruwiki development is not proceeding as quickly as I would prefer, but
13
+ it is continuing steadily. I am at times choosing to delay releases
14
+ and bypass some versions because there are other pressing concerns; I
15
+ am definitely aiming for quality here, not for timeliness.
16
+
17
+ == Development Inputs
18
+ The primary driver of development on Ruwiki is the needs of a few
19
+ groups of people. First, both Alan and Austin use or will use Ruwiki
20
+ at work. There are particular needs that both have. Austin will be
21
+ replacing an installation of \PhpWiki with an installation of Ruwiki
22
+ sometime in early 2005.
23
+
24
+ Second, [http://www.rubygarden.org/ruby RubyGarden], and
25
+ [http://www.rubyforge.org RubyForge], and the
26
+ [http://rpa.rubygarden.org <acronym title="Ruby Production Archive">RPA</acronym>]
27
+ have expressed an intention to replace the Perl-based \UseMod wiki
28
+ with a Ruby-based wiki. The popular and easy-to-use Instiki
29
+ (&ldquo;there is no step 3&rdquo;) is not an ideal choice for either
30
+ because they either require or prefer a CGI-based wiki. Ruwiki has the
31
+ desired level of performance and implemenation simplicity that
32
+ impresses both groups, and it is the current preferred choice. Thus,
33
+ the needs of both websites factor highly into the goals for Ruwiki.
34
+
35
+ Third, Austin gave a talk on Ruwiki at \RubyConf 2004. Many of the
36
+ features in the current release come from a development effort leading
37
+ up to the talk and in the weeks following.
38
+
39
+ Last, and certainly not least, feature requests and bug reports are a
40
+ factor. One of the things that changed in Ruwiki 0.8.0 was the look
41
+ and feel; admittedly, the look and feel in earlier versions was a bit
42
+ garish, designed to fit in with a particular website more than be a
43
+ general wiki theme. Users complained, and we changed this. The
44
+ continual spam defacement of the \RubyGarden wiki suggested several
45
+ possible improvements that could be made in Ruwiki to fight wiki spam;
46
+ initial work has been implemented in Ruwiki 0.9.0 and more work
47
+ remains. Additionally, Ruwiki is the first wiki with built-in
48
+ deployment support for package management systems (such as \RubyGems
49
+ and rpa-base), although Instiki has been modified for RPA by the RPA
50
+ team to support limited installation in RPA locations.
51
+
52
+ == Ruwiki 0.10.0: &ldquo;Are You Being Served?&rdquo;
53
+ Ruwiki 0.8.0 introduced an incompatible change in the way that page
54
+ diffs were stored, so users were advised to remove any existing .rdiff
55
+ files. This isn&rsquo;t as problematic as it may sound, as until
56
+ 0.10.0, there is no way to actually view the page diffs from Ruwiki
57
+ itself.
58
+
59
+ In Ruwiki 0.7.0, a new token was introduced: %calendar(). The concept
60
+ here is a sound one that can be extended to make token addition
61
+ easier. Currently, it is necessary for token writers to create their
62
+ own regular expressions. The &ldquo;function token&rdquo; will be
63
+ added &mdash; although the form may not be
64
+ &ldquo;%<em>function-name</em>&rdquo; &mdash; that will work with
65
+ either a line replacement or a word replacement so that the regular
66
+ expression does not need to be written. Tests for the replacement will
67
+ still need to be written, but standardizing new custom tokens will be
68
+ a good thing.
69
+
70
+ Chad Fowler&rsquo;s port of \RubLog&rsquo;s vector search will
71
+ probably be added to this version.
72
+
73
+ The presence of static HTML content (headers and footers) per page has
74
+ been accounted for in Ruwiki 0.8.0, but it will not be displayed.
75
+ Further, there is currently no way to specify or display static
76
+ content for the wiki or the project. (A related problem here is that
77
+ projects do not have any properties. This will become important as
78
+ projects should be able to be marked private within a wiki in the
79
+ future.)
80
+
81
+ The purpose of the \WikiWikiWeb is to provide a collaborative,
82
+ community knowledge editing environment. Unfortunately, the pondscum
83
+ known as spammers have figured out that the \WikiWikiWeb provides a
84
+ positive Google \PageRank, and having their links on our Wikis is
85
+ benefits them. Just as they don&rsquo;t care about filling our
86
+ mailboxes with junk, they don&rsquo;t care about defacing our
87
+ community knowledge. Ruwiki 0.10.0 provides additional antispam
88
+ defences.
89
+
90
+ The \RecentChanges mechanism will be updated to make it possible to
91
+ see the \GlobalRecentChanges list.
92
+
93
+ The most significant change in Ruwiki 0.10.0 will be the modification
94
+ of the request pipeline. This will not be visible to the end user, but
95
+ it will be significant to users who wish to extend Ruwiki. Currently,
96
+ Ruwiki processes all commands in ruwiki.rb. In Ruwiki 0.10.0, this
97
+ will be changed to a dispatch mechanism, where Action objects are
98
+ introduced, and ruwiki.rb dispatches requests to Action objects.
99
+
100
+ <table summary="Pipeline" style="border: 1px solid black"><tr><td>
101
+ +---------+ +-------------------+
102
+ | Request |--------->| Authorize Request |
103
+ +---------+ +-------------------+
104
+ |
105
+ v
106
+ +-------------------+
107
+ | Configure Ruwiki |
108
+ +-------------------+
109
+ |
110
+ v
111
+ +-------------------+
112
+ | Parse Request |
113
+ +-------------------+
114
+ |
115
+ v
116
+ +-------------------+
117
+ | Perform Action |
118
+ +-------------------+
119
+ |
120
+ v
121
+ +-------------------+
122
+ | Prepare Response |
123
+ +-------------------+
124
+ |
125
+ v
126
+ +--------+ +----+--------------+
127
+ | Page |<----------| Send Page |
128
+ +--------+ +-------------------+
129
+ </td></tr></table>
130
+
131
+ The diagram above shows the general pipeline. The difference is that
132
+ the action will be its own object. In general, it will need to know
133
+ how to process certain URL formats.
134
+
135
+ In the process of defining the action objects, \ActionCards will be
136
+ created. Below is an example \ActionCard for the default action,
137
+ <tt>_show</tt>. In \ActionCards, everything is relative to the Ruwiki
138
+ root URI. Important to note is that \ActionCards are an ideal: they may
139
+ not represent something that can be accomplished for 0.10.0, 0.11.0,
140
+ or even 1.0. They do, however, represent the ultimate target.
141
+
142
+ Ruwiki does some implicit URI rewriting in the general form of:
143
+
144
+ <table summary="Ruwiki URI rewriting" style="border: 1px solid black; border-collapse: collapse">
145
+ <tr><th style="border: 1px solid black">URI</th><th style="border: 1px solid black">Rewritten URI</th></tr>
146
+ <tr><td style="border: 1px solid black">/</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
147
+ <tr><td style="border: 1px solid black">/Action</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action</td></tr>
148
+ <tr><td style="border: 1px solid black">/Topic</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
149
+ <tr><td style="border: 1px solid black">/Project/</td><td style="border: 1px solid black">/Project/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
150
+ <tr><td style="border: 1px solid black">/Project/Action</td><td style="border: 1px solid black">/Project/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action</td></tr>
151
+ <tr><td style="border: 1px solid black">/Project/Topic</td><td style="border: 1px solid black">/Project/Topic/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
152
+ <tr><td style="border: 1px solid black">/Project/Topic/Action</td><td style="border: 1px solid black">/Project/Topic/Action</td></tr>
153
+ </table>
154
+
155
+ <table summary="_show Action Card" style="border: 1px solid black"><tr><td>
156
+ === Action: Show [_show] <strong>DEFAULT</strong>
157
+ The Show action is the default action that will be performed when
158
+ there is no action specified. Without any arguments, the latest
159
+ version of the page will be displayed.
160
+
161
+ ==== Action Arguments
162
+ ; ?r=<em>revision</em> : Show the specified revision of the page.
163
+ ; ?r : Show the list of revisions known to the page.
164
+ ; ?r=<em>revision1</em>:<em>revision2</em> : Shows the difference of revision1 and revision2 for the page.
165
+ ; ?r=:<em>revision</em> : Shows the difference between the current page and the specified revision.
166
+ ; ?d=<em>yyyymmdd[:hh[mm[ss]]]</em> : Shows the last revision from at or before the specified date and time. If time is not specified, it is assumed to be 23:59:59.
167
+
168
+ ==== Interaction Notes
169
+ Without arguments, _show generates pages pages that are editable and
170
+ indexable (<meta name="robots" content="index,follow,archive">). If
171
+ any argument is specified, the page is still editable, but not
172
+ indexable (<meta name="robots" content="noindex,nofollow,noarchive">).
173
+ </td></tr></table>
174
+
175
+ == Ruwiki 0.11.0: &ldquo;What&rsquo;s My Line?&rdquo;
176
+ The antispam techniques introduced in 0.9.0 are positive steps in the
177
+ fight against wiki defacement. They are hopefully effective, too. The
178
+ problem is that because 0.9.0 doesn&rsquo;t offer users or user
179
+ authentication, there&rsquo;s no way of safely allowing the edit of
180
+ the antispam lists. Thus, to allow this and other potentially
181
+ dangerous actions, a user and capability framework will be added to
182
+ Ruwiki. This framework will allow for user identification,
183
+ authentication, and authorization to indicate what users are allowed
184
+ to perform what actions.
185
+
186
+ Authenticated users will be able to bypass blacklist checking; thus,
187
+ if &ldquo;msn.com&rdquo; is blocked, &ldquo;joe.blog@msn.com&rdquo;
188
+ could still authenticate with Ruwiki and edit the pages. Some users
189
+ will be able to manage user permissions (including user management),
190
+ edit antispam lists, etc.
191
+
192
+ Other actions will be added, including the ability to rename topics
193
+ and move topics between projects. In both cases, the topic change
194
+ history must be maintained.
195
+
196
+ The documentation for Ruwiki will be substantially complete with this
197
+ version, lacking only specific information on the features that will
198
+ be added in Ruwiki 1.0.0.
199
+
200
+ == Ruwiki 1.0.0: &ldquo;Yes, Minister&rdquo;
201
+ A combined strength and weakness of Ruwiki is that it currently does
202
+ little to protect against arbitrary HTML being inserted into the
203
+ current topic. The allowed subset of HTML should be restricted to a
204
+ safe subset to prevent cross-site-scripting attacks.
205
+
206
+ Pages and projects have properties: we need to provide the ability to
207
+ edit those properties. Part of the properties that should be editable
208
+ include whether a page is frozen &mdash; this means that the page is
209
+ no longer editable by any user (unless it is unfrozen) and is
210
+ effectively a plain HTML page. Other properties include the static
211
+ header and footer information in a page or project.
212
+
213
+ Modern Wikis require an RSS feed. Ruwiki will provide one.
214
+
215
+ == The Future: &ldquo;Yes, Prime Minister&rdquo;
216
+ Ruwiki 1.0.0 does not represent the end of the line for Ruwiki, but
217
+ what the future holds is unclear. We&rsquo;ll see what the future
218
+ brings.
219
+ properties!project: Ruwiki
220
+ properties!title: Roadmap
221
+ properties!topic: Roadmap
222
+ properties!version: 1
223
+ ruwiki!content-version: 2
224
+ ruwiki!version: 0.9.0
225
+ properties!editable: false