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.
- data/.gitignore +3 -0
- data/README +12 -0
- data/Rakefile +40 -0
- data/VERSION +1 -0
- data/config/hosts.yml +17 -0
- data/doc/classes/MediaWiki.html +189 -0
- data/doc/classes/MediaWiki/Config.html +269 -0
- data/doc/classes/MediaWiki/Gateway.html +952 -0
- data/doc/created.rid +1 -0
- data/doc/files/README_txt.html +117 -0
- data/doc/files/media_wiki/config_rb.html +108 -0
- data/doc/files/media_wiki/gateway_rb.html +113 -0
- data/doc/files/media_wiki/utils_rb.html +101 -0
- data/doc/files/script/create_page_rb.html +115 -0
- data/doc/files/script/delete_book_rb.html +108 -0
- data/doc/files/script/export_xml_rb.html +114 -0
- data/doc/files/script/get_page_rb.html +114 -0
- data/doc/files/script/import_xml_rb.html +114 -0
- data/doc/files/script/undelete_page_rb.html +101 -0
- data/doc/files/script/upload_commons_rb.html +109 -0
- data/doc/files/script/upload_file_rb.html +115 -0
- data/doc/fr_class_index.html +29 -0
- data/doc/fr_file_index.html +38 -0
- data/doc/fr_method_index.html +49 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/media_wiki.rb +3 -0
- data/lib/media_wiki/config.rb +69 -0
- data/lib/media_wiki/gateway.rb +307 -0
- data/lib/media_wiki/utils.rb +18 -0
- data/mediawiki-gateway.gemspec +88 -0
- data/script/create_page.rb +14 -0
- data/script/delete_book.rb +14 -0
- data/script/export_xml.rb +14 -0
- data/script/get_page.rb +12 -0
- data/script/import_xml.rb +14 -0
- data/script/run_fake_media_wiki.rb +8 -0
- data/script/undelete_page.rb +15 -0
- data/script/upload_commons.rb +42 -0
- data/script/upload_file.rb +14 -0
- data/spec/fake_media_wiki/api_pages.rb +131 -0
- data/spec/fake_media_wiki/app.rb +262 -0
- data/spec/fake_media_wiki/query_handling.rb +112 -0
- data/spec/gateway_spec.old +535 -0
- data/spec/gateway_spec.rb +653 -0
- data/spec/import-test-data.xml +68 -0
- 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>
|
90
|
+
<a href="#M000008">delete</a>
|
91
|
+
<a href="#M000014">export</a>
|
92
|
+
<a href="#M000016">extensions</a>
|
93
|
+
<a href="#M000005">get</a>
|
94
|
+
<a href="#M000021">get_response</a>
|
95
|
+
<a href="#M000018">get_token</a>
|
96
|
+
<a href="#M000019">get_undelete_token</a>
|
97
|
+
<a href="#M000013">import</a>
|
98
|
+
<a href="#M000010">list</a>
|
99
|
+
<a href="#M000004">login</a>
|
100
|
+
<a href="#M000020">make_api_request</a>
|
101
|
+
<a href="#M000015">namespaces_by_prefix</a>
|
102
|
+
<a href="#M000003">new</a>
|
103
|
+
<a href="#M000006">render</a>
|
104
|
+
<a href="#M000011">search</a>
|
105
|
+
<a href="#M000017">semantic_query</a>
|
106
|
+
<a href="#M000009">undelete</a>
|
107
|
+
<a href="#M000012">upload</a>
|
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"> [R] </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
|
+
"<a
|
159
|
+
href="http://en.wikipedia.org/w/api.php">en.wikipedia.org/w/api.php</a>")
|
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">"User-Agent"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"MediaWiki::Gateway/#{MediaWiki.version}"</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">></span> <span class="ruby-value str">'edit'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'text'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">content</span>, <span class="ruby-value str">'summary'</span> =<span class="ruby-operator">></span> (<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:summary</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">""</span>), <span class="ruby-value str">'token'</span> =<span class="ruby-operator">></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">""</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">></span> <span class="ruby-value str">'delete'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'token'</span> =<span class="ruby-operator">></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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">></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">></span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-value str">'exportnowrap'</span> =<span class="ruby-operator">></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 =>
|
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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'meta'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'siteinfo'</span>, <span class="ruby-value str">'siprop'</span> =<span class="ruby-operator">></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">"//ext"</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">"name"</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">""</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">"version"</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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'revisions'</span>, <span class="ruby-value str">'rvprop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'content'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">></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">"query/pages/page"</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">"missing"</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">"revisions/rev"</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 <api><<a
|
407
|
+
href="Gateway.html#M000013">import</a>><page/><page/>…
|
408
|
+
<page revisions="1"> (or more) means successfully imported
|
409
|
+
<page revisions="0"> 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">"action"</span> =<span class="ruby-operator">></span> <span class="ruby-value str">"import"</span>,
|
418
|
+
188: <span class="ruby-value str">"xml"</span> =<span class="ruby-operator">></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">"token"</span> =<span class="ruby-operator">></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">"format"</span> =<span class="ruby-operator">></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">":"</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">></span> <span class="ruby-value str">'query'</span>,
|
462
|
+
123: <span class="ruby-value str">'list'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'allpages'</span>,
|
463
|
+
124: <span class="ruby-value str">'apfrom'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">apfrom</span>,
|
464
|
+
125: <span class="ruby-value str">'apprefix'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>,
|
465
|
+
126: <span class="ruby-value str">'aplimit'</span> =<span class="ruby-operator">></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">></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">"//p"</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">"title"</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 —
|
499
|
+
defaults to ‘local’ 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">></span> <span class="ruby-value str">'login'</span>, <span class="ruby-value str">'lgname'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">username</span>, <span class="ruby-value str">'lgpassword'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">password</span>, <span class="ruby-value str">'lgdomain'</span> =<span class="ruby-operator">></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 => 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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'meta'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'siteinfo'</span>, <span class="ruby-value str">'siprop'</span> =<span class="ruby-operator">></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">"//ns"</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">"canonical"</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">""</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">"id"</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">></span> <span class="ruby-value str">'parse'</span>, <span class="ruby-value str">'page'</span> =<span class="ruby-operator">></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">"parse"</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">"revid"</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">"text"</span>].<span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/<!--(.|\s)*?-->/</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">></span> <span class="ruby-value str">'query'</span>,
|
634
|
+
145: <span class="ruby-value str">'list'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'search'</span>,
|
635
|
+
146: <span class="ruby-value str">'srwhat'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'text'</span>,
|
636
|
+
147: <span class="ruby-value str">'srsearch'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>,
|
637
|
+
148: <span class="ruby-value str">'srlimit'</span> =<span class="ruby-operator">></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">"//p"</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">"title"</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"><<</span> <span class="ruby-value str">"format=list"</span>
|
681
|
+
238: <span class="ruby-identifier">form_data</span> = { <span class="ruby-value str">'action'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'parse'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'text'</span> =<span class="ruby-operator">></span> <span class="ruby-node">"{{#ask:#{query}|#{params.join('|')}}}"</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">"parse/text"</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">></span> <span class="ruby-value str">'undelete'</span>, <span class="ruby-value str">'title'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">title</span>, <span class="ruby-value str">'token'</span> =<span class="ruby-operator">></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">"undelete"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">"revisions"</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">"Uploaded by MediaWiki::Gateway"</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">></span> <span class="ruby-value str">'upload'</span>,
|
777
|
+
171: <span class="ruby-value str">'filename'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">filename</span>,
|
778
|
+
172: <span class="ruby-value str">'file'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">file</span>,
|
779
|
+
173: <span class="ruby-value str">'token'</span> =<span class="ruby-operator">></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">></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">></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">"RES: #{doc}"</span>)
|
813
|
+
298: <span class="ruby-identifier">raise</span> <span class="ruby-node">"API error, response does not contain Mediawiki API XML: #{res}"</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">"api"</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">"error"</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">"error"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">"code"</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">"error"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">"info"</span>]
|
817
|
+
302: <span class="ruby-identifier">raise</span> <span class="ruby-node">"API error: code '#{code}', info '#{info}'"</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 ‘<a href="Gateway.html#M000008">delete</a>’,
|
838
|
+
‘edit’, ‘<a
|
839
|
+
href="Gateway.html#M000013">import</a>’)
|
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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'info'</span>, <span class="ruby-value str">'intoken'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">type</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">></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">"query/pages/page"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-identifier">type</span> <span class="ruby-operator">+</span> <span class="ruby-value str">"token"</span>]
|
850
|
+
250: <span class="ruby-identifier">raise</span> <span class="ruby-node">"User is not permitted to perform this operation: #{type}"</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">></span> <span class="ruby-value str">'query'</span>, <span class="ruby-value str">'list'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'deletedrevs'</span>, <span class="ruby-value str">'prop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'info'</span>, <span class="ruby-value str">'drprop'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'token'</span>, <span class="ruby-value str">'titles'</span> =<span class="ruby-operator">></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">"query/deletedrevs/page"</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">"query/deletedrevs/page"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">"token"</span>]
|
878
|
+
259: <span class="ruby-identifier">raise</span> <span class="ruby-node">"User is not permitted to perform this operation: #{type}"</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">"REQ: #{form_data.inspect}, #{@cookies.inspect}"</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">></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">&</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">"API error, bad response: #{response}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">code</span> <span class="ruby-operator">>=</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"><</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">"login"</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">"Success"</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">"NeedToken"</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">></span> <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">"login"</span>].<span class="ruby-identifier">attributes</span>[<span class="ruby-value str">"token"</span>]))
|
928
|
+
284: <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Login failed: "</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>
|