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/doc/created.rid CHANGED
@@ -1 +1 @@
1
- Thu, 13 Jan 2011 14:03:28 +1100
1
+ Thu, 27 Jan 2011 16:07:00 +1100
@@ -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:03:08 +1100 2011</td>
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
 
@@ -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 13:54:09 +1100 2011</td>
59
+ <td>Thu Jan 27 16:03:42 +1100 2011</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -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 11:10:57 +1100 2011</td>
59
+ <td>Tue Jan 25 13:42:08 +1100 2011</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Nov 26 10:40:15 +1100 2010</td>
59
+ <td>Tue Jan 25 11:16:55 +1100 2011</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -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&nbsp;&nbsp;
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>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Nov 26 10:40:15 +1100 2010</td>
59
+ <td>Tue Jan 25 11:16:42 +1100 2011</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -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>
@@ -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#M000030">abort (MediaWiki::Config)</a><br />
24
- <a href="classes/MediaWiki/Gateway.html#M000015">backlinks (MediaWiki::Gateway)</a><br />
25
- <a href="classes/MediaWiki/Gateway.html#M000010">create (MediaWiki::Gateway)</a><br />
26
- <a href="classes/MediaWiki/Gateway.html#M000012">delete (MediaWiki::Gateway)</a><br />
27
- <a href="classes/MediaWiki/Gateway.html#M000019">download (MediaWiki::Gateway)</a><br />
28
- <a href="classes/MediaWiki/Gateway.html#M000021">export (MediaWiki::Gateway)</a><br />
29
- <a href="classes/MediaWiki/Gateway.html#M000023">extensions (MediaWiki::Gateway)</a><br />
30
- <a href="classes/MediaWiki/Gateway.html#M000008">get (MediaWiki::Gateway)</a><br />
31
- <a href="classes/MediaWiki.html#M000001">get_path_to_subpage (MediaWiki)</a><br />
32
- <a href="classes/MediaWiki/Gateway.html#M000028">get_response (MediaWiki::Gateway)</a><br />
33
- <a href="classes/MediaWiki.html#M000002">get_subpage (MediaWiki)</a><br />
34
- <a href="classes/MediaWiki/Gateway.html#M000025">get_token (MediaWiki::Gateway)</a><br />
35
- <a href="classes/MediaWiki/Gateway.html#M000026">get_undelete_token (MediaWiki::Gateway)</a><br />
36
- <a href="classes/MediaWiki/Gateway.html#M000018">image_info (MediaWiki::Gateway)</a><br />
37
- <a href="classes/MediaWiki/Gateway.html#M000020">import (MediaWiki::Gateway)</a><br />
38
- <a href="classes/MediaWiki/Gateway.html#M000014">list (MediaWiki::Gateway)</a><br />
39
- <a href="classes/MediaWiki/Gateway.html#M000007">login (MediaWiki::Gateway)</a><br />
40
- <a href="classes/MediaWiki/Gateway.html#M000027">make_api_request (MediaWiki::Gateway)</a><br />
41
- <a href="classes/MediaWiki/Gateway.html#M000011">move (MediaWiki::Gateway)</a><br />
42
- <a href="classes/MediaWiki/Gateway.html#M000022">namespaces_by_prefix (MediaWiki::Gateway)</a><br />
43
- <a href="classes/MediaWiki/Config.html#M000029">new (MediaWiki::Config)</a><br />
44
- <a href="classes/MediaWiki/Gateway.html#M000006">new (MediaWiki::Gateway)</a><br />
45
- <a href="classes/MediaWiki/Gateway.html#M000009">render (MediaWiki::Gateway)</a><br />
46
- <a href="classes/MediaWiki/Gateway.html#M000016">search (MediaWiki::Gateway)</a><br />
47
- <a href="classes/MediaWiki/Gateway.html#M000024">semantic_query (MediaWiki::Gateway)</a><br />
48
- <a href="classes/MediaWiki/Gateway.html#M000013">undelete (MediaWiki::Gateway)</a><br />
49
- <a href="classes/MediaWiki/Gateway.html#M000017">upload (MediaWiki::Gateway)</a><br />
50
- <a href="classes/MediaWiki.html#M000003">uri_to_wiki (MediaWiki)</a><br />
51
- <a href="classes/MediaWiki.html#M000005">version (MediaWiki)</a><br />
52
- <a href="classes/MediaWiki.html#M000004">wiki_to_uri (MediaWiki)</a><br />
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
@@ -3,5 +3,5 @@ require File.dirname(__FILE__) + '/media_wiki/utils'
3
3
  require File.dirname(__FILE__) + '/media_wiki/gateway'
4
4
 
5
5
  module MediaWiki
6
- VERSION = "0.3.2"
6
+ VERSION = "0.3.3"
7
7
  end
@@ -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
  #
@@ -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.2"
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-25}
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}/
@@ -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[:prop] == "info"
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='7' title='A New Page' oldrevid='0' newrevid='7'/>
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='7' title='Main Page' oldrevid='1' newrevid='7'/>
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