mediawiki-gateway 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'thread'
2
2
  require 'rake'
3
- require 'rake/gempackagetask'
4
- require 'rake/rdoctask'
3
+ require "rubygems/package_task"
4
+ require 'rdoc/task'
5
5
  require 'spec/rake/spectask'
6
6
  require 'lib/media_wiki'
7
7
 
@@ -9,7 +9,7 @@ task :default => ['spec']
9
9
 
10
10
  desc 'generate API documentation to doc/index.html'
11
11
 
12
- Rake::RDocTask.new do |rd|
12
+ RDoc::Task.new do |rd|
13
13
  rd.rdoc_dir = 'doc'
14
14
  rd.main = 'README'
15
15
  rd.rdoc_files.include "README", "lib/media_wiki/**/*\.rb", "script/**/*\.rb"
@@ -42,6 +42,11 @@ begin
42
42
  gemspec.add_development_dependency 'jeweler'
43
43
  gemspec.add_development_dependency 'sham_rack'
44
44
  gemspec.add_development_dependency 'rr'
45
+ gemspec.add_development_dependency 'rcov'
46
+ gemspec.add_development_dependency 'rspec', '~> 1.3'
47
+ gemspec.add_development_dependency 'ruby-debug'
48
+ gemspec.add_development_dependency 'sinatra'
49
+ gemspec.add_development_dependency 'activemodel'
45
50
  end
46
51
  rescue LoadError
47
52
  puts "Jeweler not available. Install it with: gem install jeweler"
data/lib/media_wiki.rb CHANGED
@@ -5,5 +5,5 @@ require File.dirname(__FILE__) + '/media_wiki/utils'
5
5
  require File.dirname(__FILE__) + '/media_wiki/gateway'
6
6
 
7
7
  module MediaWiki
8
- VERSION = "0.4.4"
8
+ VERSION = "0.4.5"
9
9
  end
@@ -16,6 +16,7 @@ module MediaWiki
16
16
  # [options] Hash of options
17
17
  #
18
18
  # Options:
19
+ # [:bot] When set to true, executes API queries with the bot parameter (see http://www.mediawiki.org/wiki/API:Edit#Parameters). Defaults to false.
19
20
  # [:ignorewarnings] Log API warnings and invalid page titles, instead throwing MediaWiki::APIError
20
21
  # [:limit] Maximum number of results returned per search (see http://www.mediawiki.org/wiki/API:Query_-_Lists#Limits), defaults to the MediaWiki default of 500.
21
22
  # [:loglevel] Log level to use, defaults to Logger::WARN. Set to Logger::DEBUG to dump every request and response to the log.
@@ -28,7 +29,8 @@ module MediaWiki
28
29
  :loglevel => Logger::WARN,
29
30
  :maxlag => 5,
30
31
  :retry_count => 3,
31
- :retry_delay => 10
32
+ :retry_delay => 10,
33
+ :bot => false
32
34
  }
33
35
  @options = default_options.merge(options)
34
36
  @wiki_url = url
@@ -141,6 +143,67 @@ module MediaWiki
141
143
  create(title, content, {:overwrite => true}.merge(options))
142
144
  end
143
145
 
146
+ # Protect/unprotect a page
147
+ #
148
+ # Arguments:
149
+ # * [title] Page title to protect, string
150
+ # * [protections] Protections to apply, hash or array of hashes
151
+ #
152
+ # Protections:
153
+ # * [:action] (required) The action to protect, string
154
+ # * [:group] (required) The group allowed to perform the action, string
155
+ # * [:expiry] The protection expiry as a GNU timestamp, string
156
+ #
157
+ # * [options] Hash of additional options
158
+ #
159
+ # Options:
160
+ # * [:cascade] Protect pages included in this page, boolean
161
+ # * [:reason] Reason for protection, string
162
+ #
163
+ # Examples:
164
+ # 1. mw.protect('Main Page', {:action => 'edit', :group => 'all'}, {:cascade => true})
165
+ # 2. prt = [{:action => 'move', :group => 'sysop', :expiry => 'never'},
166
+ # {:action => 'edit', :group => 'autoconfirmed', :expiry => 'next Monday 16:04:57'}]
167
+ # mw.protect('Main Page', prt, {:reason => 'awesomeness'})
168
+ #
169
+ def protect(title, protections, options={})
170
+ # validate and format protections
171
+ protections = [protections] if protections.is_a?(Hash)
172
+ raise ArgumentError.new("Invalid type '#{protections.class}' for protections") unless protections.is_a?(Array)
173
+ valid_prt_options = %w(action group expiry)
174
+ required_prt_options = %w(action group)
175
+ p,e = [],[]
176
+ protections.each do |prt|
177
+ existing_prt_options = []
178
+ prt.keys.each do |opt|
179
+ if valid_prt_options.include?(opt.to_s)
180
+ existing_prt_options.push(opt.to_s)
181
+ else
182
+ raise ArgumentError.new("Unknown option '#{opt}' for protections")
183
+ end
184
+ end
185
+ required_prt_options.each{|opt| raise ArgumentError.new("Missing required option '#{opt}' for protections") unless existing_prt_options.include?(opt)}
186
+ p.push("#{prt[:action]}=#{prt[:group]}")
187
+ if prt.has_key?(:expiry)
188
+ e.push(prt[:expiry].to_s)
189
+ else
190
+ e.push('never')
191
+ end
192
+ end
193
+
194
+ # validate options
195
+ valid_options = %w(cascade reason)
196
+ options.keys.each{|opt| raise ArgumentError.new("Unknown option '#{opt}'") unless valid_options.include?(opt.to_s)}
197
+
198
+ # make API request
199
+ form_data = {'action' => 'protect', 'title' => title, 'token' => get_token('protect', title)}
200
+ form_data['protections'] = p.join('|')
201
+ form_data['expiry'] = e.join('|')
202
+ form_data['cascade'] = '' if options[:cascade] === true
203
+ form_data['reason'] = options[:reason].to_s if options[:reason]
204
+ make_api_request(form_data)
205
+ end
206
+
144
207
  # Move a page to a new title
145
208
  #
146
209
  # [from] Old page name
@@ -501,7 +564,7 @@ module MediaWiki
501
564
 
502
565
  private
503
566
 
504
- # Fetch token (type 'delete', 'edit', 'import', 'move')
567
+ # Fetch token (type 'delete', 'edit', 'import', 'move', 'protect')
505
568
  def get_token(type, page_titles)
506
569
  form_data = {'action' => 'query', 'prop' => 'info', 'intoken' => type, 'titles' => page_titles}
507
570
  res, dummy = make_api_request(form_data)
@@ -569,6 +632,7 @@ module MediaWiki
569
632
  if form_data.kind_of? Hash
570
633
  form_data['format'] = 'xml'
571
634
  form_data['maxlag'] = @options[:maxlag]
635
+ form_data['bot']="1" if @options[:bot]
572
636
  end
573
637
  log.debug("REQ: #{form_data.inspect}, #{@cookies.inspect}")
574
638
  RestClient.post(@wiki_url, form_data, @headers.merge({:cookies => @cookies})) do |response, &block|
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mediawiki-gateway"
8
- s.version = "0.4.4"
8
+ s.version = "0.4.5"
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 = "2012-02-05"
12
+ s.date = "2012-04-18"
13
13
  s.description = ""
14
14
  s.email = "jpatokal@iki.fi"
15
15
  s.extra_rdoc_files = [
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
46
46
  ]
47
47
  s.homepage = "http://github.com/jpatokal/mediawiki-gateway"
48
48
  s.require_paths = ["lib"]
49
- s.rubygems_version = "1.8.11"
49
+ s.rubygems_version = "1.8.10"
50
50
  s.summary = "Connect to the mediawiki API"
51
51
 
52
52
  if s.respond_to? :specification_version then
@@ -58,12 +58,22 @@ Gem::Specification.new do |s|
58
58
  s.add_development_dependency(%q<jeweler>, [">= 0"])
59
59
  s.add_development_dependency(%q<sham_rack>, [">= 0"])
60
60
  s.add_development_dependency(%q<rr>, [">= 0"])
61
+ s.add_development_dependency(%q<rcov>, [">= 0"])
62
+ s.add_development_dependency(%q<rspec>, ["~> 1.3"])
63
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
64
+ s.add_development_dependency(%q<sinatra>, [">= 0"])
65
+ s.add_development_dependency(%q<activemodel>, [">= 0"])
61
66
  else
62
67
  s.add_dependency(%q<rest-client>, [">= 1.3.0"])
63
68
  s.add_dependency(%q<activesupport>, [">= 0"])
64
69
  s.add_dependency(%q<jeweler>, [">= 0"])
65
70
  s.add_dependency(%q<sham_rack>, [">= 0"])
66
71
  s.add_dependency(%q<rr>, [">= 0"])
72
+ s.add_dependency(%q<rcov>, [">= 0"])
73
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
74
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
75
+ s.add_dependency(%q<sinatra>, [">= 0"])
76
+ s.add_dependency(%q<activemodel>, [">= 0"])
67
77
  end
68
78
  else
69
79
  s.add_dependency(%q<rest-client>, [">= 1.3.0"])
@@ -71,6 +81,11 @@ Gem::Specification.new do |s|
71
81
  s.add_dependency(%q<jeweler>, [">= 0"])
72
82
  s.add_dependency(%q<sham_rack>, [">= 0"])
73
83
  s.add_dependency(%q<rr>, [">= 0"])
84
+ s.add_dependency(%q<rcov>, [">= 0"])
85
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
86
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
87
+ s.add_dependency(%q<sinatra>, [">= 0"])
88
+ s.add_dependency(%q<activemodel>, [">= 0"])
74
89
  end
75
90
  end
76
91
 
data/spec/gateway_spec.rb CHANGED
@@ -4,149 +4,153 @@ require 'spec_helper'
4
4
  require 'sham_rack'
5
5
  require 'spec/fake_media_wiki/app'
6
6
  $fake_media_wiki = FakeMediaWiki::App.new
7
+ unless $fake_media_wiki.instance_of? FakeMediaWiki::App
8
+ # This is a horrible workaround for some bizarre conflict with later versions of ShamRack/Rack/Sinatra/Builder/...
9
+ $fake_media_wiki = $fake_media_wiki.instance_eval('@app').instance_eval('@app').app.app.app.app.app
10
+ end
7
11
  ShamRack.mount($fake_media_wiki, 'dummy-wiki.example')
8
12
 
9
13
  describe MediaWiki::Gateway do
10
-
14
+
11
15
  before do
12
16
  @gateway = MediaWiki::Gateway.new('http://dummy-wiki.example/w/api.php')
13
17
  $fake_media_wiki.reset
14
18
  end
15
19
 
16
20
  describe '#login' do
17
-
21
+
18
22
  describe "with a valid username & password" do
19
-
23
+
20
24
  before do
21
25
  @gateway.login('atlasmw', 'wombat')
22
26
  end
23
-
27
+
24
28
  it "should login successfully with the default domain" do
25
29
  $fake_media_wiki.logged_in('atlasmw').should == true
26
30
  end
27
-
31
+
28
32
  end
29
33
 
30
34
  describe "with a valid username, password and domain" do
31
-
35
+
32
36
  before do
33
37
  @gateway.login('ldapuser', 'ldappass', 'ldapdomain')
34
38
  end
35
-
39
+
36
40
  it "should login successfully" do
37
41
  $fake_media_wiki.logged_in('ldapuser').should == true
38
42
  end
39
-
43
+
40
44
  end
41
-
45
+
42
46
  describe "with an non-existent username" do
43
-
47
+
44
48
  it "should raise an error" do
45
49
  lambda do
46
50
  @gateway.login('bogususer', 'sekrit')
47
51
  end.should raise_error(MediaWiki::Unauthorized)
48
52
  end
49
-
53
+
50
54
  end
51
-
55
+
52
56
  describe "with an incorrect password" do
53
-
57
+
54
58
  it "should raise an error" do
55
59
  lambda do
56
60
  @gateway.login('atlasmw', 'sekrit')
57
61
  end.should raise_error(MediaWiki::Unauthorized)
58
62
  end
59
-
63
+
60
64
  end
61
65
 
62
66
  describe "with an incorrect domain" do
63
-
67
+
64
68
  it "should raise an error" do
65
69
  lambda do
66
70
  @gateway.login('atlasmw', 'wombat', 'bogusdomain')
67
71
  end.should raise_error(MediaWiki::Unauthorized)
68
72
  end
69
-
73
+
70
74
  end
71
-
75
+
72
76
  end
73
77
 
74
78
  describe "#get_token" do
75
-
79
+
76
80
  describe "when not logged in" do
77
-
81
+
78
82
  describe "requesting an edit token" do
79
-
83
+
80
84
  before do
81
85
  @token = @gateway.send(:get_token, 'edit', 'Main Page')
82
86
  end
83
-
87
+
84
88
  it "should return a blank token" do
85
89
  @token.should_not == nil
86
90
  @token.should == "+\\"
87
91
  end
88
-
92
+
89
93
  end
90
-
94
+
91
95
  describe "requesting an import token" do
92
-
96
+
93
97
  it "should raise an error" do
94
98
  lambda do
95
99
  @gateway.send(:get_token, 'import', 'Main Page')
96
100
  end.should raise_error(MediaWiki::Unauthorized)
97
101
  end
98
-
102
+
99
103
  end
100
-
104
+
101
105
  end
102
-
106
+
103
107
  describe "when logged in as admin user" do
104
-
108
+
105
109
  before do
106
110
  @gateway.login('atlasmw', 'wombat')
107
111
  end
108
-
112
+
109
113
  describe "requesting an edit token for a single page" do
110
-
114
+
111
115
  before do
112
116
  @token = @gateway.send(:get_token, 'edit', 'Main Page')
113
117
  end
114
-
118
+
115
119
  it "should return a token" do
116
120
  @token.should_not == nil
117
121
  @token.should_not == "+\\"
118
122
  end
119
-
123
+
120
124
  end
121
-
125
+
122
126
  describe "requesting an edit token for multiple pages" do
123
-
127
+
124
128
  before do
125
129
  @token = @gateway.send(:get_token, 'edit', "Main Page|Another Page")
126
130
  end
127
-
131
+
128
132
  it "should return a token" do
129
133
  @token.should_not == nil
130
134
  @token.should_not == "+\\"
131
135
  end
132
-
136
+
133
137
  end
134
-
138
+
135
139
  describe "requesting an import token" do
136
-
140
+
137
141
  before do
138
142
  @token = @gateway.send(:get_token, 'import', 'Main Page')
139
143
  end
140
-
144
+
141
145
  it "should return a token" do
142
146
  @token.should_not == nil
143
147
  @token.should_not == "+\\"
144
148
  end
145
-
149
+
146
150
  end
147
151
 
148
152
  end
149
-
153
+
150
154
  end
151
155
 
152
156
  describe "#get" do
@@ -233,14 +237,14 @@ describe MediaWiki::Gateway do
233
237
  end
234
238
 
235
239
  describe "#render" do
236
-
240
+
237
241
  describe "for an existing wiki page" do
238
242
 
239
243
  before do
240
244
  @pages = @gateway.render('Main Page')
241
245
  end
242
246
 
243
- it "should return the page content" do
247
+ it "should return the page content" do
244
248
  expected = 'Sample <B>HTML</B> content.'
245
249
  @pages.to_s.should == expected
246
250
  end
@@ -284,9 +288,9 @@ describe MediaWiki::Gateway do
284
288
  end
285
289
 
286
290
  end
287
-
291
+
288
292
  describe "for a missing wiki page" do
289
-
293
+
290
294
  before do
291
295
  @pages = @gateway.render('Invalidpage')
292
296
  end
@@ -294,23 +298,23 @@ describe MediaWiki::Gateway do
294
298
  it "should return nil" do
295
299
  @pages.should == nil
296
300
  end
297
-
301
+
298
302
  end
299
303
 
300
304
  end
301
-
305
+
302
306
  describe "#create" do
303
-
307
+
304
308
  before do
305
309
  @gateway.login('atlasmw', 'wombat')
306
310
  end
307
311
 
308
312
  describe "when creating a new page" do
309
-
313
+
310
314
  before do
311
315
  @page = @gateway.create("A New Page", "Some content")
312
316
  end
313
-
317
+
314
318
  it "should create the page" do
315
319
  expected = <<-XML
316
320
  <api>
@@ -319,21 +323,21 @@ describe MediaWiki::Gateway do
319
323
  XML
320
324
  Hash.from_xml(@page.to_s).should == Hash.from_xml(expected)
321
325
  end
322
-
326
+
323
327
  end
324
-
328
+
325
329
  describe "when creating a page that already exists" do
326
-
330
+
327
331
  before do
328
332
  $fake_media_wiki.reset
329
333
  end
330
-
334
+
331
335
  describe "and the 'overwrite' option is set" do
332
-
336
+
333
337
  before do
334
338
  @new_page = @gateway.create("Main Page", "Some new content", :summary => "The summary", :overwrite => true)
335
339
  end
336
-
340
+
337
341
  it "should overwrite the existing page" do
338
342
  expected = <<-XML
339
343
  <api>
@@ -342,21 +346,21 @@ describe MediaWiki::Gateway do
342
346
  XML
343
347
  Hash.from_xml(@new_page.to_s).should == Hash.from_xml(expected)
344
348
  end
345
-
349
+
346
350
  end
347
-
351
+
348
352
  describe "and the 'overwrite' option is not set" do
349
-
353
+
350
354
  it "should raise an error" do
351
355
  lambda do
352
356
  @gateway.create("Main Page", "Some new content")
353
357
  end.should raise_error(MediaWiki::APIError)
354
358
  end
355
-
359
+
356
360
  end
357
-
361
+
358
362
  end
359
-
363
+
360
364
  end
361
365
 
362
366
  describe "#edit" do
@@ -364,7 +368,7 @@ describe MediaWiki::Gateway do
364
368
  $fake_media_wiki.reset
365
369
  @edit_page = @gateway.edit("Main Page", "Some new content")
366
370
  end
367
-
371
+
368
372
  it "should overwrite the existing page" do
369
373
  expected = <<-XML
370
374
  <api>
@@ -373,22 +377,22 @@ describe MediaWiki::Gateway do
373
377
  XML
374
378
  Hash.from_xml(@edit_page.to_s).should == Hash.from_xml(expected)
375
379
  end
376
-
380
+
377
381
  end
378
382
 
379
383
  describe "#upload" do
380
-
384
+
381
385
  before do
382
386
  @gateway.login('atlasmw', 'wombat')
383
387
  end
384
388
 
385
389
  describe "when uploading a new file" do
386
-
390
+
387
391
  before do
388
392
  stub(File).new(anything) { "SAMPLEIMAGEDATA" }
389
393
  @page = @gateway.upload("some/path/sample_image.jpg")
390
394
  end
391
-
395
+
392
396
  it "should open the file" do
393
397
  File.should have_received.new("some/path/sample_image.jpg")
394
398
  end
@@ -401,9 +405,9 @@ describe MediaWiki::Gateway do
401
405
  XML
402
406
  Hash.from_xml(@page.to_s).should == Hash.from_xml(expected)
403
407
  end
404
-
408
+
405
409
  end
406
-
410
+
407
411
  end
408
412
 
409
413
  describe "#delete" do
@@ -418,25 +422,25 @@ describe MediaWiki::Gateway do
418
422
  </api>
419
423
  XML
420
424
  end
421
-
425
+
422
426
  before do
423
427
  @gateway.login("atlasmw", "wombat")
424
-
428
+
425
429
  create("Deletable Page", "Some content")
426
430
  @page = @gateway.delete("Deletable Page")
427
431
  end
428
432
 
429
433
  it "should delete the page" do
430
434
  Hash.from_xml(@page.to_s) == Hash.from_xml(delete_response)
431
- end
435
+ end
432
436
  end
433
-
437
+
434
438
  describe "and the page does not exist" do
435
-
439
+
436
440
  before do
437
441
  @gateway.login("atlasmw", "wombat")
438
442
  end
439
-
443
+
440
444
  it "should raise an error" do
441
445
  lambda do
442
446
  @gateway.delete("Missing Page")
@@ -450,7 +454,7 @@ describe MediaWiki::Gateway do
450
454
  before do
451
455
  create("Deletable Page", "Some content")
452
456
  end
453
-
457
+
454
458
  it "should raise an error" do
455
459
  lambda do
456
460
  @gateway.delete("Deletable Page")
@@ -458,7 +462,7 @@ describe MediaWiki::Gateway do
458
462
  end
459
463
 
460
464
  end
461
-
465
+
462
466
  end
463
467
 
464
468
  describe "#undelete" do
@@ -468,7 +472,7 @@ describe MediaWiki::Gateway do
468
472
  $fake_media_wiki.reset
469
473
  @gateway.login("atlasmw", "wombat")
470
474
  end
471
-
475
+
472
476
  describe "and the page no longer exists" do
473
477
  before do
474
478
  @revs = @gateway.undelete("Sandbox:Undeleted")
@@ -477,7 +481,7 @@ describe MediaWiki::Gateway do
477
481
  it "should recreate the given page" do
478
482
  @gateway.list("Sandbox:Undeleted").should == [ "Sandbox:Undeleted" ]
479
483
  end
480
-
484
+
481
485
  it "should report one undeleted revision" do
482
486
  @revs.should == 1
483
487
  end
@@ -503,17 +507,17 @@ describe MediaWiki::Gateway do
503
507
  end
504
508
 
505
509
  end
506
-
510
+
507
511
  end
508
512
 
509
513
  describe "#list" do
510
-
514
+
511
515
  before do
512
516
  $fake_media_wiki.reset
513
517
  end
514
-
518
+
515
519
  describe "with an empty key" do
516
-
520
+
517
521
  before do
518
522
  @list = @gateway.list("")
519
523
  end
@@ -521,11 +525,11 @@ describe MediaWiki::Gateway do
521
525
  it "should list all pages" do
522
526
  @list.sort.should == [ "Book:Italy", "Empty", "Foopage", "Level/Level/Index", "Main 2", "Main Page", "Redirect" ]
523
527
  end
524
-
528
+
525
529
  end
526
530
 
527
531
  describe "with a namespace as the key" do
528
-
532
+
529
533
  before do
530
534
  @list = @gateway.list("Book:")
531
535
  end
@@ -533,11 +537,11 @@ describe MediaWiki::Gateway do
533
537
  it "should list all pages in the namespace" do
534
538
  @list.should == [ "Book:Italy" ]
535
539
  end
536
-
540
+
537
541
  end
538
542
 
539
543
  describe "with a partial title as the key" do
540
-
544
+
541
545
  before do
542
546
  @list = @gateway.list("Main")
543
547
  end
@@ -545,13 +549,13 @@ describe MediaWiki::Gateway do
545
549
  it "should list all pages in the main namespace that start with key" do
546
550
  @list.sort.should == [ "Main 2", "Main Page" ]
547
551
  end
548
-
552
+
549
553
  end
550
554
 
551
555
  end
552
556
 
553
557
  describe "#search" do
554
-
558
+
555
559
  before do
556
560
  $fake_media_wiki.reset
557
561
  @gateway.create("Search Test", "Foo KEY Blah")
@@ -559,31 +563,31 @@ describe MediaWiki::Gateway do
559
563
  @gateway.create("Book:Search Test", "Bar KEY Baz")
560
564
  @gateway.create("Sandbox:Search Test", "Evil KEY Evil")
561
565
  end
562
-
566
+
563
567
  describe "with an empty key" do
564
-
568
+
565
569
  it "should raise an error" do
566
570
  lambda do
567
571
  @gateway.search("")
568
572
  end.should raise_error(MediaWiki::APIError)
569
573
  end
570
-
574
+
571
575
  end
572
576
 
573
577
  describe "with a valid key and no namespaces" do
574
-
578
+
575
579
  before do
576
580
  @search = @gateway.search("KEY")
577
581
  end
578
582
 
579
583
  it "should list all matching pages in the main namespace" do
580
- @search.should == [ "Search Test", "Search Test 2" ]
584
+ @search.should =~ [ "Search Test", "Search Test 2" ]
581
585
  end
582
-
586
+
583
587
  end
584
588
 
585
589
  describe "with a valid key and a namespace string" do
586
-
590
+
587
591
  before do
588
592
  @search = @gateway.search("KEY", "Book")
589
593
  end
@@ -591,25 +595,25 @@ describe MediaWiki::Gateway do
591
595
  it "should list all matching pages in the specified namespaces" do
592
596
  @search.should == [ "Book:Search Test" ]
593
597
  end
594
-
598
+
595
599
  end
596
600
 
597
601
  describe "with a valid key and a namespace array" do
598
-
602
+
599
603
  before do
600
604
  @search = @gateway.search("KEY", ["Book", "Sandbox"])
601
605
  end
602
606
 
603
607
  it "should list all matching pages in the specified namespaces" do
604
- @search.should == [ "Sandbox:Search Test", "Book:Search Test" ]
608
+ @search.should =~ [ "Sandbox:Search Test", "Book:Search Test" ]
605
609
  end
606
-
610
+
607
611
  end
608
612
 
609
613
  end
610
-
614
+
611
615
  describe "#namespaces_by_prefix" do
612
-
616
+
613
617
  before do
614
618
  $fake_media_wiki.reset
615
619
  @namespaces = @gateway.namespaces_by_prefix
@@ -622,7 +626,7 @@ describe MediaWiki::Gateway do
622
626
  end
623
627
 
624
628
  describe "#semantic_query" do
625
-
629
+
626
630
  before do
627
631
  @response = @gateway.semantic_query('[[place::123]]', ['mainlabel=Page'])
628
632
  end
@@ -630,9 +634,9 @@ describe MediaWiki::Gateway do
630
634
  it "should return an HTML string" do
631
635
  @response.should == 'Sample <B>HTML</B> content.'
632
636
  end
633
-
637
+
634
638
  end
635
-
639
+
636
640
  describe "#import" do
637
641
 
638
642
  def import_file
@@ -640,7 +644,7 @@ describe MediaWiki::Gateway do
640
644
  end
641
645
 
642
646
  describe "when not logged in" do
643
-
647
+
644
648
  it "should raise an error" do
645
649
  lambda do
646
650
  @gateway.import(import_file)
@@ -650,7 +654,7 @@ describe MediaWiki::Gateway do
650
654
  end
651
655
 
652
656
  describe "when logged in as admin" do
653
-
657
+
654
658
  def import_response
655
659
  <<-XML
656
660
  <api>
@@ -661,22 +665,22 @@ describe MediaWiki::Gateway do
661
665
  </api>
662
666
  XML
663
667
  end
664
-
668
+
665
669
  before do
666
670
  @gateway.login("atlasmw", "wombat")
667
671
  @page = @gateway.import(import_file)
668
672
  end
669
-
673
+
670
674
  it "should import content" do
671
675
  Hash.from_xml(@page.to_s) == Hash.from_xml(import_response)
672
676
  end
673
-
677
+
674
678
  end
675
-
679
+
676
680
  end
677
-
681
+
678
682
  describe "#export" do
679
-
683
+
680
684
  def export_response
681
685
  <<-XML
682
686
  <mediawiki>
@@ -691,19 +695,19 @@ describe MediaWiki::Gateway do
691
695
  </mediawiki>
692
696
  XML
693
697
  end
694
-
698
+
695
699
  before do
696
700
  @page = @gateway.export("Main Page")
697
701
  end
698
-
702
+
699
703
  it "should return export data for the page" do
700
704
  Hash.from_xml(@page.to_s).should == Hash.from_xml(export_response)
701
705
  end
702
-
706
+
703
707
  end
704
708
 
705
709
  describe "#namespaces_by_prefix" do
706
-
710
+
707
711
  before do
708
712
  $fake_media_wiki.reset
709
713
  @namespaces = @gateway.send :namespaces_by_prefix
@@ -716,7 +720,7 @@ describe MediaWiki::Gateway do
716
720
  end
717
721
 
718
722
  describe "#extensions" do
719
-
723
+
720
724
  before do
721
725
  $fake_media_wiki.reset
722
726
  @extensions = @gateway.extensions
@@ -733,14 +737,14 @@ describe MediaWiki::Gateway do
733
737
  form_data['createonly'] = "" unless options[:overwrite]
734
738
  @gateway.send(:make_api_request, form_data)
735
739
  end
736
-
740
+
737
741
  describe "#user_rights" do
738
-
742
+
739
743
  describe "when logged in as admin" do
740
744
  before do
741
745
  @gateway.login("atlasmw", "wombat")
742
746
  end
743
-
747
+
744
748
  describe "requesting a userrights token for an existing user" do
745
749
 
746
750
  before do
@@ -752,7 +756,7 @@ describe MediaWiki::Gateway do
752
756
  @token.should_not == "+\\"
753
757
  end
754
758
  end
755
-
759
+
756
760
  describe "requesting a userrights token for an nonexistant user" do
757
761
 
758
762
  it "should raise an error" do
@@ -761,9 +765,9 @@ describe MediaWiki::Gateway do
761
765
  end.should raise_error(MediaWiki::APIError)
762
766
  end
763
767
  end
764
-
768
+
765
769
  describe "changing a user's groups with a valid token" do
766
-
770
+
767
771
  def userrights_response
768
772
  <<-XML
769
773
  <api>
@@ -778,18 +782,18 @@ describe MediaWiki::Gateway do
778
782
  </api>
779
783
  XML
780
784
  end
781
-
785
+
782
786
  before do
783
787
  @token = @gateway.send(:get_userrights_token, 'nonadmin')
784
788
  @result = @gateway.send(:userrights, 'nonadmin', @token, 'newgroup', 'oldgroup', 'because I can')
785
789
  end
786
-
790
+
787
791
  it "should return a result matching the input" do
788
792
  Hash.from_xml(@result.to_s).should == Hash.from_xml(userrights_response)
789
793
  end
790
-
794
+
791
795
  end
792
-
796
+
793
797
  end
794
798
  end
795
799
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediawiki-gateway
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 4
10
- version: 0.4.4
9
+ - 5
10
+ version: 0.4.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jani Patokallio
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-05 00:00:00 Z
18
+ date: 2012-04-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rest-client
@@ -89,6 +89,77 @@ dependencies:
89
89
  version: "0"
90
90
  type: :development
91
91
  version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: rcov
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ type: :development
105
+ version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: rspec
108
+ prerelease: false
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ~>
113
+ - !ruby/object:Gem::Version
114
+ hash: 9
115
+ segments:
116
+ - 1
117
+ - 3
118
+ version: "1.3"
119
+ type: :development
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: ruby-debug
123
+ prerelease: false
124
+ requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ type: :development
134
+ version_requirements: *id008
135
+ - !ruby/object:Gem::Dependency
136
+ name: sinatra
137
+ prerelease: false
138
+ requirement: &id009 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ hash: 3
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ type: :development
148
+ version_requirements: *id009
149
+ - !ruby/object:Gem::Dependency
150
+ name: activemodel
151
+ prerelease: false
152
+ requirement: &id010 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ type: :development
162
+ version_requirements: *id010
92
163
  description: ""
93
164
  email: jpatokal@iki.fi
94
165
  executables: []
@@ -154,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
225
  requirements: []
155
226
 
156
227
  rubyforge_project:
157
- rubygems_version: 1.8.11
228
+ rubygems_version: 1.8.10
158
229
  signing_key:
159
230
  specification_version: 3
160
231
  summary: Connect to the mediawiki API