mediawiki-gateway 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +3 -0
  2. data/README +12 -0
  3. data/Rakefile +40 -0
  4. data/VERSION +1 -0
  5. data/config/hosts.yml +17 -0
  6. data/doc/classes/MediaWiki.html +189 -0
  7. data/doc/classes/MediaWiki/Config.html +269 -0
  8. data/doc/classes/MediaWiki/Gateway.html +952 -0
  9. data/doc/created.rid +1 -0
  10. data/doc/files/README_txt.html +117 -0
  11. data/doc/files/media_wiki/config_rb.html +108 -0
  12. data/doc/files/media_wiki/gateway_rb.html +113 -0
  13. data/doc/files/media_wiki/utils_rb.html +101 -0
  14. data/doc/files/script/create_page_rb.html +115 -0
  15. data/doc/files/script/delete_book_rb.html +108 -0
  16. data/doc/files/script/export_xml_rb.html +114 -0
  17. data/doc/files/script/get_page_rb.html +114 -0
  18. data/doc/files/script/import_xml_rb.html +114 -0
  19. data/doc/files/script/undelete_page_rb.html +101 -0
  20. data/doc/files/script/upload_commons_rb.html +109 -0
  21. data/doc/files/script/upload_file_rb.html +115 -0
  22. data/doc/fr_class_index.html +29 -0
  23. data/doc/fr_file_index.html +38 -0
  24. data/doc/fr_method_index.html +49 -0
  25. data/doc/index.html +24 -0
  26. data/doc/rdoc-style.css +208 -0
  27. data/lib/media_wiki.rb +3 -0
  28. data/lib/media_wiki/config.rb +69 -0
  29. data/lib/media_wiki/gateway.rb +307 -0
  30. data/lib/media_wiki/utils.rb +18 -0
  31. data/mediawiki-gateway.gemspec +88 -0
  32. data/script/create_page.rb +14 -0
  33. data/script/delete_book.rb +14 -0
  34. data/script/export_xml.rb +14 -0
  35. data/script/get_page.rb +12 -0
  36. data/script/import_xml.rb +14 -0
  37. data/script/run_fake_media_wiki.rb +8 -0
  38. data/script/undelete_page.rb +15 -0
  39. data/script/upload_commons.rb +42 -0
  40. data/script/upload_file.rb +14 -0
  41. data/spec/fake_media_wiki/api_pages.rb +131 -0
  42. data/spec/fake_media_wiki/app.rb +262 -0
  43. data/spec/fake_media_wiki/query_handling.rb +112 -0
  44. data/spec/gateway_spec.old +535 -0
  45. data/spec/gateway_spec.rb +653 -0
  46. data/spec/import-test-data.xml +68 -0
  47. metadata +115 -0
@@ -0,0 +1,952 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: MediaWiki::Gateway</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">MediaWiki::Gateway</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/media_wiki/gateway_rb.html">
59
+ media_wiki/gateway.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+
82
+
83
+ </div>
84
+
85
+ <div id="method-list">
86
+ <h3 class="section-bar">Methods</h3>
87
+
88
+ <div class="name-list">
89
+ <a href="#M000007">create</a>&nbsp;&nbsp;
90
+ <a href="#M000008">delete</a>&nbsp;&nbsp;
91
+ <a href="#M000014">export</a>&nbsp;&nbsp;
92
+ <a href="#M000016">extensions</a>&nbsp;&nbsp;
93
+ <a href="#M000005">get</a>&nbsp;&nbsp;
94
+ <a href="#M000021">get_response</a>&nbsp;&nbsp;
95
+ <a href="#M000018">get_token</a>&nbsp;&nbsp;
96
+ <a href="#M000019">get_undelete_token</a>&nbsp;&nbsp;
97
+ <a href="#M000013">import</a>&nbsp;&nbsp;
98
+ <a href="#M000010">list</a>&nbsp;&nbsp;
99
+ <a href="#M000004">login</a>&nbsp;&nbsp;
100
+ <a href="#M000020">make_api_request</a>&nbsp;&nbsp;
101
+ <a href="#M000015">namespaces_by_prefix</a>&nbsp;&nbsp;
102
+ <a href="#M000003">new</a>&nbsp;&nbsp;
103
+ <a href="#M000006">render</a>&nbsp;&nbsp;
104
+ <a href="#M000011">search</a>&nbsp;&nbsp;
105
+ <a href="#M000017">semantic_query</a>&nbsp;&nbsp;
106
+ <a href="#M000009">undelete</a>&nbsp;&nbsp;
107
+ <a href="#M000012">upload</a>&nbsp;&nbsp;
108
+ </div>
109
+ </div>
110
+
111
+ </div>
112
+
113
+
114
+ <!-- if includes -->
115
+
116
+ <div id="section">
117
+
118
+
119
+
120
+
121
+
122
+ <div id="attribute-list">
123
+ <h3 class="section-bar">Attributes</h3>
124
+
125
+ <div class="name-list">
126
+ <table>
127
+ <tr class="top-aligned-row context-row">
128
+ <td class="context-item-name">base_url</td>
129
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
130
+ <td class="context-item-desc"></td>
131
+ </tr>
132
+ </table>
133
+ </div>
134
+ </div>
135
+
136
+
137
+
138
+ <!-- if method_list -->
139
+ <div id="methods">
140
+ <h3 class="section-bar">Public Class methods</h3>
141
+
142
+ <div id="method-M000003" class="method-detail">
143
+ <a name="M000003"></a>
144
+
145
+ <div class="method-heading">
146
+ <a href="#M000003" class="method-signature">
147
+ <span class="method-name">new</span><span class="method-args">(url, loglevel = Logger::WARN)</span>
148
+ </a>
149
+ </div>
150
+
151
+ <div class="method-description">
152
+ <p>
153
+ Set up a <a href="Gateway.html">MediaWiki::Gateway</a> for a given <a
154
+ href="../MediaWiki.html">MediaWiki</a> installation
155
+ </p>
156
+ <dl>
157
+ <dt>url</dt><dd>Path to API of target <a href="../MediaWiki.html">MediaWiki</a> (eg.
158
+ &quot;<a
159
+ href="http://en.wikipedia.org/w/api.php">en.wikipedia.org/w/api.php</a>&quot;)
160
+
161
+ </dd>
162
+ <dt>loglevel</dt><dd>Log level to use (optional, defaults to Logger::WARN)
163
+
164
+ </dd>
165
+ </dl>
166
+ <p><a class="source-toggle" href="#"
167
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
168
+ <div class="method-source-code" id="M000003-source">
169
+ <pre>
170
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 16</span>
171
+ 16: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">loglevel</span> = <span class="ruby-constant">Logger</span><span class="ruby-operator">::</span><span class="ruby-constant">WARN</span>)
172
+ 17: <span class="ruby-ivar">@log</span> = <span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">STDERR</span>)
173
+ 18: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">level</span> = <span class="ruby-identifier">loglevel</span>
174
+ 19: <span class="ruby-ivar">@wiki_url</span> = <span class="ruby-identifier">url</span>
175
+ 20: <span class="ruby-ivar">@headers</span> = { <span class="ruby-value str">&quot;User-Agent&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;MediaWiki::Gateway/#{MediaWiki.version}&quot;</span> }
176
+ 21: <span class="ruby-ivar">@cookies</span> = {}
177
+ 22: <span class="ruby-keyword kw">end</span>
178
+ </pre>
179
+ </div>
180
+ </div>
181
+ </div>
182
+
183
+ <h3 class="section-bar">Public Instance methods</h3>
184
+
185
+ <div id="method-M000007" class="method-detail">
186
+ <a name="M000007"></a>
187
+
188
+ <div class="method-heading">
189
+ <a href="#M000007" class="method-signature">
190
+ <span class="method-name">create</span><span class="method-args">(title, content, options={})</span>
191
+ </a>
192
+ </div>
193
+
194
+ <div class="method-description">
195
+ <p>
196
+ Create a <a href="Gateway.html#M000003">new</a> page, or overwrite an
197
+ existing one
198
+ </p>
199
+ <dl>
200
+ <dt>title</dt><dd>Page title to <a href="Gateway.html#M000007">create</a> or overwrite,
201
+ string
202
+
203
+ </dd>
204
+ <dt>content</dt><dd>Content for the page, string
205
+
206
+ </dd>
207
+ <dt>options</dt><dd>Hash of additional options
208
+
209
+ </dd>
210
+ </dl>
211
+ <p>
212
+ Options:
213
+ </p>
214
+ <ul>
215
+ <li>[overwrite] Allow overwriting existing pages
216
+
217
+ </li>
218
+ <li>[summary] Edit summary for history, string
219
+
220
+ </li>
221
+ <li>[token] Use this existing edit token instead requesting a <a
222
+ href="Gateway.html#M000003">new</a> one (useful for bulk loads)
223
+
224
+ </li>
225
+ </ul>
226
+ <p><a class="source-toggle" href="#"
227
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
228
+ <div class="method-source-code" id="M000007-source">
229
+ <pre>
230
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 80</span>
231
+ 80: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">content</span>, <span class="ruby-identifier">options</span>={})
232
+ 81: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'edit'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'text'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">content</span>, <span class="ruby-value str">'summary'</span> =<span class="ruby-operator">&gt;</span> (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:summary</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>), <span class="ruby-value str">'token'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">get_token</span>(<span class="ruby-value str">'edit'</span>, <span class="ruby-identifier">title</span>)}
233
+ 82: <span class="ruby-identifier">form_data</span>[<span class="ruby-value str">'createonly'</span>] = <span class="ruby-value str">&quot;&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:overwrite</span>]
234
+ 83: <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
235
+ 84: <span class="ruby-keyword kw">end</span>
236
+ </pre>
237
+ </div>
238
+ </div>
239
+ </div>
240
+
241
+ <div id="method-M000008" class="method-detail">
242
+ <a name="M000008"></a>
243
+
244
+ <div class="method-heading">
245
+ <a href="#M000008" class="method-signature">
246
+ <span class="method-name">delete</span><span class="method-args">(title)</span>
247
+ </a>
248
+ </div>
249
+
250
+ <div class="method-description">
251
+ <p>
252
+ Delete one page. (<a href="../MediaWiki.html">MediaWiki</a> API does not
253
+ support deleting multiple pages at a time.)
254
+ </p>
255
+ <dl>
256
+ <dt>title</dt><dd>Title of page to <a href="Gateway.html#M000008">delete</a>
257
+
258
+ </dd>
259
+ </dl>
260
+ <p><a class="source-toggle" href="#"
261
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
262
+ <div class="method-source-code" id="M000008-source">
263
+ <pre>
264
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 89</span>
265
+ 89: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>(<span class="ruby-identifier">title</span>)
266
+ 90: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'delete'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'token'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">get_token</span>(<span class="ruby-value str">'delete'</span>, <span class="ruby-identifier">title</span>)}
267
+ 91: <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
268
+ 92: <span class="ruby-keyword kw">end</span>
269
+ </pre>
270
+ </div>
271
+ </div>
272
+ </div>
273
+
274
+ <div id="method-M000014" class="method-detail">
275
+ <a name="M000014"></a>
276
+
277
+ <div class="method-heading">
278
+ <a href="#M000014" class="method-signature">
279
+ <span class="method-name">export</span><span class="method-args">(page_titles)</span>
280
+ </a>
281
+ </div>
282
+
283
+ <div class="method-description">
284
+ <p>
285
+ Exports a page or set of pages
286
+ </p>
287
+ <dl>
288
+ <dt>page_titles</dt><dd>String or array of page titles to fetch
289
+
290
+ </dd>
291
+ </dl>
292
+ <p>
293
+ Returns <a href="../MediaWiki.html">MediaWiki</a> XML dump
294
+ </p>
295
+ <p><a class="source-toggle" href="#"
296
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
297
+ <div class="method-source-code" id="M000014-source">
298
+ <pre>
299
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 199</span>
300
+ 199: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">export</span>(<span class="ruby-identifier">page_titles</span>)
301
+ 200: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-identifier">page_titles</span>].<span class="ruby-identifier">join</span>(<span class="ruby-value str">'|'</span>), <span class="ruby-value str">'export'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-value str">'exportnowrap'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>}
302
+ 201: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
303
+ 202: <span class="ruby-keyword kw">end</span>
304
+ </pre>
305
+ </div>
306
+ </div>
307
+ </div>
308
+
309
+ <div id="method-M000016" class="method-detail">
310
+ <a name="M000016"></a>
311
+
312
+ <div class="method-heading">
313
+ <a href="#M000016" class="method-signature">
314
+ <span class="method-name">extensions</span><span class="method-args">()</span>
315
+ </a>
316
+ </div>
317
+
318
+ <div class="method-description">
319
+ <p>
320
+ Get a <a href="Gateway.html#M000010">list</a> of all installed (and
321
+ registered) <a href="Gateway.html#M000016">extensions</a>
322
+ </p>
323
+ <p>
324
+ Returns array of <a href="Gateway.html#M000016">extensions</a> (name =&gt;
325
+ version)
326
+ </p>
327
+ <p><a class="source-toggle" href="#"
328
+ onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
329
+ <div class="method-source-code" id="M000016-source">
330
+ <pre>
331
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 220</span>
332
+ 220: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">extensions</span>
333
+ 221: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'meta'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'siteinfo'</span>, <span class="ruby-value str">'siprop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'extensions'</span> }
334
+ 222: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
335
+ 223: <span class="ruby-constant">REXML</span><span class="ruby-operator">::</span><span class="ruby-constant">XPath</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">res</span>, <span class="ruby-value str">&quot;//ext&quot;</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">extensions</span>, <span class="ruby-identifier">extension</span><span class="ruby-operator">|</span>
336
+ 224: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;name&quot;</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>
337
+ 225: <span class="ruby-identifier">extensions</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;version&quot;</span>]
338
+ 226: <span class="ruby-identifier">extensions</span>
339
+ 227: <span class="ruby-keyword kw">end</span>
340
+ 228: <span class="ruby-keyword kw">end</span>
341
+ </pre>
342
+ </div>
343
+ </div>
344
+ </div>
345
+
346
+ <div id="method-M000005" class="method-detail">
347
+ <a name="M000005"></a>
348
+
349
+ <div class="method-heading">
350
+ <a href="#M000005" class="method-signature">
351
+ <span class="method-name">get</span><span class="method-args">(page_title)</span>
352
+ </a>
353
+ </div>
354
+
355
+ <div class="method-description">
356
+ <p>
357
+ Fetch <a href="../MediaWiki.html">MediaWiki</a> page in <a
358
+ href="../MediaWiki.html">MediaWiki</a> format
359
+ </p>
360
+ <dl>
361
+ <dt>page_title</dt><dd>Page title to fetch
362
+
363
+ </dd>
364
+ </dl>
365
+ <p>
366
+ Returns nil if the page does not exist
367
+ </p>
368
+ <p><a class="source-toggle" href="#"
369
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
370
+ <div class="method-source-code" id="M000005-source">
371
+ <pre>
372
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 45</span>
373
+ 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">page_title</span>)
374
+ 46: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'revisions'</span>, <span class="ruby-value str">'rvprop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'content'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page_title</span>}
375
+ 47: <span class="ruby-identifier">page</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>).<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;query/pages/page&quot;</span>]
376
+ 48: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">page</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">page</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;missing&quot;</span>]
377
+ 49: <span class="ruby-keyword kw">nil</span>
378
+ 50: <span class="ruby-keyword kw">else</span>
379
+ 51: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;revisions/rev&quot;</span>].<span class="ruby-identifier">text</span>
380
+ 52: <span class="ruby-keyword kw">end</span>
381
+ 53: <span class="ruby-keyword kw">end</span>
382
+ </pre>
383
+ </div>
384
+ </div>
385
+ </div>
386
+
387
+ <div id="method-M000013" class="method-detail">
388
+ <a name="M000013"></a>
389
+
390
+ <div class="method-heading">
391
+ <a href="#M000013" class="method-signature">
392
+ <span class="method-name">import</span><span class="method-args">(xmlfile)</span>
393
+ </a>
394
+ </div>
395
+
396
+ <div class="method-description">
397
+ <p>
398
+ Imports a <a href="../MediaWiki.html">MediaWiki</a> XML dump
399
+ </p>
400
+ <dl>
401
+ <dt>xml</dt><dd>String or array of page names to fetch
402
+
403
+ </dd>
404
+ </dl>
405
+ <p>
406
+ Returns XML array &lt;api&gt;&lt;<a
407
+ href="Gateway.html#M000013">import</a>&gt;&lt;page/&gt;&lt;page/&gt;&#8230;
408
+ &lt;page revisions=&quot;1&quot;&gt; (or more) means successfully imported
409
+ &lt;page revisions=&quot;0&quot;&gt; means duplicate, not imported
410
+ </p>
411
+ <p><a class="source-toggle" href="#"
412
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
413
+ <div class="method-source-code" id="M000013-source">
414
+ <pre>
415
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 186</span>
416
+ 186: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">import</span>(<span class="ruby-identifier">xmlfile</span>)
417
+ 187: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">&quot;action&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;import&quot;</span>,
418
+ 188: <span class="ruby-value str">&quot;xml&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">xmlfile</span>),
419
+ 189: <span class="ruby-value str">&quot;token&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">get_token</span>(<span class="ruby-value str">'import'</span>, <span class="ruby-value str">'Main Page'</span>), <span class="ruby-comment cmt"># NB: dummy page name</span>
420
+ 190: <span class="ruby-value str">&quot;format&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'xml'</span> }
421
+ 191: <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
422
+ 192: <span class="ruby-keyword kw">end</span>
423
+ </pre>
424
+ </div>
425
+ </div>
426
+ </div>
427
+
428
+ <div id="method-M000010" class="method-detail">
429
+ <a name="M000010"></a>
430
+
431
+ <div class="method-heading">
432
+ <a href="#M000010" class="method-signature">
433
+ <span class="method-name">list</span><span class="method-args">(key)</span>
434
+ </a>
435
+ </div>
436
+
437
+ <div class="method-description">
438
+ <p>
439
+ Get a <a href="Gateway.html#M000010">list</a> of matching page titles
440
+ </p>
441
+ <dl>
442
+ <dt>key</dt><dd>Search key, matched as a prefix (^key.*). May contain or equal a namespace.
443
+
444
+ </dd>
445
+ </dl>
446
+ <p>
447
+ Returns array of page titles (empty if no matches)
448
+ </p>
449
+ <p><a class="source-toggle" href="#"
450
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
451
+ <div class="method-source-code" id="M000010-source">
452
+ <pre>
453
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 115</span>
454
+ 115: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">list</span>(<span class="ruby-identifier">key</span>)
455
+ 116: <span class="ruby-identifier">titles</span> = []
456
+ 117: <span class="ruby-identifier">apfrom</span> = <span class="ruby-keyword kw">nil</span>
457
+ 118: <span class="ruby-identifier">key</span>, <span class="ruby-identifier">namespace</span> = <span class="ruby-identifier">key</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;:&quot;</span>, <span class="ruby-value">2</span>).<span class="ruby-identifier">reverse</span>
458
+ 119: <span class="ruby-identifier">namespace</span> = <span class="ruby-identifier">namespaces_by_prefix</span>[<span class="ruby-identifier">namespace</span>] <span class="ruby-operator">||</span> <span class="ruby-value">0</span>
459
+ 120: <span class="ruby-keyword kw">begin</span>
460
+ 121: <span class="ruby-identifier">form_data</span> =
461
+ 122: {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>,
462
+ 123: <span class="ruby-value str">'list'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'allpages'</span>,
463
+ 124: <span class="ruby-value str">'apfrom'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">apfrom</span>,
464
+ 125: <span class="ruby-value str">'apprefix'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>,
465
+ 126: <span class="ruby-value str">'aplimit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>, <span class="ruby-comment cmt"># max allowed by API</span>
466
+ 127: <span class="ruby-value str">'apnamespace'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">namespace</span>}
467
+ 128: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
468
+ 129: <span class="ruby-identifier">apfrom</span> = <span class="ruby-identifier">res</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">'query-continue'</span>] <span class="ruby-operator">?</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">'query-continue/allpages'</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">'apfrom'</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
469
+ 130: <span class="ruby-identifier">titles</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">REXML</span><span class="ruby-operator">::</span><span class="ruby-constant">XPath</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">res</span>, <span class="ruby-value str">&quot;//p&quot;</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;title&quot;</span>] }
470
+ 131: <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">apfrom</span>
471
+ 132: <span class="ruby-identifier">titles</span>
472
+ 133: <span class="ruby-keyword kw">end</span>
473
+ </pre>
474
+ </div>
475
+ </div>
476
+ </div>
477
+
478
+ <div id="method-M000004" class="method-detail">
479
+ <a name="M000004"></a>
480
+
481
+ <div class="method-heading">
482
+ <a href="#M000004" class="method-signature">
483
+ <span class="method-name">login</span><span class="method-args">(username, password, domain = 'local')</span>
484
+ </a>
485
+ </div>
486
+
487
+ <div class="method-description">
488
+ <p>
489
+ Login to <a href="../MediaWiki.html">MediaWiki</a>
490
+ </p>
491
+ <dl>
492
+ <dt>username</dt><dd>Username
493
+
494
+ </dd>
495
+ <dt>password</dt><dd>Password
496
+
497
+ </dd>
498
+ <dt>domain</dt><dd>Domain for authentication plugin logins (eg. LDAP), optional &#8212;
499
+ defaults to &#8216;local&#8217; if not given
500
+
501
+ </dd>
502
+ </dl>
503
+ <p>
504
+ Throws error if <a href="Gateway.html#M000004">login</a> fails
505
+ </p>
506
+ <p><a class="source-toggle" href="#"
507
+ onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
508
+ <div class="method-source-code" id="M000004-source">
509
+ <pre>
510
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 33</span>
511
+ 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">login</span>(<span class="ruby-identifier">username</span>, <span class="ruby-identifier">password</span>, <span class="ruby-identifier">domain</span> = <span class="ruby-value str">'local'</span>)
512
+ 34: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'login'</span>, <span class="ruby-value str">'lgname'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">username</span>, <span class="ruby-value str">'lgpassword'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">password</span>, <span class="ruby-value str">'lgdomain'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">domain</span>}
513
+ 35: <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
514
+ 36: <span class="ruby-ivar">@password</span> = <span class="ruby-identifier">password</span>
515
+ 37: <span class="ruby-ivar">@username</span> = <span class="ruby-identifier">username</span>
516
+ 38: <span class="ruby-keyword kw">end</span>
517
+ </pre>
518
+ </div>
519
+ </div>
520
+ </div>
521
+
522
+ <div id="method-M000015" class="method-detail">
523
+ <a name="M000015"></a>
524
+
525
+ <div class="method-heading">
526
+ <a href="#M000015" class="method-signature">
527
+ <span class="method-name">namespaces_by_prefix</span><span class="method-args">()</span>
528
+ </a>
529
+ </div>
530
+
531
+ <div class="method-description">
532
+ <p>
533
+ Get a <a href="Gateway.html#M000010">list</a> of all known namespaces
534
+ </p>
535
+ <p>
536
+ Returns array of namespaces (name =&gt; id)
537
+ </p>
538
+ <p><a class="source-toggle" href="#"
539
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
540
+ <div class="method-source-code" id="M000015-source">
541
+ <pre>
542
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 207</span>
543
+ 207: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">namespaces_by_prefix</span>
544
+ 208: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'meta'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'siteinfo'</span>, <span class="ruby-value str">'siprop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'namespaces'</span> }
545
+ 209: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
546
+ 210: <span class="ruby-constant">REXML</span><span class="ruby-operator">::</span><span class="ruby-constant">XPath</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">res</span>, <span class="ruby-value str">&quot;//ns&quot;</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">namespaces</span>, <span class="ruby-identifier">namespace</span><span class="ruby-operator">|</span>
547
+ 211: <span class="ruby-identifier">prefix</span> = <span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;canonical&quot;</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>
548
+ 212: <span class="ruby-identifier">namespaces</span>[<span class="ruby-identifier">prefix</span>] = <span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;id&quot;</span>].<span class="ruby-identifier">to_i</span>
549
+ 213: <span class="ruby-identifier">namespaces</span>
550
+ 214: <span class="ruby-keyword kw">end</span>
551
+ 215: <span class="ruby-keyword kw">end</span>
552
+ </pre>
553
+ </div>
554
+ </div>
555
+ </div>
556
+
557
+ <div id="method-M000006" class="method-detail">
558
+ <a name="M000006"></a>
559
+
560
+ <div class="method-heading">
561
+ <a href="#M000006" class="method-signature">
562
+ <span class="method-name">render</span><span class="method-args">(page_title)</span>
563
+ </a>
564
+ </div>
565
+
566
+ <div class="method-description">
567
+ <p>
568
+ Render a <a href="../MediaWiki.html">MediaWiki</a> page as HTML
569
+ </p>
570
+ <dl>
571
+ <dt>page_title</dt><dd>Page title to fetch
572
+
573
+ </dd>
574
+ </dl>
575
+ <p>
576
+ Returns nil if the page does not exist
577
+ </p>
578
+ <p><a class="source-toggle" href="#"
579
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
580
+ <div class="method-source-code" id="M000006-source">
581
+ <pre>
582
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 60</span>
583
+ 60: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">page_title</span>)
584
+ 61: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'parse'</span>, <span class="ruby-value str">'page'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page_title</span>}
585
+ 62: <span class="ruby-identifier">parsed</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>).<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;parse&quot;</span>]
586
+ 63: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;revid&quot;</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'0'</span>
587
+ 64: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;text&quot;</span>].<span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/&lt;!--(.|\s)*?--&gt;/</span>, <span class="ruby-value str">''</span>)
588
+ 65: <span class="ruby-keyword kw">else</span>
589
+ 66: <span class="ruby-keyword kw">nil</span>
590
+ 67: <span class="ruby-keyword kw">end</span>
591
+ 68: <span class="ruby-keyword kw">end</span>
592
+ </pre>
593
+ </div>
594
+ </div>
595
+ </div>
596
+
597
+ <div id="method-M000011" class="method-detail">
598
+ <a name="M000011"></a>
599
+
600
+ <div class="method-heading">
601
+ <a href="#M000011" class="method-signature">
602
+ <span class="method-name">search</span><span class="method-args">(key, namespaces=nil, limit=10)</span>
603
+ </a>
604
+ </div>
605
+
606
+ <div class="method-description">
607
+ <p>
608
+ Get a <a href="Gateway.html#M000010">list</a> of pages with matching
609
+ content in given namespaces
610
+ </p>
611
+ <dl>
612
+ <dt>key</dt><dd>Search key
613
+
614
+ </dd>
615
+ <dt>namespaces</dt><dd>Array of namespace names to <a href="Gateway.html#M000011">search</a>
616
+ (defaults to NS_MAIN only)
617
+
618
+ </dd>
619
+ <dt>limit</dt><dd>Max number of hits to return
620
+
621
+ </dd>
622
+ </dl>
623
+ <p>
624
+ Returns array of page titles (empty if no matches)
625
+ </p>
626
+ <p><a class="source-toggle" href="#"
627
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
628
+ <div class="method-source-code" id="M000011-source">
629
+ <pre>
630
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 142</span>
631
+ 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">namespaces</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">limit</span>=<span class="ruby-value">10</span>)
632
+ 143: <span class="ruby-identifier">titles</span> = []
633
+ 144: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>,
634
+ 145: <span class="ruby-value str">'list'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'search'</span>,
635
+ 146: <span class="ruby-value str">'srwhat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text'</span>,
636
+ 147: <span class="ruby-value str">'srsearch'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>,
637
+ 148: <span class="ruby-value str">'srlimit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">limit</span>}
638
+ 149: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">namespaces</span>
639
+ 150: <span class="ruby-identifier">namespaces</span> = [ <span class="ruby-identifier">namespaces</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">namespaces</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Array</span>
640
+ 151: <span class="ruby-identifier">form_data</span>[<span class="ruby-value str">'srnamespace'</span>] = <span class="ruby-identifier">namespaces</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ns</span><span class="ruby-operator">|</span> <span class="ruby-identifier">namespaces_by_prefix</span>[<span class="ruby-identifier">ns</span>] <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'|'</span>)
641
+ 152: <span class="ruby-keyword kw">end</span>
642
+ 153: <span class="ruby-identifier">titles</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">REXML</span><span class="ruby-operator">::</span><span class="ruby-constant">XPath</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>), <span class="ruby-value str">&quot;//p&quot;</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;title&quot;</span>] }
643
+ 154: <span class="ruby-keyword kw">end</span>
644
+ </pre>
645
+ </div>
646
+ </div>
647
+ </div>
648
+
649
+ <div id="method-M000017" class="method-detail">
650
+ <a name="M000017"></a>
651
+
652
+ <div class="method-heading">
653
+ <a href="#M000017" class="method-signature">
654
+ <span class="method-name">semantic_query</span><span class="method-args">(query, params = [])</span>
655
+ </a>
656
+ </div>
657
+
658
+ <div class="method-description">
659
+ <p>
660
+ Execute Semantic Mediawiki query
661
+ </p>
662
+ <dl>
663
+ <dt>query</dt><dd>Semantic Mediawiki query
664
+
665
+ </dd>
666
+ <dt>params</dt><dd>Array of additional parameters or options, eg. mainlabel=Foo or ?Place
667
+ (optional)
668
+
669
+ </dd>
670
+ </dl>
671
+ <p>
672
+ Returns result as an HTML string
673
+ </p>
674
+ <p><a class="source-toggle" href="#"
675
+ onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
676
+ <div class="method-source-code" id="M000017-source">
677
+ <pre>
678
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 236</span>
679
+ 236: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">semantic_query</span>(<span class="ruby-identifier">query</span>, <span class="ruby-identifier">params</span> = [])
680
+ 237: <span class="ruby-identifier">params</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;format=list&quot;</span>
681
+ 238: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'parse'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'text'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;{{#ask:#{query}|#{params.join('|')}}}&quot;</span> }
682
+ 239: <span class="ruby-identifier">xml</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
683
+ 240: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;parse/text&quot;</span>].<span class="ruby-identifier">text</span>
684
+ 241: <span class="ruby-keyword kw">end</span>
685
+ </pre>
686
+ </div>
687
+ </div>
688
+ </div>
689
+
690
+ <div id="method-M000009" class="method-detail">
691
+ <a name="M000009"></a>
692
+
693
+ <div class="method-heading">
694
+ <a href="#M000009" class="method-signature">
695
+ <span class="method-name">undelete</span><span class="method-args">(title)</span>
696
+ </a>
697
+ </div>
698
+
699
+ <div class="method-description">
700
+ <p>
701
+ Undelete all revisions of one page.
702
+ </p>
703
+ <dl>
704
+ <dt>title</dt><dd>Title of page to <a href="Gateway.html#M000009">undelete</a>
705
+
706
+ </dd>
707
+ </dl>
708
+ <p>
709
+ Returns number of revisions undeleted.
710
+ </p>
711
+ <p><a class="source-toggle" href="#"
712
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
713
+ <div class="method-source-code" id="M000009-source">
714
+ <pre>
715
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 99</span>
716
+ 99: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">undelete</span>(<span class="ruby-identifier">title</span>)
717
+ 100: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">get_undelete_token</span>(<span class="ruby-identifier">title</span>)
718
+ 101: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>
719
+ 102: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'undelete'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'token'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">token</span> }
720
+ 103: <span class="ruby-identifier">xml</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
721
+ 104: <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;undelete&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;revisions&quot;</span>].<span class="ruby-identifier">to_i</span>
722
+ 105: <span class="ruby-keyword kw">else</span>
723
+ 106: <span class="ruby-value">0</span> <span class="ruby-comment cmt"># No revisions to undelete</span>
724
+ 107: <span class="ruby-keyword kw">end</span>
725
+ 108: <span class="ruby-keyword kw">end</span>
726
+ </pre>
727
+ </div>
728
+ </div>
729
+ </div>
730
+
731
+ <div id="method-M000012" class="method-detail">
732
+ <a name="M000012"></a>
733
+
734
+ <div class="method-heading">
735
+ <a href="#M000012" class="method-signature">
736
+ <span class="method-name">upload</span><span class="method-args">(path, options={})</span>
737
+ </a>
738
+ </div>
739
+
740
+ <div class="method-description">
741
+ <p>
742
+ Upload file to <a href="../MediaWiki.html">MediaWiki</a> Requires Mediawiki
743
+ 1.16+
744
+ </p>
745
+ <dl>
746
+ <dt>path</dt><dd>Path to file to <a href="Gateway.html#M000012">upload</a>
747
+
748
+ </dd>
749
+ <dt>options</dt><dd>Hash of additional options
750
+
751
+ </dd>
752
+ </dl>
753
+ <p>
754
+ Options:
755
+ </p>
756
+ <ul>
757
+ <li>[description] Description of this file
758
+
759
+ </li>
760
+ <li>[target] Target filename, defaults to local name if not given
761
+
762
+ </li>
763
+ <li>[summary] Edit summary for history
764
+
765
+ </li>
766
+ </ul>
767
+ <p><a class="source-toggle" href="#"
768
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
769
+ <div class="method-source-code" id="M000012-source">
770
+ <pre>
771
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 166</span>
772
+ 166: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">upload</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">options</span>={})
773
+ 167: <span class="ruby-identifier">comment</span> = (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:summary</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;Uploaded by MediaWiki::Gateway&quot;</span>)
774
+ 168: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>)
775
+ 169: <span class="ruby-identifier">filename</span> = (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:target</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">path</span>))
776
+ 170: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'upload'</span>,
777
+ 171: <span class="ruby-value str">'filename'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">filename</span>,
778
+ 172: <span class="ruby-value str">'file'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">file</span>,
779
+ 173: <span class="ruby-value str">'token'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">get_token</span>(<span class="ruby-value str">'edit'</span>, <span class="ruby-identifier">filename</span>),
780
+ 174: <span class="ruby-value str">'text'</span> =<span class="ruby-operator">&gt;</span> (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:description</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:summary</span>]),
781
+ 175: <span class="ruby-value str">'comment'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">comment</span>}
782
+ 176: <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
783
+ 177: <span class="ruby-keyword kw">end</span>
784
+ </pre>
785
+ </div>
786
+ </div>
787
+ </div>
788
+
789
+ <h3 class="section-bar">Private Instance methods</h3>
790
+
791
+ <div id="method-M000021" class="method-detail">
792
+ <a name="M000021"></a>
793
+
794
+ <div class="method-heading">
795
+ <a href="#M000021" class="method-signature">
796
+ <span class="method-name">get_response</span><span class="method-args">(res)</span>
797
+ </a>
798
+ </div>
799
+
800
+ <div class="method-description">
801
+ <p>
802
+ Get API XML response If there are errors, print and bail out Otherwise
803
+ return XML root
804
+ </p>
805
+ <p><a class="source-toggle" href="#"
806
+ onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
807
+ <div class="method-source-code" id="M000021-source">
808
+ <pre>
809
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 295</span>
810
+ 295: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">res</span>)
811
+ 296: <span class="ruby-identifier">doc</span> = <span class="ruby-constant">REXML</span><span class="ruby-operator">::</span><span class="ruby-constant">Document</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">res</span>).<span class="ruby-identifier">root</span>
812
+ 297: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;RES: #{doc}&quot;</span>)
813
+ 298: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;API error, response does not contain Mediawiki API XML: #{res}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;api&quot;</span>
814
+ 299: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;error&quot;</span>]
815
+ 300: <span class="ruby-identifier">code</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;error&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;code&quot;</span>]
816
+ 301: <span class="ruby-identifier">info</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;error&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;info&quot;</span>]
817
+ 302: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;API error: code '#{code}', info '#{info}'&quot;</span>
818
+ 303: <span class="ruby-keyword kw">end</span>
819
+ 304: <span class="ruby-identifier">doc</span>
820
+ 305: <span class="ruby-keyword kw">end</span>
821
+ </pre>
822
+ </div>
823
+ </div>
824
+ </div>
825
+
826
+ <div id="method-M000018" class="method-detail">
827
+ <a name="M000018"></a>
828
+
829
+ <div class="method-heading">
830
+ <a href="#M000018" class="method-signature">
831
+ <span class="method-name">get_token</span><span class="method-args">(type, page_titles)</span>
832
+ </a>
833
+ </div>
834
+
835
+ <div class="method-description">
836
+ <p>
837
+ Fetch token (type &#8216;<a href="Gateway.html#M000008">delete</a>&#8217;,
838
+ &#8216;edit&#8217;, &#8216;<a
839
+ href="Gateway.html#M000013">import</a>&#8217;)
840
+ </p>
841
+ <p><a class="source-toggle" href="#"
842
+ onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
843
+ <div class="method-source-code" id="M000018-source">
844
+ <pre>
845
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 246</span>
846
+ 246: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_token</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">page_titles</span>)
847
+ 247: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'info'</span>, <span class="ruby-value str">'intoken'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">type</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page_titles</span>}
848
+ 248: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
849
+ 249: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">res</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;query/pages/page&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-identifier">type</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;token&quot;</span>]
850
+ 250: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;User is not permitted to perform this operation: #{type}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>.<span class="ruby-identifier">nil?</span>
851
+ 251: <span class="ruby-identifier">token</span>
852
+ 252: <span class="ruby-keyword kw">end</span>
853
+ </pre>
854
+ </div>
855
+ </div>
856
+ </div>
857
+
858
+ <div id="method-M000019" class="method-detail">
859
+ <a name="M000019"></a>
860
+
861
+ <div class="method-heading">
862
+ <a href="#M000019" class="method-signature">
863
+ <span class="method-name">get_undelete_token</span><span class="method-args">(page_titles)</span>
864
+ </a>
865
+ </div>
866
+
867
+ <div class="method-description">
868
+ <p><a class="source-toggle" href="#"
869
+ onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
870
+ <div class="method-source-code" id="M000019-source">
871
+ <pre>
872
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 254</span>
873
+ 254: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_undelete_token</span>(<span class="ruby-identifier">page_titles</span>)
874
+ 255: <span class="ruby-identifier">form_data</span> = {<span class="ruby-value str">'action'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'list'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'deletedrevs'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'info'</span>, <span class="ruby-value str">'drprop'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'token'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page_titles</span>}
875
+ 256: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
876
+ 257: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;query/deletedrevs/page&quot;</span>]
877
+ 258: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">res</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;query/deletedrevs/page&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;token&quot;</span>]
878
+ 259: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;User is not permitted to perform this operation: #{type}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>.<span class="ruby-identifier">nil?</span>
879
+ 260: <span class="ruby-identifier">token</span>
880
+ 261: <span class="ruby-keyword kw">else</span>
881
+ 262: <span class="ruby-keyword kw">nil</span>
882
+ 263: <span class="ruby-keyword kw">end</span>
883
+ 264: <span class="ruby-keyword kw">end</span>
884
+ </pre>
885
+ </div>
886
+ </div>
887
+ </div>
888
+
889
+ <div id="method-M000020" class="method-detail">
890
+ <a name="M000020"></a>
891
+
892
+ <div class="method-heading">
893
+ <a href="#M000020" class="method-signature">
894
+ <span class="method-name">make_api_request</span><span class="method-args">(form_data)</span>
895
+ </a>
896
+ </div>
897
+
898
+ <div class="method-description">
899
+ <p>
900
+ Make generic request to API
901
+ </p>
902
+ <dl>
903
+ <dt>form_data</dt><dd>hash or string of attributes to post
904
+
905
+ </dd>
906
+ </dl>
907
+ <p>
908
+ Returns XML document
909
+ </p>
910
+ <p><a class="source-toggle" href="#"
911
+ onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
912
+ <div class="method-source-code" id="M000020-source">
913
+ <pre>
914
+ <span class="ruby-comment cmt"># File media_wiki/gateway.rb, line 271</span>
915
+ 271: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>)
916
+ 272: <span class="ruby-identifier">form_data</span>[<span class="ruby-value str">'format'</span>] = <span class="ruby-value str">'xml'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">form_data</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Hash</span>
917
+ 273: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;REQ: #{form_data.inspect}, #{@cookies.inspect}&quot;</span>)
918
+ 274: <span class="ruby-constant">RestClient</span>.<span class="ruby-identifier">post</span>(<span class="ruby-ivar">@wiki_url</span>, <span class="ruby-identifier">form_data</span>, <span class="ruby-ivar">@headers</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">:cookies</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@cookies</span>})) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">response</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span><span class="ruby-operator">|</span>
919
+ 275: <span class="ruby-comment cmt"># Check response for errors and return XML</span>
920
+ 276: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;API error, bad response: #{response}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">code</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">200</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">code</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">300</span>
921
+ 277: <span class="ruby-identifier">doc</span> = <span class="ruby-identifier">get_response</span>(<span class="ruby-identifier">response</span>.<span class="ruby-identifier">dup</span>)
922
+ 278: <span class="ruby-keyword kw">if</span>(<span class="ruby-identifier">form_data</span>[<span class="ruby-value str">'action'</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'login'</span>)
923
+ 279: <span class="ruby-identifier">login_result</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;login&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">'result'</span>]
924
+ 280: <span class="ruby-ivar">@cookies</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">response</span>.<span class="ruby-identifier">cookies</span>)
925
+ 281: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">login_result</span>
926
+ 282: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;Success&quot;</span> <span class="ruby-keyword kw">then</span> <span class="ruby-comment cmt"># do nothing</span>
927
+ 283: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;NeedToken&quot;</span> <span class="ruby-keyword kw">then</span> <span class="ruby-identifier">make_api_request</span>(<span class="ruby-identifier">form_data</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-value str">'lgtoken'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;login&quot;</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">&quot;token&quot;</span>]))
928
+ 284: <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Login failed: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">login_result</span>
929
+ 285: <span class="ruby-keyword kw">end</span>
930
+ 286: <span class="ruby-keyword kw">end</span>
931
+ 287: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">doc</span>
932
+ 288: <span class="ruby-keyword kw">end</span>
933
+ 289:
934
+ 290: <span class="ruby-keyword kw">end</span>
935
+ </pre>
936
+ </div>
937
+ </div>
938
+ </div>
939
+
940
+
941
+ </div>
942
+
943
+
944
+ </div>
945
+
946
+
947
+ <div id="validator-badges">
948
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
949
+ </div>
950
+
951
+ </body>
952
+ </html>