ruwiki 0.9.0

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