mediawiki-gateway 0.3.2 → 0.3.3
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/Rakefile +1 -1
- data/doc/classes/MediaWiki.html +89 -50
- data/doc/classes/MediaWiki/Config.html +12 -12
- data/doc/classes/MediaWiki/Gateway.html +463 -409
- data/doc/created.rid +1 -1
- data/doc/files/README.html +4 -1
- data/doc/files/lib/media_wiki/gateway_rb.html +1 -1
- data/doc/files/lib/media_wiki/utils_rb.html +1 -1
- data/doc/files/script/create_page_rb.html +1 -1
- data/doc/files/script/search_content_rb.html +114 -0
- data/doc/files/script/upload_file_rb.html +1 -1
- data/doc/fr_file_index.html +1 -0
- data/doc/fr_method_index.html +32 -30
- data/lib/media_wiki.rb +1 -1
- data/lib/media_wiki/gateway.rb +13 -2
- data/mediawiki-gateway.gemspec +5 -5
- data/spec/fake_media_wiki/api_pages.rb +4 -3
- data/spec/fake_media_wiki/app.rb +13 -1
- data/spec/fake_media_wiki/query_handling.rb +2 -1
- data/spec/gateway_spec.rb +31 -3
- metadata +9 -6
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Thu,
|
1
|
+
Thu, 27 Jan 2011 16:07:00 +1100
|
data/doc/files/README.html
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Thu Jan 13 14:
|
59
|
+
<td>Thu Jan 13 14:26:00 +1100 2011</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -80,6 +80,9 @@ manipulation. Features out of the box:
|
|
80
80
|
</li>
|
81
81
|
<li>Handles login, edit, move etc tokens for you
|
82
82
|
|
83
|
+
</li>
|
84
|
+
<li>List, search operations work around API limits to fetch all results
|
85
|
+
|
83
86
|
</li>
|
84
87
|
<li>Support for maxlag detection and automated retries on 503
|
85
88
|
|
@@ -0,0 +1,114 @@
|
|
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>File: search_content.rb</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="fileHeader">
|
50
|
+
<h1>search_content.rb</h1>
|
51
|
+
<table class="header-table">
|
52
|
+
<tr class="top-aligned-row">
|
53
|
+
<td><strong>Path:</strong></td>
|
54
|
+
<td>script/search_content.rb
|
55
|
+
</td>
|
56
|
+
</tr>
|
57
|
+
<tr class="top-aligned-row">
|
58
|
+
<td><strong>Last Update:</strong></td>
|
59
|
+
<td>Tue Jan 25 11:20:49 +1100 2011</td>
|
60
|
+
</tr>
|
61
|
+
</table>
|
62
|
+
</div>
|
63
|
+
<!-- banner header -->
|
64
|
+
|
65
|
+
<div id="bodyContent">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<div id="contextContent">
|
70
|
+
|
71
|
+
<div id="description">
|
72
|
+
<p>
|
73
|
+
Sample script for searching page contents in a Wiki
|
74
|
+
</p>
|
75
|
+
|
76
|
+
</div>
|
77
|
+
|
78
|
+
<div id="requires-list">
|
79
|
+
<h3 class="section-bar">Required files</h3>
|
80
|
+
|
81
|
+
<div class="name-list">
|
82
|
+
lib/media_wiki
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
</div>
|
87
|
+
|
88
|
+
|
89
|
+
</div>
|
90
|
+
|
91
|
+
|
92
|
+
<!-- if includes -->
|
93
|
+
|
94
|
+
<div id="section">
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
<!-- if method_list -->
|
104
|
+
|
105
|
+
|
106
|
+
</div>
|
107
|
+
|
108
|
+
|
109
|
+
<div id="validator-badges">
|
110
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
</body>
|
114
|
+
</html>
|
data/doc/fr_file_index.html
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
<a href="files/script/get_page_rb.html">script/get_page.rb</a><br />
|
31
31
|
<a href="files/script/import_xml_rb.html">script/import_xml.rb</a><br />
|
32
32
|
<a href="files/script/run_fake_media_wiki_rb.html">script/run_fake_media_wiki.rb</a><br />
|
33
|
+
<a href="files/script/search_content_rb.html">script/search_content.rb</a><br />
|
33
34
|
<a href="files/script/upload_commons_rb.html">script/upload_commons.rb</a><br />
|
34
35
|
<a href="files/script/upload_file_rb.html">script/upload_file.rb</a><br />
|
35
36
|
</div>
|
data/doc/fr_method_index.html
CHANGED
@@ -20,36 +20,38 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/MediaWiki/Config.html#
|
24
|
-
<a href="classes/MediaWiki/Gateway.html#
|
25
|
-
<a href="classes/MediaWiki/Gateway.html#
|
26
|
-
<a href="classes/MediaWiki/Gateway.html#
|
27
|
-
<a href="classes/MediaWiki/Gateway.html#
|
28
|
-
<a href="classes/MediaWiki/Gateway.html#
|
29
|
-
<a href="classes/MediaWiki/Gateway.html#
|
30
|
-
<a href="classes/MediaWiki/Gateway.html#
|
31
|
-
<a href="classes/MediaWiki.html#M000001">
|
32
|
-
<a href="classes/MediaWiki
|
33
|
-
<a href="classes/MediaWiki.html#
|
34
|
-
<a href="classes/MediaWiki
|
35
|
-
<a href="classes/MediaWiki/Gateway.html#
|
36
|
-
<a href="classes/MediaWiki/Gateway.html#
|
37
|
-
<a href="classes/MediaWiki/Gateway.html#M000020">
|
38
|
-
<a href="classes/MediaWiki/Gateway.html#
|
39
|
-
<a href="classes/MediaWiki/Gateway.html#
|
40
|
-
<a href="classes/MediaWiki/Gateway.html#
|
41
|
-
<a href="classes/MediaWiki/Gateway.html#
|
42
|
-
<a href="classes/MediaWiki/Gateway.html#
|
43
|
-
<a href="classes/MediaWiki/
|
44
|
-
<a href="classes/MediaWiki/Gateway.html#
|
45
|
-
<a href="classes/MediaWiki/
|
46
|
-
<a href="classes/MediaWiki/Gateway.html#
|
47
|
-
<a href="classes/MediaWiki/Gateway.html#
|
48
|
-
<a href="classes/MediaWiki/Gateway.html#
|
49
|
-
<a href="classes/MediaWiki/Gateway.html#
|
50
|
-
<a href="classes/MediaWiki.html#
|
51
|
-
<a href="classes/MediaWiki.html#
|
52
|
-
<a href="classes/MediaWiki.html#M000004">
|
23
|
+
<a href="classes/MediaWiki/Config.html#M000032">abort (MediaWiki::Config)</a><br />
|
24
|
+
<a href="classes/MediaWiki/Gateway.html#M000016">backlinks (MediaWiki::Gateway)</a><br />
|
25
|
+
<a href="classes/MediaWiki/Gateway.html#M000011">create (MediaWiki::Gateway)</a><br />
|
26
|
+
<a href="classes/MediaWiki/Gateway.html#M000013">delete (MediaWiki::Gateway)</a><br />
|
27
|
+
<a href="classes/MediaWiki/Gateway.html#M000021">download (MediaWiki::Gateway)</a><br />
|
28
|
+
<a href="classes/MediaWiki/Gateway.html#M000023">export (MediaWiki::Gateway)</a><br />
|
29
|
+
<a href="classes/MediaWiki/Gateway.html#M000025">extensions (MediaWiki::Gateway)</a><br />
|
30
|
+
<a href="classes/MediaWiki/Gateway.html#M000009">get (MediaWiki::Gateway)</a><br />
|
31
|
+
<a href="classes/MediaWiki.html#M000001">get_base_name (MediaWiki)</a><br />
|
32
|
+
<a href="classes/MediaWiki.html#M000002">get_path_to_subpage (MediaWiki)</a><br />
|
33
|
+
<a href="classes/MediaWiki/Gateway.html#M000030">get_response (MediaWiki::Gateway)</a><br />
|
34
|
+
<a href="classes/MediaWiki.html#M000003">get_subpage (MediaWiki)</a><br />
|
35
|
+
<a href="classes/MediaWiki/Gateway.html#M000027">get_token (MediaWiki::Gateway)</a><br />
|
36
|
+
<a href="classes/MediaWiki/Gateway.html#M000028">get_undelete_token (MediaWiki::Gateway)</a><br />
|
37
|
+
<a href="classes/MediaWiki/Gateway.html#M000020">image_info (MediaWiki::Gateway)</a><br />
|
38
|
+
<a href="classes/MediaWiki/Gateway.html#M000022">import (MediaWiki::Gateway)</a><br />
|
39
|
+
<a href="classes/MediaWiki/Gateway.html#M000015">list (MediaWiki::Gateway)</a><br />
|
40
|
+
<a href="classes/MediaWiki/Gateway.html#M000008">login (MediaWiki::Gateway)</a><br />
|
41
|
+
<a href="classes/MediaWiki/Gateway.html#M000029">make_api_request (MediaWiki::Gateway)</a><br />
|
42
|
+
<a href="classes/MediaWiki/Gateway.html#M000012">move (MediaWiki::Gateway)</a><br />
|
43
|
+
<a href="classes/MediaWiki/Gateway.html#M000024">namespaces_by_prefix (MediaWiki::Gateway)</a><br />
|
44
|
+
<a href="classes/MediaWiki/Gateway.html#M000007">new (MediaWiki::Gateway)</a><br />
|
45
|
+
<a href="classes/MediaWiki/Config.html#M000031">new (MediaWiki::Config)</a><br />
|
46
|
+
<a href="classes/MediaWiki/Gateway.html#M000019">redirect? (MediaWiki::Gateway)</a><br />
|
47
|
+
<a href="classes/MediaWiki/Gateway.html#M000010">render (MediaWiki::Gateway)</a><br />
|
48
|
+
<a href="classes/MediaWiki/Gateway.html#M000017">search (MediaWiki::Gateway)</a><br />
|
49
|
+
<a href="classes/MediaWiki/Gateway.html#M000026">semantic_query (MediaWiki::Gateway)</a><br />
|
50
|
+
<a href="classes/MediaWiki/Gateway.html#M000014">undelete (MediaWiki::Gateway)</a><br />
|
51
|
+
<a href="classes/MediaWiki/Gateway.html#M000018">upload (MediaWiki::Gateway)</a><br />
|
52
|
+
<a href="classes/MediaWiki.html#M000004">uri_to_wiki (MediaWiki)</a><br />
|
53
|
+
<a href="classes/MediaWiki.html#M000006">version (MediaWiki)</a><br />
|
54
|
+
<a href="classes/MediaWiki.html#M000005">wiki_to_uri (MediaWiki)</a><br />
|
53
55
|
</div>
|
54
56
|
</div>
|
55
57
|
</body>
|
data/lib/media_wiki.rb
CHANGED
data/lib/media_wiki/gateway.rb
CHANGED
@@ -52,11 +52,11 @@ module MediaWiki
|
|
52
52
|
@username = username
|
53
53
|
end
|
54
54
|
|
55
|
-
# Fetch MediaWiki page in MediaWiki format
|
55
|
+
# Fetch MediaWiki page in MediaWiki format. Does not follow redirects.
|
56
56
|
#
|
57
57
|
# [page_title] Page title to fetch
|
58
58
|
#
|
59
|
-
# Returns content of page as string, nil if the page does not exist
|
59
|
+
# Returns content of page as string, nil if the page does not exist.
|
60
60
|
def get(page_title)
|
61
61
|
form_data = {'action' => 'query', 'prop' => 'revisions', 'rvprop' => 'content', 'titles' => page_title}
|
62
62
|
page = make_api_request(form_data).first.elements["query/pages/page"]
|
@@ -308,6 +308,17 @@ module MediaWiki
|
|
308
308
|
|
309
309
|
make_api_request(form_data)
|
310
310
|
end
|
311
|
+
|
312
|
+
# Checks if page is a redirect.
|
313
|
+
#
|
314
|
+
# [page_title] Page title to fetch
|
315
|
+
#
|
316
|
+
# Returns true if the page is a redirect, false if it is not or the page does not exist.
|
317
|
+
def redirect?(page_title)
|
318
|
+
form_data = {'action' => 'query', 'prop' => 'info', 'titles' => page_title}
|
319
|
+
page = make_api_request(form_data).first.elements["query/pages/page"]
|
320
|
+
!!(page and page.attributes["redirect"])
|
321
|
+
end
|
311
322
|
|
312
323
|
# Requests image info from MediaWiki. Follows redirects.
|
313
324
|
#
|
data/mediawiki-gateway.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mediawiki-gateway}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jani Patokallio"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-27}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{jpatokal@iki.fi}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -80,20 +80,20 @@ Gem::Specification.new do |s|
|
|
80
80
|
s.specification_version = 3
|
81
81
|
|
82
82
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
83
|
-
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
83
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 1.3.0"])
|
84
84
|
s.add_development_dependency(%q<activesupport>, [">= 0"])
|
85
85
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
86
86
|
s.add_development_dependency(%q<sham_rack>, [">= 0"])
|
87
87
|
s.add_development_dependency(%q<rr>, [">= 0"])
|
88
88
|
else
|
89
|
-
s.add_dependency(%q<rest-client>, [">= 0"])
|
89
|
+
s.add_dependency(%q<rest-client>, [">= 1.3.0"])
|
90
90
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
91
91
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
92
92
|
s.add_dependency(%q<sham_rack>, [">= 0"])
|
93
93
|
s.add_dependency(%q<rr>, [">= 0"])
|
94
94
|
end
|
95
95
|
else
|
96
|
-
s.add_dependency(%q<rest-client>, [">= 0"])
|
96
|
+
s.add_dependency(%q<rest-client>, [">= 1.3.0"])
|
97
97
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
98
98
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
99
99
|
s.add_dependency(%q<sham_rack>, [">= 0"])
|
@@ -20,21 +20,22 @@ module FakeMediaWiki
|
|
20
20
|
@namespaces.invert
|
21
21
|
end
|
22
22
|
|
23
|
-
def add(title, content)
|
23
|
+
def add(title, content, redirect=false)
|
24
24
|
@page_id += 1
|
25
25
|
dummy, prefix = title.split(":", 2).reverse
|
26
26
|
@pages[title] = {
|
27
27
|
:pageid => @page_id,
|
28
28
|
:namespace => namespaces_by_prefix[prefix || ""],
|
29
29
|
:title => title,
|
30
|
-
:content => content
|
30
|
+
:content => content,
|
31
|
+
:redirect => redirect
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
34
35
|
def get(title)
|
35
36
|
@pages[title]
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
def list(prefix)
|
39
40
|
@pages.select do |key, page|
|
40
41
|
key =~ /^#{prefix}/
|
data/spec/fake_media_wiki/app.rb
CHANGED
@@ -34,6 +34,7 @@ module FakeMediaWiki
|
|
34
34
|
@pages.add('Book:Italy', 'Introduction')
|
35
35
|
@pages.add_namespace(200, "Sandbox")
|
36
36
|
@pages.add('Foopage', 'Content')
|
37
|
+
@pages.add('Redirect', '#REDIRECT', true)
|
37
38
|
|
38
39
|
@extensions = { 'FooExtension' => 'r1', 'BarExtension' => 'r2' }
|
39
40
|
|
@@ -190,6 +191,18 @@ module FakeMediaWiki
|
|
190
191
|
end
|
191
192
|
end
|
192
193
|
end
|
194
|
+
|
195
|
+
def get_info
|
196
|
+
query_pages do |_, title, page|
|
197
|
+
attributes = { :title => title, :ns => '0'}
|
198
|
+
if page.nil?
|
199
|
+
attributes[:missing] = ""
|
200
|
+
else
|
201
|
+
attributes[:redirect] = "" if page[:redirect]
|
202
|
+
end
|
203
|
+
_.page(nil, attributes)
|
204
|
+
end
|
205
|
+
end
|
193
206
|
|
194
207
|
def get_revisions
|
195
208
|
query_pages do |_, title, page|
|
@@ -205,7 +218,6 @@ module FakeMediaWiki
|
|
205
218
|
end
|
206
219
|
end
|
207
220
|
end
|
208
|
-
|
209
221
|
end
|
210
222
|
|
211
223
|
def user
|
@@ -13,7 +13,8 @@ module FakeMediaWiki
|
|
13
13
|
def prop
|
14
14
|
return get_revisions if params[:prop] == "revisions"
|
15
15
|
return get_undelete_token if params[:drprop] == 'token'
|
16
|
-
return get_token if params[:
|
16
|
+
return get_token if params[:intoken]
|
17
|
+
return get_info if params[:prop] == "info"
|
17
18
|
end
|
18
19
|
|
19
20
|
def export
|
data/spec/gateway_spec.rb
CHANGED
@@ -204,6 +204,34 @@ describe MediaWiki::Gateway do
|
|
204
204
|
|
205
205
|
end
|
206
206
|
|
207
|
+
describe "#redirect?" do
|
208
|
+
|
209
|
+
describe "for an existing redirect page" do
|
210
|
+
|
211
|
+
it "returns true" do
|
212
|
+
@gateway.redirect?("Redirect").should be_true
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
describe "for an existing non-redirect page" do
|
218
|
+
|
219
|
+
it "returns false" do
|
220
|
+
@gateway.redirect?("Main Page").should be_false
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
describe "for a missing wiki page" do
|
226
|
+
|
227
|
+
it "returns false" do
|
228
|
+
@gateway.redirect?("page/missing").should be_false
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
234
|
+
|
207
235
|
describe "#render" do
|
208
236
|
|
209
237
|
describe "for an existing wiki page" do
|
@@ -286,7 +314,7 @@ describe MediaWiki::Gateway do
|
|
286
314
|
it "should create the page" do
|
287
315
|
expected = <<-XML
|
288
316
|
<api>
|
289
|
-
<edit new='' result='Success' pageid='
|
317
|
+
<edit new='' result='Success' pageid='8' title='A New Page' oldrevid='0' newrevid='8'/>
|
290
318
|
</api>
|
291
319
|
XML
|
292
320
|
Hash.from_xml(@page.to_s).should == Hash.from_xml(expected)
|
@@ -309,7 +337,7 @@ describe MediaWiki::Gateway do
|
|
309
337
|
it "should overwrite the existing page" do
|
310
338
|
expected = <<-XML
|
311
339
|
<api>
|
312
|
-
<edit result='Success' pageid='
|
340
|
+
<edit result='Success' pageid='8' title='Main Page' oldrevid='1' newrevid='8'/>
|
313
341
|
</api>
|
314
342
|
XML
|
315
343
|
Hash.from_xml(@new_page.to_s).should == Hash.from_xml(expected)
|
@@ -474,7 +502,7 @@ describe MediaWiki::Gateway do
|
|
474
502
|
end
|
475
503
|
|
476
504
|
it "should list all pages" do
|
477
|
-
@list.sort.should == [ "Book:Italy", "Empty", "Foopage", "Level/Level/Index", "Main 2", "Main Page" ]
|
505
|
+
@list.sort.should == [ "Book:Italy", "Empty", "Foopage", "Level/Level/Index", "Main 2", "Main Page", "Redirect" ]
|
478
506
|
end
|
479
507
|
|
480
508
|
end
|