mediawiki-gateway 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.ruby-version +1 -0
- data/Gemfile +13 -3
- data/Gemfile.lock +9 -15
- data/LICENSE +21 -0
- data/README +5 -0
- data/Rakefile +0 -10
- data/lib/media_wiki.rb +1 -1
- data/lib/media_wiki/gateway.rb +119 -8
- data/mediawiki-gateway.gemspec +12 -32
- data/spec/fake_media_wiki/api_pages.rb +2 -0
- data/spec/fake_media_wiki/app.rb +31 -3
- data/spec/gateway_spec.rb +49 -0
- metadata +47 -192
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWFlYzhhOWFmYmJiOWEwOTI5OTlhZGRhOGQ1NWM3MjgyYmE0YjJhMQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NzgzNDFiMTg2MzI4ZTM5MmQ4MzcxOTZjNzJlMGU5Zjg0ODFmMmI2Mw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NWQ4NGIxOWU4NTcwYjJiZjJiOTM5OGMxNmIyMWFjMjU3YmQ1ZjMzYjViMjMz
|
10
|
+
ZmJkODYwYTBhYzI3NTU2NzNkYzQ0YzNjZTFkNzcwZGM0YjI3NWI5MGZkNzYx
|
11
|
+
YTAyNTU4MjEzYjBhMGM5YzM1YTVhZGM5NGM0ZWM1MjhkN2JjZjg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTM1MTM5YmZmZDI4YTM3YmVhZjlmZDc4OTkwZjk2MDE0M2Y5Yjk2YzYyNzdh
|
14
|
+
MTUxNDJjNzdiYTc0OTQwMDM0MTEzYmFkMTA4MDg3NDA1NzgwYmRhN2JlODgx
|
15
|
+
YjY1OGRjMTU3N2JiODdmZGQxMmJiNGUzY2JhZDI4MWNhODE1MTc=
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3-p448
|
data/Gemfile
CHANGED
@@ -1,6 +1,16 @@
|
|
1
|
-
# A sample Gemfile
|
2
1
|
source "https://rubygems.org"
|
3
2
|
|
4
|
-
|
3
|
+
gem 'rest-client', '>= 1.3.0'
|
4
|
+
gem 'activesupport'
|
5
5
|
|
6
|
-
|
6
|
+
group :development do
|
7
|
+
gem 'atomic'
|
8
|
+
gem 'jeweler'
|
9
|
+
gem 'sham_rack'
|
10
|
+
gem 'rr'
|
11
|
+
gem 'simplecov'
|
12
|
+
gem 'rspec', '~> 1.3'
|
13
|
+
gem 'debugger'
|
14
|
+
gem 'sinatra'
|
15
|
+
gem 'activemodel'
|
16
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,3 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
mediawiki-gateway (0.5.2)
|
5
|
-
activesupport
|
6
|
-
mediawiki-gateway
|
7
|
-
rest-client (>= 1.3.0)
|
8
|
-
|
9
1
|
GEM
|
10
2
|
remote: https://rubygems.org/
|
11
3
|
specs:
|
@@ -15,15 +7,15 @@ GEM
|
|
15
7
|
activesupport (3.2.8)
|
16
8
|
i18n (~> 0.6)
|
17
9
|
multi_json (~> 1.0)
|
10
|
+
atomic (1.1.16)
|
18
11
|
builder (3.0.0)
|
19
12
|
columnize (0.3.6)
|
20
|
-
debugger (1.
|
13
|
+
debugger (1.6.1)
|
21
14
|
columnize (>= 0.3.1)
|
22
|
-
debugger-linecache (~> 1.
|
23
|
-
debugger-ruby_core_source (~> 1.
|
24
|
-
debugger-linecache (1.
|
25
|
-
|
26
|
-
debugger-ruby_core_source (1.1.3)
|
15
|
+
debugger-linecache (~> 1.2.0)
|
16
|
+
debugger-ruby_core_source (~> 1.2.3)
|
17
|
+
debugger-linecache (1.2.0)
|
18
|
+
debugger-ruby_core_source (1.2.3)
|
27
19
|
git (1.2.5)
|
28
20
|
i18n (0.6.0)
|
29
21
|
jeweler (1.8.4)
|
@@ -61,9 +53,11 @@ PLATFORMS
|
|
61
53
|
|
62
54
|
DEPENDENCIES
|
63
55
|
activemodel
|
56
|
+
activesupport
|
57
|
+
atomic
|
64
58
|
debugger
|
65
59
|
jeweler
|
66
|
-
|
60
|
+
rest-client (>= 1.3.0)
|
67
61
|
rr
|
68
62
|
rspec (~> 1.3)
|
69
63
|
sham_rack
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) Jani Patokallio and Lonely Planet 2010-2013
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
18
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
19
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
data/README
CHANGED
@@ -29,8 +29,13 @@ To compile and test MediaWiki::Gateway locally, Bundler and Ruby 1.9+ are expect
|
|
29
29
|
|
30
30
|
rvm install 1.9.3-p194
|
31
31
|
bundle install
|
32
|
+
|
33
|
+
This will list the available options:
|
32
34
|
bundle exec rake -T
|
33
35
|
|
36
|
+
To build and install the gem use:
|
37
|
+
bundle exec rake install
|
38
|
+
|
34
39
|
== Status
|
35
40
|
|
36
41
|
This gem is no longer in active development. Bugs will be fixed if reported, and pull requests that add new features are more than welcome, but asking for new features is unlikely to make them materialize out of thin air.
|
data/Rakefile
CHANGED
@@ -35,16 +35,6 @@ begin
|
|
35
35
|
gemspec.homepage = "http://github.com/jpatokal/mediawiki-gateway"
|
36
36
|
gemspec.authors = ["Jani Patokallio"]
|
37
37
|
gemspec.version = MediaWiki::VERSION
|
38
|
-
gemspec.add_dependency 'rest-client', '>= 1.3.0'
|
39
|
-
gemspec.add_dependency 'activesupport'
|
40
|
-
gemspec.add_development_dependency 'jeweler'
|
41
|
-
gemspec.add_development_dependency 'sham_rack'
|
42
|
-
gemspec.add_development_dependency 'rr'
|
43
|
-
gemspec.add_development_dependency 'simplecov'
|
44
|
-
gemspec.add_development_dependency 'rspec', '~> 1.3'
|
45
|
-
gemspec.add_development_dependency 'debugger'
|
46
|
-
gemspec.add_development_dependency 'sinatra'
|
47
|
-
gemspec.add_development_dependency 'activemodel'
|
48
38
|
end
|
49
39
|
rescue LoadError
|
50
40
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
data/lib/media_wiki.rb
CHANGED
data/lib/media_wiki/gateway.rb
CHANGED
@@ -132,8 +132,17 @@ module MediaWiki
|
|
132
132
|
# * [:overwrite] Allow overwriting existing pages
|
133
133
|
# * [:summary] Edit summary for history, string
|
134
134
|
# * [:token] Use this existing edit token instead requesting a new one (useful for bulk loads)
|
135
|
+
# * [:minor] Mark this edit as "minor" if true, mark this edit as "major" if false, leave major/minor status by default if not specified
|
136
|
+
# * [:notminor] Mark this edit as "major" if true
|
137
|
+
# * [:bot] Set the bot parameter (see http://www.mediawiki.org/wiki/API:Edit#Parameters). Defaults to false.
|
135
138
|
def create(title, content, options={})
|
136
139
|
form_data = {'action' => 'edit', 'title' => title, 'text' => content, 'summary' => (options[:summary] || ""), 'token' => get_token('edit', title)}
|
140
|
+
if @options[:bot] or options[:bot]
|
141
|
+
form_data['bot'] = '1'
|
142
|
+
form_data['assert'] = 'bot'
|
143
|
+
end
|
144
|
+
form_data['minor'] = '1' if options[:minor]
|
145
|
+
form_data['notminor'] = '1' if options[:minor] == false or options[:notminor]
|
137
146
|
form_data['createonly'] = "" unless options[:overwrite]
|
138
147
|
form_data['section'] = options[:section].to_s if options[:section]
|
139
148
|
make_api_request(form_data)
|
@@ -507,6 +516,52 @@ module MediaWiki
|
|
507
516
|
nil
|
508
517
|
end
|
509
518
|
end
|
519
|
+
|
520
|
+
# Get list of interlanguage links for given article[s]. Follows redirects. Returns a hash like { 'id' => 'Yerusalem', 'en' => 'Jerusalem', ... }
|
521
|
+
#
|
522
|
+
# _article_or_pageid_ is the title or pageid of a single article
|
523
|
+
# _lllimit_ is the maximum number of langlinks to return (defaults to 500, the maximum)
|
524
|
+
#
|
525
|
+
# Example:
|
526
|
+
# langlinks = mw.langlinks('Jerusalem')
|
527
|
+
def langlinks(article_or_pageid, lllimit = 500)
|
528
|
+
form_data = {'action' => 'query', 'prop' => 'langlinks', 'lllimit' => lllimit, 'redirects' => true}
|
529
|
+
case article_or_pageid
|
530
|
+
when Fixnum
|
531
|
+
form_data['pageids'] = article_or_pageid
|
532
|
+
else
|
533
|
+
form_data['titles'] = article_or_pageid
|
534
|
+
end
|
535
|
+
xml, dummy = make_api_request(form_data)
|
536
|
+
page = xml.elements["query/pages/page"]
|
537
|
+
if valid_page? page
|
538
|
+
if xml.elements["query/redirects/r"]
|
539
|
+
# We're dealing with the redirect here.
|
540
|
+
langlinks(page.attributes["pageid"].to_i, lllimit)
|
541
|
+
else
|
542
|
+
langl = REXML::XPath.match(page, 'langlinks/ll')
|
543
|
+
if langl.nil?
|
544
|
+
nil
|
545
|
+
else
|
546
|
+
links = {}
|
547
|
+
langl.each{ |ll| links[ll.attributes["lang"]] = ll.children[0].to_s }
|
548
|
+
return links
|
549
|
+
end
|
550
|
+
end
|
551
|
+
else
|
552
|
+
nil
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
# Convenience wrapper for _langlinks_ returning the title in language _lang_ (ISO code) for a given article of pageid, if it exists, via the interlanguage link
|
557
|
+
#
|
558
|
+
# Example:
|
559
|
+
#
|
560
|
+
# langlink = mw.langlink_for_lang('Tycho Brahe', 'de')
|
561
|
+
def langlink_for_lang(article_or_pageid, lang)
|
562
|
+
return langlinks(article_or_pageid)[lang]
|
563
|
+
end
|
564
|
+
|
510
565
|
# Requests image info from MediaWiki. Follows redirects.
|
511
566
|
#
|
512
567
|
# _file_name_or_page_id_ should be either:
|
@@ -665,6 +720,40 @@ module MediaWiki
|
|
665
720
|
end
|
666
721
|
end
|
667
722
|
|
723
|
+
# Create a new account
|
724
|
+
#
|
725
|
+
# [options] is +Hash+ passed as query arguments. See https://www.mediawiki.org/wiki/API:Account_creation#Parameters for more information.
|
726
|
+
def create_account(options)
|
727
|
+
form_data = options.merge({ 'action' => 'createaccount' })
|
728
|
+
res, dummy = make_api_request(form_data)
|
729
|
+
res
|
730
|
+
end
|
731
|
+
|
732
|
+
# Sets options for currenlty logged in user
|
733
|
+
#
|
734
|
+
# [changes] a +Hash+ that will be transformed into an equal sign and pipe-separated key value parameter
|
735
|
+
# [optionname] a +String+ indicating which option to change (optional)
|
736
|
+
# [optionvalue] the new value for optionname - allows pipe characters (optional)
|
737
|
+
# [reset] a +Boolean+ indicating if all preferences should be reset to site defaults (optional)
|
738
|
+
def options(changes = {}, optionname = nil, optionvalue = nil, reset = false)
|
739
|
+
form_data = { 'action' => 'options', 'token' => get_options_token }
|
740
|
+
|
741
|
+
if changes.present?
|
742
|
+
form_data['change'] = changes.map { |key, value| "#{key}=#{value}" }.join('|')
|
743
|
+
end
|
744
|
+
|
745
|
+
if optionname.present?
|
746
|
+
form_data[optionname] = optionvalue
|
747
|
+
end
|
748
|
+
|
749
|
+
if reset
|
750
|
+
form_data['reset'] = true
|
751
|
+
end
|
752
|
+
|
753
|
+
res, dummy = make_api_request(form_data)
|
754
|
+
res
|
755
|
+
end
|
756
|
+
|
668
757
|
# Set groups for a user
|
669
758
|
#
|
670
759
|
# [user] Username of user to modify
|
@@ -729,6 +818,12 @@ module MediaWiki
|
|
729
818
|
token
|
730
819
|
end
|
731
820
|
|
821
|
+
def get_options_token
|
822
|
+
form_data = { 'action' => 'tokens', 'type' => 'options' }
|
823
|
+
res, dummy = make_api_request(form_data)
|
824
|
+
res.elements['tokens'].attributes['optionstoken']
|
825
|
+
end
|
826
|
+
|
732
827
|
def userrights(user, token, groups_to_add, groups_to_remove, reason)
|
733
828
|
# groups_to_add and groups_to_remove can be a string or an array. Turn them into MediaWiki's pipe-delimited list format.
|
734
829
|
if groups_to_add.is_a? Array
|
@@ -784,7 +879,6 @@ module MediaWiki
|
|
784
879
|
if form_data.kind_of? Hash
|
785
880
|
form_data['format'] = 'xml'
|
786
881
|
form_data['maxlag'] = @options[:maxlag]
|
787
|
-
form_data['bot']="1" if @options[:bot]
|
788
882
|
end
|
789
883
|
http_send(@wiki_url, form_data, @headers.merge({:cookies => @cookies})) do |response, &block|
|
790
884
|
if response.code == 503 and retry_count < @options[:retry_count]
|
@@ -795,15 +889,32 @@ module MediaWiki
|
|
795
889
|
# Check response for errors and return XML
|
796
890
|
raise MediaWiki::Exception.new "Bad response: #{response}" unless response.code >= 200 and response.code < 300
|
797
891
|
doc = get_response(response.dup)
|
798
|
-
|
799
|
-
|
892
|
+
action = form_data['action']
|
893
|
+
|
894
|
+
# login and createaccount actions require a second request with a token received on the first request
|
895
|
+
if %w(login createaccount).include?(action)
|
896
|
+
action_result = doc.elements[action].attributes['result']
|
800
897
|
@cookies.merge!(response.cookies)
|
801
|
-
|
802
|
-
|
803
|
-
when "
|
804
|
-
|
805
|
-
|
898
|
+
|
899
|
+
case action_result.downcase
|
900
|
+
when "success" then
|
901
|
+
return [doc, false]
|
902
|
+
when "needtoken"
|
903
|
+
token = doc.elements[action].attributes["token"]
|
904
|
+
if action == 'login'
|
905
|
+
return make_api_request(form_data.merge('lgtoken' => token))
|
906
|
+
elsif action == 'createaccount'
|
907
|
+
return make_api_request(form_data.merge('token' => token))
|
908
|
+
end
|
909
|
+
else
|
910
|
+
if action == 'login'
|
911
|
+
raise Unauthorized.new("Login failed: #{action_result}")
|
912
|
+
elsif action == 'createaccount'
|
913
|
+
raise Unauthorized.new("Account creation failed: #{action_result}")
|
914
|
+
end
|
915
|
+
end
|
806
916
|
end
|
917
|
+
|
807
918
|
continue = (continue_xpath and doc.elements['query-continue']) ? REXML::XPath.first(doc, continue_xpath).value : nil
|
808
919
|
return [doc, continue]
|
809
920
|
end
|
data/mediawiki-gateway.gemspec
CHANGED
@@ -2,23 +2,28 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: mediawiki-gateway 0.6.0 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "mediawiki-gateway"
|
8
|
-
s.version = "0.
|
9
|
+
s.version = "0.6.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Jani Patokallio"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2014-03-25"
|
13
15
|
s.description = ""
|
14
16
|
s.email = "jpatokal@iki.fi"
|
15
17
|
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
16
19
|
"README"
|
17
20
|
]
|
18
21
|
s.files = [
|
22
|
+
".ruby-version",
|
19
23
|
".rvmrc",
|
20
24
|
"Gemfile",
|
21
25
|
"Gemfile.lock",
|
26
|
+
"LICENSE",
|
22
27
|
"README",
|
23
28
|
"Rakefile",
|
24
29
|
"config/hosts.yml",
|
@@ -50,25 +55,16 @@ Gem::Specification.new do |s|
|
|
50
55
|
"spec/utils_spec.rb"
|
51
56
|
]
|
52
57
|
s.homepage = "http://github.com/jpatokal/mediawiki-gateway"
|
53
|
-
s.
|
54
|
-
s.rubygems_version = "1.8.10"
|
58
|
+
s.rubygems_version = "2.2.2"
|
55
59
|
s.summary = "Connect to the mediawiki API"
|
56
60
|
|
57
61
|
if s.respond_to? :specification_version then
|
58
|
-
s.specification_version =
|
62
|
+
s.specification_version = 4
|
59
63
|
|
60
64
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
|
-
s.add_runtime_dependency(%q<mediawiki-gateway>, [">= 0"])
|
62
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
63
|
-
s.add_development_dependency(%q<sham_rack>, [">= 0"])
|
64
|
-
s.add_development_dependency(%q<rr>, [">= 0"])
|
65
|
-
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
66
|
-
s.add_development_dependency(%q<rspec>, ["~> 1.3"])
|
67
|
-
s.add_development_dependency(%q<debugger>, [">= 0"])
|
68
|
-
s.add_development_dependency(%q<sinatra>, [">= 0"])
|
69
|
-
s.add_development_dependency(%q<activemodel>, [">= 0"])
|
70
65
|
s.add_runtime_dependency(%q<rest-client>, [">= 1.3.0"])
|
71
66
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
67
|
+
s.add_development_dependency(%q<atomic>, [">= 0"])
|
72
68
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
73
69
|
s.add_development_dependency(%q<sham_rack>, [">= 0"])
|
74
70
|
s.add_development_dependency(%q<rr>, [">= 0"])
|
@@ -78,17 +74,9 @@ Gem::Specification.new do |s|
|
|
78
74
|
s.add_development_dependency(%q<sinatra>, [">= 0"])
|
79
75
|
s.add_development_dependency(%q<activemodel>, [">= 0"])
|
80
76
|
else
|
81
|
-
s.add_dependency(%q<mediawiki-gateway>, [">= 0"])
|
82
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
83
|
-
s.add_dependency(%q<sham_rack>, [">= 0"])
|
84
|
-
s.add_dependency(%q<rr>, [">= 0"])
|
85
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
86
|
-
s.add_dependency(%q<rspec>, ["~> 1.3"])
|
87
|
-
s.add_dependency(%q<debugger>, [">= 0"])
|
88
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
89
|
-
s.add_dependency(%q<activemodel>, [">= 0"])
|
90
77
|
s.add_dependency(%q<rest-client>, [">= 1.3.0"])
|
91
78
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
79
|
+
s.add_dependency(%q<atomic>, [">= 0"])
|
92
80
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
93
81
|
s.add_dependency(%q<sham_rack>, [">= 0"])
|
94
82
|
s.add_dependency(%q<rr>, [">= 0"])
|
@@ -99,17 +87,9 @@ Gem::Specification.new do |s|
|
|
99
87
|
s.add_dependency(%q<activemodel>, [">= 0"])
|
100
88
|
end
|
101
89
|
else
|
102
|
-
s.add_dependency(%q<mediawiki-gateway>, [">= 0"])
|
103
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
104
|
-
s.add_dependency(%q<sham_rack>, [">= 0"])
|
105
|
-
s.add_dependency(%q<rr>, [">= 0"])
|
106
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
107
|
-
s.add_dependency(%q<rspec>, ["~> 1.3"])
|
108
|
-
s.add_dependency(%q<debugger>, [">= 0"])
|
109
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
110
|
-
s.add_dependency(%q<activemodel>, [">= 0"])
|
111
90
|
s.add_dependency(%q<rest-client>, [">= 1.3.0"])
|
112
91
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
92
|
+
s.add_dependency(%q<atomic>, [">= 0"])
|
113
93
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
114
94
|
s.add_dependency(%q<sham_rack>, [">= 0"])
|
115
95
|
s.add_dependency(%q<rr>, [">= 0"])
|
@@ -109,6 +109,7 @@ module FakeMediaWiki
|
|
109
109
|
alias_method :deletetoken, :importtoken
|
110
110
|
alias_method :undeletetoken, :importtoken
|
111
111
|
alias_method :userrightstoken, :importtoken
|
112
|
+
alias_method :createusertoken, :importtoken
|
112
113
|
|
113
114
|
def edittoken
|
114
115
|
if @user
|
@@ -117,6 +118,7 @@ module FakeMediaWiki
|
|
117
118
|
BLANK_TOKEN
|
118
119
|
end
|
119
120
|
end
|
121
|
+
alias_method :optionstoken, :edittoken
|
120
122
|
end
|
121
123
|
|
122
124
|
class ApiError < StandardError
|
data/spec/fake_media_wiki/app.rb
CHANGED
@@ -172,10 +172,12 @@ module FakeMediaWiki
|
|
172
172
|
|
173
173
|
include QueryHandling
|
174
174
|
|
175
|
-
def api_response
|
175
|
+
def api_response(api_attr = {}, &block)
|
176
176
|
builder do |_|
|
177
|
-
|
178
|
-
|
177
|
+
if block_given?
|
178
|
+
_.api(api_attr, &block)
|
179
|
+
else
|
180
|
+
_.api(api_attr)
|
179
181
|
end
|
180
182
|
end
|
181
183
|
end
|
@@ -237,6 +239,14 @@ module FakeMediaWiki
|
|
237
239
|
params[:titles].split("|")
|
238
240
|
end
|
239
241
|
|
242
|
+
def tokens
|
243
|
+
@token.request(user)
|
244
|
+
|
245
|
+
api_response do |_|
|
246
|
+
_.tokens(:optionstoken => @token.optionstoken)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
240
250
|
def get_token
|
241
251
|
token_str = @token.request(user)
|
242
252
|
query_pages do |_, title, page|
|
@@ -300,6 +310,24 @@ module FakeMediaWiki
|
|
300
310
|
end
|
301
311
|
end
|
302
312
|
|
313
|
+
def createaccount
|
314
|
+
api_response do |_|
|
315
|
+
@token.request(user)
|
316
|
+
|
317
|
+
if params[:token].present?
|
318
|
+
@token.validate_admin
|
319
|
+
add_user(params[:name], params[:password], 'local', false)
|
320
|
+
_.createaccount(:token => @token.createusertoken, :userid => @users.length, :username => params[:name], :result => 'success')
|
321
|
+
else
|
322
|
+
_.createaccount(:token => @token.createusertoken, :result => 'needtoken')
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def options
|
328
|
+
api_response(:options => 'success')
|
329
|
+
end
|
330
|
+
|
303
331
|
def userrights
|
304
332
|
api_response do |_|
|
305
333
|
_.userrights({:user => params[:user]}) do
|
data/spec/gateway_spec.rb
CHANGED
@@ -749,6 +749,55 @@ describe MediaWiki::Gateway do
|
|
749
749
|
@gateway.send(:make_api_request, form_data)
|
750
750
|
end
|
751
751
|
|
752
|
+
describe "#create_account" do
|
753
|
+
|
754
|
+
describe "when logged in as admin" do
|
755
|
+
before do
|
756
|
+
@gateway.login("atlasmw", "wombat")
|
757
|
+
end
|
758
|
+
|
759
|
+
it 'should get expected result' do
|
760
|
+
expected = <<-XML
|
761
|
+
<api>
|
762
|
+
<createaccount result='success' token='admin_token+\\' userid='4' username='FooBar'/>
|
763
|
+
</api>
|
764
|
+
XML
|
765
|
+
|
766
|
+
Hash.from_xml(@gateway.create_account({ 'name' => 'FooBar', 'password' => 'BarBaz' }).to_s).should == Hash.from_xml(expected)
|
767
|
+
end
|
768
|
+
|
769
|
+
end
|
770
|
+
|
771
|
+
end
|
772
|
+
|
773
|
+
describe '#options' do
|
774
|
+
|
775
|
+
describe 'when logged in' do
|
776
|
+
before do
|
777
|
+
@gateway.login("atlasmw", "wombat")
|
778
|
+
end
|
779
|
+
|
780
|
+
describe 'requesting an options token' do
|
781
|
+
before do
|
782
|
+
@token = @gateway.send(:get_options_token)
|
783
|
+
end
|
784
|
+
|
785
|
+
it "should return a token" do
|
786
|
+
@token.should_not == nil
|
787
|
+
@token.should_not == "+\\"
|
788
|
+
end
|
789
|
+
|
790
|
+
end
|
791
|
+
|
792
|
+
it 'should return the expected response' do
|
793
|
+
expected = '<api options="success" />'
|
794
|
+
Hash.from_xml(@gateway.options({ :realname => 'Bar Baz' }).to_s).should == Hash.from_xml(expected)
|
795
|
+
end
|
796
|
+
|
797
|
+
end
|
798
|
+
|
799
|
+
end
|
800
|
+
|
752
801
|
describe "#user_rights" do
|
753
802
|
|
754
803
|
describe "when logged in as admin" do
|
metadata
CHANGED
@@ -1,323 +1,182 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mediawiki-gateway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jani Patokallio
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
17
|
-
none: false
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 1.3.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: jeweler
|
27
|
-
requirement: &2157654600 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
23
|
requirements:
|
30
24
|
- - ! '>='
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
type: :development
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *2157654600
|
26
|
+
version: 1.3.0
|
36
27
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
39
|
-
none: false
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
40
30
|
requirements:
|
41
31
|
- - ! '>='
|
42
32
|
- !ruby/object:Gem::Version
|
43
33
|
version: '0'
|
44
|
-
type: :
|
34
|
+
type: :runtime
|
45
35
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rr
|
49
|
-
requirement: &2157650880 !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - ! '>='
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
|
-
type: :development
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *2157650880
|
58
41
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement:
|
61
|
-
none: false
|
42
|
+
name: atomic
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
62
44
|
requirements:
|
63
45
|
- - ! '>='
|
64
46
|
- !ruby/object:Gem::Version
|
65
47
|
version: '0'
|
66
48
|
type: :development
|
67
49
|
prerelease: false
|
68
|
-
version_requirements:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec
|
71
|
-
requirement: &2157665280 !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
|
-
requirements:
|
74
|
-
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '1.3'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: *2157665280
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: debugger
|
82
|
-
requirement: &2157664380 !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
84
51
|
requirements:
|
85
52
|
- - ! '>='
|
86
53
|
- !ruby/object:Gem::Version
|
87
54
|
version: '0'
|
88
|
-
type: :development
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: *2157664380
|
91
55
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
requirement:
|
94
|
-
none: false
|
56
|
+
name: jeweler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
95
58
|
requirements:
|
96
59
|
- - ! '>='
|
97
60
|
- !ruby/object:Gem::Version
|
98
61
|
version: '0'
|
99
62
|
type: :development
|
100
63
|
prerelease: false
|
101
|
-
version_requirements:
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: activemodel
|
104
|
-
requirement: &2157662780 !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
65
|
requirements:
|
107
66
|
- - ! '>='
|
108
67
|
- !ruby/object:Gem::Version
|
109
68
|
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: *2157662780
|
113
69
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
115
|
-
requirement:
|
116
|
-
none: false
|
70
|
+
name: sham_rack
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
117
72
|
requirements:
|
118
73
|
- - ! '>='
|
119
74
|
- !ruby/object:Gem::Version
|
120
75
|
version: '0'
|
121
76
|
type: :development
|
122
77
|
prerelease: false
|
123
|
-
version_requirements:
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: sham_rack
|
126
|
-
requirement: &2157659740 !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
79
|
requirements:
|
129
80
|
- - ! '>='
|
130
81
|
- !ruby/object:Gem::Version
|
131
82
|
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: *2157659740
|
135
83
|
- !ruby/object:Gem::Dependency
|
136
84
|
name: rr
|
137
|
-
requirement:
|
138
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
139
86
|
requirements:
|
140
87
|
- - ! '>='
|
141
88
|
- !ruby/object:Gem::Version
|
142
89
|
version: '0'
|
143
90
|
type: :development
|
144
91
|
prerelease: false
|
145
|
-
version_requirements:
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: simplecov
|
148
|
-
requirement: &2157137500 !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
93
|
requirements:
|
151
94
|
- - ! '>='
|
152
95
|
- !ruby/object:Gem::Version
|
153
96
|
version: '0'
|
154
|
-
type: :development
|
155
|
-
prerelease: false
|
156
|
-
version_requirements: *2157137500
|
157
|
-
- !ruby/object:Gem::Dependency
|
158
|
-
name: rspec
|
159
|
-
requirement: &2157135860 !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
|
-
requirements:
|
162
|
-
- - ~>
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
version: '1.3'
|
165
|
-
type: :development
|
166
|
-
prerelease: false
|
167
|
-
version_requirements: *2157135860
|
168
97
|
- !ruby/object:Gem::Dependency
|
169
|
-
name:
|
170
|
-
requirement:
|
171
|
-
none: false
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
172
100
|
requirements:
|
173
101
|
- - ! '>='
|
174
102
|
- !ruby/object:Gem::Version
|
175
103
|
version: '0'
|
176
104
|
type: :development
|
177
105
|
prerelease: false
|
178
|
-
version_requirements:
|
179
|
-
- !ruby/object:Gem::Dependency
|
180
|
-
name: sinatra
|
181
|
-
requirement: &2157133780 !ruby/object:Gem::Requirement
|
182
|
-
none: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
107
|
requirements:
|
184
108
|
- - ! '>='
|
185
109
|
- !ruby/object:Gem::Version
|
186
110
|
version: '0'
|
187
|
-
type: :development
|
188
|
-
prerelease: false
|
189
|
-
version_requirements: *2157133780
|
190
111
|
- !ruby/object:Gem::Dependency
|
191
|
-
name:
|
192
|
-
requirement:
|
193
|
-
none: false
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
194
114
|
requirements:
|
195
|
-
- -
|
115
|
+
- - ~>
|
196
116
|
- !ruby/object:Gem::Version
|
197
|
-
version: '
|
117
|
+
version: '1.3'
|
198
118
|
type: :development
|
199
119
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
- !ruby/object:Gem::Dependency
|
202
|
-
name: rest-client
|
203
|
-
requirement: &2157131580 !ruby/object:Gem::Requirement
|
204
|
-
none: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
121
|
requirements:
|
206
|
-
- -
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: 1.3.0
|
209
|
-
type: :runtime
|
210
|
-
prerelease: false
|
211
|
-
version_requirements: *2157131580
|
212
|
-
- !ruby/object:Gem::Dependency
|
213
|
-
name: activesupport
|
214
|
-
requirement: &2157129920 !ruby/object:Gem::Requirement
|
215
|
-
none: false
|
216
|
-
requirements:
|
217
|
-
- - ! '>='
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
version: '0'
|
220
|
-
type: :runtime
|
221
|
-
prerelease: false
|
222
|
-
version_requirements: *2157129920
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: jeweler
|
225
|
-
requirement: &2157679720 !ruby/object:Gem::Requirement
|
226
|
-
none: false
|
227
|
-
requirements:
|
228
|
-
- - ! '>='
|
122
|
+
- - ~>
|
229
123
|
- !ruby/object:Gem::Version
|
230
|
-
version: '
|
231
|
-
type: :development
|
232
|
-
prerelease: false
|
233
|
-
version_requirements: *2157679720
|
124
|
+
version: '1.3'
|
234
125
|
- !ruby/object:Gem::Dependency
|
235
|
-
name:
|
236
|
-
requirement:
|
237
|
-
none: false
|
126
|
+
name: debugger
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
238
128
|
requirements:
|
239
129
|
- - ! '>='
|
240
130
|
- !ruby/object:Gem::Version
|
241
131
|
version: '0'
|
242
132
|
type: :development
|
243
133
|
prerelease: false
|
244
|
-
version_requirements:
|
245
|
-
- !ruby/object:Gem::Dependency
|
246
|
-
name: rr
|
247
|
-
requirement: &2157677380 !ruby/object:Gem::Requirement
|
248
|
-
none: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
249
135
|
requirements:
|
250
136
|
- - ! '>='
|
251
137
|
- !ruby/object:Gem::Version
|
252
138
|
version: '0'
|
253
|
-
type: :development
|
254
|
-
prerelease: false
|
255
|
-
version_requirements: *2157677380
|
256
139
|
- !ruby/object:Gem::Dependency
|
257
|
-
name:
|
258
|
-
requirement:
|
259
|
-
none: false
|
140
|
+
name: sinatra
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
260
142
|
requirements:
|
261
143
|
- - ! '>='
|
262
144
|
- !ruby/object:Gem::Version
|
263
145
|
version: '0'
|
264
146
|
type: :development
|
265
147
|
prerelease: false
|
266
|
-
version_requirements:
|
267
|
-
- !ruby/object:Gem::Dependency
|
268
|
-
name: rspec
|
269
|
-
requirement: &2157675900 !ruby/object:Gem::Requirement
|
270
|
-
none: false
|
271
|
-
requirements:
|
272
|
-
- - ~>
|
273
|
-
- !ruby/object:Gem::Version
|
274
|
-
version: '1.3'
|
275
|
-
type: :development
|
276
|
-
prerelease: false
|
277
|
-
version_requirements: *2157675900
|
278
|
-
- !ruby/object:Gem::Dependency
|
279
|
-
name: debugger
|
280
|
-
requirement: &2157675100 !ruby/object:Gem::Requirement
|
281
|
-
none: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
282
149
|
requirements:
|
283
150
|
- - ! '>='
|
284
151
|
- !ruby/object:Gem::Version
|
285
152
|
version: '0'
|
286
|
-
type: :development
|
287
|
-
prerelease: false
|
288
|
-
version_requirements: *2157675100
|
289
153
|
- !ruby/object:Gem::Dependency
|
290
|
-
name:
|
291
|
-
requirement:
|
292
|
-
none: false
|
154
|
+
name: activemodel
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
293
156
|
requirements:
|
294
157
|
- - ! '>='
|
295
158
|
- !ruby/object:Gem::Version
|
296
159
|
version: '0'
|
297
160
|
type: :development
|
298
161
|
prerelease: false
|
299
|
-
version_requirements:
|
300
|
-
- !ruby/object:Gem::Dependency
|
301
|
-
name: activemodel
|
302
|
-
requirement: &2157673340 !ruby/object:Gem::Requirement
|
303
|
-
none: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
304
163
|
requirements:
|
305
164
|
- - ! '>='
|
306
165
|
- !ruby/object:Gem::Version
|
307
166
|
version: '0'
|
308
|
-
type: :development
|
309
|
-
prerelease: false
|
310
|
-
version_requirements: *2157673340
|
311
167
|
description: ''
|
312
168
|
email: jpatokal@iki.fi
|
313
169
|
executables: []
|
314
170
|
extensions: []
|
315
171
|
extra_rdoc_files:
|
172
|
+
- LICENSE
|
316
173
|
- README
|
317
174
|
files:
|
175
|
+
- .ruby-version
|
318
176
|
- .rvmrc
|
319
177
|
- Gemfile
|
320
178
|
- Gemfile.lock
|
179
|
+
- LICENSE
|
321
180
|
- README
|
322
181
|
- Rakefile
|
323
182
|
- config/hosts.yml
|
@@ -349,29 +208,25 @@ files:
|
|
349
208
|
- spec/utils_spec.rb
|
350
209
|
homepage: http://github.com/jpatokal/mediawiki-gateway
|
351
210
|
licenses: []
|
211
|
+
metadata: {}
|
352
212
|
post_install_message:
|
353
213
|
rdoc_options: []
|
354
214
|
require_paths:
|
355
215
|
- lib
|
356
216
|
required_ruby_version: !ruby/object:Gem::Requirement
|
357
|
-
none: false
|
358
217
|
requirements:
|
359
218
|
- - ! '>='
|
360
219
|
- !ruby/object:Gem::Version
|
361
220
|
version: '0'
|
362
|
-
segments:
|
363
|
-
- 0
|
364
|
-
hash: 575989764206727344
|
365
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
366
|
-
none: false
|
367
222
|
requirements:
|
368
223
|
- - ! '>='
|
369
224
|
- !ruby/object:Gem::Version
|
370
225
|
version: '0'
|
371
226
|
requirements: []
|
372
227
|
rubyforge_project:
|
373
|
-
rubygems_version:
|
228
|
+
rubygems_version: 2.2.2
|
374
229
|
signing_key:
|
375
|
-
specification_version:
|
230
|
+
specification_version: 4
|
376
231
|
summary: Connect to the mediawiki API
|
377
232
|
test_files: []
|