mediawiki-gateway 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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>