mediawiki_api 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +33 -1
- data/CREDITS +1 -0
- data/Gemfile +3 -3
- data/README.md +3 -0
- data/lib/mediawiki_api.rb +1 -1
- data/lib/mediawiki_api/client.rb +63 -43
- data/lib/mediawiki_api/exceptions.rb +6 -3
- data/lib/mediawiki_api/response.rb +19 -7
- data/lib/mediawiki_api/version.rb +2 -1
- data/mediawiki_api.gemspec +28 -20
- data/spec/client_spec.rb +153 -120
- data/spec/response_spec.rb +25 -25
- data/spec/spec_helper.rb +1 -1
- data/spec/support/request_helpers.rb +27 -24
- metadata +51 -35
- data/.rubocop_todo.yml +0 -102
data/spec/response_spec.rb
CHANGED
@@ -1,87 +1,87 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe MediawikiApi::Response do
|
4
4
|
let(:response) { MediawikiApi::Response.new(faraday_response, envelope) }
|
5
5
|
|
6
|
-
let(:faraday_response) { double(
|
7
|
-
let(:body) {
|
6
|
+
let(:faraday_response) { double('Faraday::Response', body: body) }
|
7
|
+
let(:body) { '{}' }
|
8
8
|
let(:response_object) { JSON.parse(body) }
|
9
9
|
let(:envelope) { [] }
|
10
10
|
|
11
|
-
describe
|
11
|
+
describe '#data' do
|
12
12
|
subject { response.data }
|
13
13
|
|
14
|
-
context
|
14
|
+
context 'with a JSON object response body' do
|
15
15
|
let(:body) { '{ "query": { "result": "success" } }' }
|
16
16
|
|
17
|
-
context
|
17
|
+
context 'and no expected envelope' do
|
18
18
|
let(:envelope) { [] }
|
19
19
|
|
20
20
|
it { is_expected.to eq(response_object) }
|
21
21
|
end
|
22
22
|
|
23
|
-
context
|
24
|
-
let(:envelope) { [
|
25
|
-
let(:nested_object) { response_object[
|
23
|
+
context 'and a single-level envelope' do
|
24
|
+
let(:envelope) { ['query'] }
|
25
|
+
let(:nested_object) { response_object['query'] }
|
26
26
|
|
27
27
|
it { is_expected.to eq(nested_object) }
|
28
28
|
end
|
29
29
|
|
30
|
-
context
|
31
|
-
let(:envelope) {
|
32
|
-
let(:nested_object) { response_object[
|
30
|
+
context 'and a multi-level envelope' do
|
31
|
+
let(:envelope) { %w(query result) }
|
32
|
+
let(:nested_object) { response_object['query']['result'] }
|
33
33
|
|
34
34
|
it { is_expected.to eq(nested_object) }
|
35
35
|
end
|
36
36
|
|
37
37
|
context "and a multi-level envelope that doesn't completely match" do
|
38
|
-
let(:envelope) {
|
39
|
-
let(:partially_nested_object) { response_object[
|
38
|
+
let(:envelope) { %w(query something) }
|
39
|
+
let(:partially_nested_object) { response_object['query'] }
|
40
40
|
|
41
41
|
it { is_expected.to eq(partially_nested_object) }
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
context
|
45
|
+
context 'with a JSON array response body' do
|
46
46
|
let(:body) { '[ "something" ]' }
|
47
47
|
|
48
|
-
context
|
49
|
-
let(:envelope) {
|
48
|
+
context 'with any expected envelope' do
|
49
|
+
let(:envelope) { %w(what ever) }
|
50
50
|
|
51
51
|
it { is_expected.to eq(response_object) }
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
describe
|
56
|
+
describe '#warnings' do
|
57
57
|
subject { response.warnings }
|
58
58
|
|
59
|
-
context
|
59
|
+
context 'where the response contains no warnings' do
|
60
60
|
let(:body) { '{ "query": { "result": "success" } }' }
|
61
61
|
|
62
62
|
it { is_expected.to be_empty }
|
63
63
|
end
|
64
64
|
|
65
|
-
context
|
65
|
+
context 'where the response contains warnings' do
|
66
66
|
let(:body) { '{ "warnings": { "main": { "*": "sorta bad message" } } }' }
|
67
67
|
|
68
68
|
it { is_expected.to_not be_empty }
|
69
|
-
it { is_expected.to include(
|
69
|
+
it { is_expected.to include('sorta bad message') }
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
describe
|
73
|
+
describe '#warnings?' do
|
74
74
|
subject { response.warnings? }
|
75
75
|
|
76
76
|
before { allow(response).to receive(:warnings) { warnings } }
|
77
77
|
|
78
|
-
context
|
79
|
-
let(:warnings) { [
|
78
|
+
context 'where there are warnings' do
|
79
|
+
let(:warnings) { ['warning'] }
|
80
80
|
|
81
81
|
it { is_expected.to be(true) }
|
82
82
|
end
|
83
83
|
|
84
|
-
context
|
84
|
+
context 'where there are no warnings' do
|
85
85
|
let(:warnings) { [] }
|
86
86
|
|
87
87
|
it { is_expected.to be(false) }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/setup'
|
2
2
|
Bundler.require(:default, :development)
|
@@ -1,34 +1,37 @@
|
|
1
|
-
module MediawikiApi
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module MediawikiApi
|
2
|
+
# testing helpers
|
3
|
+
module RequestHelpers
|
4
|
+
def api_url
|
5
|
+
'http://localhost/api.php'
|
6
|
+
end
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
def index_url
|
9
|
+
'http://localhost/w/index.php'
|
10
|
+
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
def mock_token
|
13
|
+
'token123'
|
14
|
+
end
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
def stub_api_request(method, params)
|
17
|
+
params = params.each.with_object({}) { |(k, v), p| p[k] = v.to_s }
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
stub_request(method, api_url).
|
20
|
+
with((method == :post ? :body : :query) => params.merge(format: 'json'))
|
21
|
+
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
def stub_action_request(action, params = {})
|
24
|
+
method = params.delete(:http_method) || :post
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
+
stub_api_request(method, params.merge(action: action, token: mock_token))
|
27
|
+
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
def stub_token_request(type, warning = nil)
|
30
|
+
response = { tokens: { "#{type}token" => mock_token } }
|
31
|
+
response[:warnings] = { type => { '*' => [warning] } } unless warning.nil?
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
+
stub_api_request(:get, action: 'tokens', type: type).
|
34
|
+
to_return(body: response.to_json)
|
35
|
+
end
|
33
36
|
end
|
34
37
|
end
|
metadata
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mediawiki_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amir Aharoni
|
8
|
+
- Asaf Bartov
|
8
9
|
- Chris McMahon
|
9
10
|
- Dan Duvall
|
10
11
|
- Jeff Hall
|
@@ -13,147 +14,162 @@ authors:
|
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
|
-
date:
|
17
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
17
18
|
dependencies:
|
18
19
|
- !ruby/object:Gem::Dependency
|
19
20
|
name: faraday
|
20
21
|
requirement: !ruby/object:Gem::Requirement
|
21
22
|
requirements:
|
22
|
-
- -
|
23
|
+
- - ~>
|
23
24
|
- !ruby/object:Gem::Version
|
24
25
|
version: '0.9'
|
25
|
-
- -
|
26
|
+
- - '>='
|
26
27
|
- !ruby/object:Gem::Version
|
27
28
|
version: 0.9.0
|
28
29
|
type: :runtime
|
29
30
|
prerelease: false
|
30
31
|
version_requirements: !ruby/object:Gem::Requirement
|
31
32
|
requirements:
|
32
|
-
- -
|
33
|
+
- - ~>
|
33
34
|
- !ruby/object:Gem::Version
|
34
35
|
version: '0.9'
|
35
|
-
- -
|
36
|
+
- - '>='
|
36
37
|
- !ruby/object:Gem::Version
|
37
38
|
version: 0.9.0
|
38
39
|
- !ruby/object:Gem::Dependency
|
39
40
|
name: faraday-cookie_jar
|
40
41
|
requirement: !ruby/object:Gem::Requirement
|
41
42
|
requirements:
|
42
|
-
- -
|
43
|
+
- - ~>
|
43
44
|
- !ruby/object:Gem::Version
|
44
45
|
version: '0.0'
|
45
|
-
- -
|
46
|
+
- - '>='
|
46
47
|
- !ruby/object:Gem::Version
|
47
48
|
version: 0.0.6
|
48
49
|
type: :runtime
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- -
|
53
|
+
- - ~>
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '0.0'
|
55
|
-
- -
|
56
|
+
- - '>='
|
56
57
|
- !ruby/object:Gem::Version
|
57
58
|
version: 0.0.6
|
58
59
|
- !ruby/object:Gem::Dependency
|
59
60
|
name: bundler
|
60
61
|
requirement: !ruby/object:Gem::Requirement
|
61
62
|
requirements:
|
62
|
-
- -
|
63
|
+
- - ~>
|
63
64
|
- !ruby/object:Gem::Version
|
64
65
|
version: '1.3'
|
65
66
|
type: :development
|
66
67
|
prerelease: false
|
67
68
|
version_requirements: !ruby/object:Gem::Requirement
|
68
69
|
requirements:
|
69
|
-
- -
|
70
|
+
- - ~>
|
70
71
|
- !ruby/object:Gem::Version
|
71
72
|
version: '1.3'
|
72
73
|
- !ruby/object:Gem::Dependency
|
73
74
|
name: rake
|
74
75
|
requirement: !ruby/object:Gem::Requirement
|
75
76
|
requirements:
|
76
|
-
- -
|
77
|
+
- - ~>
|
77
78
|
- !ruby/object:Gem::Version
|
78
79
|
version: '0'
|
79
80
|
type: :development
|
80
81
|
prerelease: false
|
81
82
|
version_requirements: !ruby/object:Gem::Requirement
|
82
83
|
requirements:
|
83
|
-
- -
|
84
|
+
- - ~>
|
84
85
|
- !ruby/object:Gem::Version
|
85
86
|
version: '0'
|
86
87
|
- !ruby/object:Gem::Dependency
|
87
88
|
name: rspec
|
88
89
|
requirement: !ruby/object:Gem::Requirement
|
89
90
|
requirements:
|
90
|
-
- -
|
91
|
+
- - ~>
|
91
92
|
- !ruby/object:Gem::Version
|
92
93
|
version: '3.0'
|
93
|
-
- -
|
94
|
+
- - '>='
|
94
95
|
- !ruby/object:Gem::Version
|
95
96
|
version: 3.0.0
|
96
97
|
type: :development
|
97
98
|
prerelease: false
|
98
99
|
version_requirements: !ruby/object:Gem::Requirement
|
99
100
|
requirements:
|
100
|
-
- -
|
101
|
+
- - ~>
|
101
102
|
- !ruby/object:Gem::Version
|
102
103
|
version: '3.0'
|
103
|
-
- -
|
104
|
+
- - '>='
|
104
105
|
- !ruby/object:Gem::Version
|
105
106
|
version: 3.0.0
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rubocop
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ~>
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 0.26.1
|
114
|
+
type: :development
|
115
|
+
prerelease: false
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 0.26.1
|
106
121
|
- !ruby/object:Gem::Dependency
|
107
122
|
name: webmock
|
108
123
|
requirement: !ruby/object:Gem::Requirement
|
109
124
|
requirements:
|
110
|
-
- -
|
125
|
+
- - ~>
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '1.17'
|
113
|
-
- -
|
128
|
+
- - '>='
|
114
129
|
- !ruby/object:Gem::Version
|
115
130
|
version: 1.17.2
|
116
131
|
type: :development
|
117
132
|
prerelease: false
|
118
133
|
version_requirements: !ruby/object:Gem::Requirement
|
119
134
|
requirements:
|
120
|
-
- -
|
135
|
+
- - ~>
|
121
136
|
- !ruby/object:Gem::Version
|
122
137
|
version: '1.17'
|
123
|
-
- -
|
138
|
+
- - '>='
|
124
139
|
- !ruby/object:Gem::Version
|
125
140
|
version: 1.17.2
|
126
141
|
- !ruby/object:Gem::Dependency
|
127
142
|
name: redcarpet
|
128
143
|
requirement: !ruby/object:Gem::Requirement
|
129
144
|
requirements:
|
130
|
-
- -
|
145
|
+
- - '>='
|
131
146
|
- !ruby/object:Gem::Version
|
132
147
|
version: '0'
|
133
148
|
type: :development
|
134
149
|
prerelease: false
|
135
150
|
version_requirements: !ruby/object:Gem::Requirement
|
136
151
|
requirements:
|
137
|
-
- -
|
152
|
+
- - '>='
|
138
153
|
- !ruby/object:Gem::Version
|
139
154
|
version: '0'
|
140
155
|
- !ruby/object:Gem::Dependency
|
141
156
|
name: yard
|
142
157
|
requirement: !ruby/object:Gem::Requirement
|
143
158
|
requirements:
|
144
|
-
- -
|
159
|
+
- - '>='
|
145
160
|
- !ruby/object:Gem::Version
|
146
161
|
version: '0'
|
147
162
|
type: :development
|
148
163
|
prerelease: false
|
149
164
|
version_requirements: !ruby/object:Gem::Requirement
|
150
165
|
requirements:
|
151
|
-
- -
|
166
|
+
- - '>='
|
152
167
|
- !ruby/object:Gem::Version
|
153
168
|
version: '0'
|
154
169
|
description: Uses adapter-agnostic Faraday gem to talk to MediaWiki API.
|
155
170
|
email:
|
156
171
|
- amir.aharoni@mail.huji.ac.il
|
172
|
+
- asaf.bartov@gmail.com
|
157
173
|
- cmcmahon@wikimedia.org
|
158
174
|
- dduvall@wikimedia.org
|
159
175
|
- jhall@wikimedia.org
|
@@ -163,12 +179,11 @@ executables: []
|
|
163
179
|
extensions: []
|
164
180
|
extra_rdoc_files: []
|
165
181
|
files:
|
166
|
-
-
|
167
|
-
-
|
168
|
-
-
|
169
|
-
-
|
170
|
-
-
|
171
|
-
- ".yardopts"
|
182
|
+
- .gitignore
|
183
|
+
- .gitreview
|
184
|
+
- .rspec
|
185
|
+
- .rubocop.yml
|
186
|
+
- .yardopts
|
172
187
|
- CREDITS
|
173
188
|
- Gemfile
|
174
189
|
- LICENSE.txt
|
@@ -193,17 +208,17 @@ require_paths:
|
|
193
208
|
- lib
|
194
209
|
required_ruby_version: !ruby/object:Gem::Requirement
|
195
210
|
requirements:
|
196
|
-
- -
|
211
|
+
- - '>='
|
197
212
|
- !ruby/object:Gem::Version
|
198
213
|
version: '0'
|
199
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
215
|
requirements:
|
201
|
-
- -
|
216
|
+
- - '>='
|
202
217
|
- !ruby/object:Gem::Version
|
203
218
|
version: '0'
|
204
219
|
requirements: []
|
205
220
|
rubyforge_project:
|
206
|
-
rubygems_version: 2.
|
221
|
+
rubygems_version: 2.0.14
|
207
222
|
signing_key:
|
208
223
|
specification_version: 4
|
209
224
|
summary: A library for interacting with MediaWiki API from Ruby.
|
@@ -212,3 +227,4 @@ test_files:
|
|
212
227
|
- spec/response_spec.rb
|
213
228
|
- spec/spec_helper.rb
|
214
229
|
- spec/support/request_helpers.rb
|
230
|
+
has_rdoc:
|
data/.rubocop_todo.yml
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
-
# on 2014-09-10 11:44:33 -0700 using RuboCop version 0.26.0.
|
3
|
-
# The point is for the user to remove these configuration records
|
4
|
-
# one by one as the offenses are removed from the code base.
|
5
|
-
# Note that changes in the inspected code, or installation of new
|
6
|
-
# versions of RuboCop, may require this file to be generated again.
|
7
|
-
|
8
|
-
# Offense count: 3
|
9
|
-
Lint/UselessAssignment:
|
10
|
-
Enabled: false
|
11
|
-
|
12
|
-
# Offense count: 1
|
13
|
-
# Configuration parameters: CountComments.
|
14
|
-
Metrics/ClassLength:
|
15
|
-
Max: 122
|
16
|
-
|
17
|
-
# Offense count: 1
|
18
|
-
Metrics/CyclomaticComplexity:
|
19
|
-
Max: 7
|
20
|
-
|
21
|
-
# Offense count: 53
|
22
|
-
# Configuration parameters: AllowURI.
|
23
|
-
Metrics/LineLength:
|
24
|
-
Max: 182
|
25
|
-
|
26
|
-
# Offense count: 3
|
27
|
-
# Configuration parameters: CountComments.
|
28
|
-
Metrics/MethodLength:
|
29
|
-
Max: 13
|
30
|
-
|
31
|
-
# Offense count: 1
|
32
|
-
# Cop supports --auto-correct.
|
33
|
-
Style/Alias:
|
34
|
-
Enabled: false
|
35
|
-
|
36
|
-
# Offense count: 9
|
37
|
-
# Cop supports --auto-correct.
|
38
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
39
|
-
Style/BracesAroundHashParameters:
|
40
|
-
Enabled: false
|
41
|
-
|
42
|
-
# Offense count: 1
|
43
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
44
|
-
Style/ClassAndModuleChildren:
|
45
|
-
Enabled: false
|
46
|
-
|
47
|
-
# Offense count: 6
|
48
|
-
Style/Documentation:
|
49
|
-
Enabled: false
|
50
|
-
|
51
|
-
# Offense count: 30
|
52
|
-
# Cop supports --auto-correct.
|
53
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
54
|
-
Style/DotPosition:
|
55
|
-
Enabled: false
|
56
|
-
|
57
|
-
# Offense count: 2
|
58
|
-
# Cop supports --auto-correct.
|
59
|
-
Style/LeadingCommentSpace:
|
60
|
-
Enabled: false
|
61
|
-
|
62
|
-
# Offense count: 2
|
63
|
-
# Cop supports --auto-correct.
|
64
|
-
# Configuration parameters: PreferredDelimiters.
|
65
|
-
Style/PercentLiteralDelimiters:
|
66
|
-
Enabled: false
|
67
|
-
|
68
|
-
# Offense count: 1
|
69
|
-
Style/RegexpLiteral:
|
70
|
-
MaxSlashes: 0
|
71
|
-
|
72
|
-
# Offense count: 6
|
73
|
-
# Cop supports --auto-correct.
|
74
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
75
|
-
Style/SignalException:
|
76
|
-
Enabled: false
|
77
|
-
|
78
|
-
# Offense count: 9
|
79
|
-
# Cop supports --auto-correct.
|
80
|
-
Style/SpaceInsideParens:
|
81
|
-
Enabled: false
|
82
|
-
|
83
|
-
# Offense count: 1
|
84
|
-
# Cop supports --auto-correct.
|
85
|
-
Style/SpecialGlobalVars:
|
86
|
-
Enabled: false
|
87
|
-
|
88
|
-
# Offense count: 299
|
89
|
-
# Cop supports --auto-correct.
|
90
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
91
|
-
Style/StringLiterals:
|
92
|
-
Enabled: false
|
93
|
-
|
94
|
-
# Offense count: 2
|
95
|
-
# Cop supports --auto-correct.
|
96
|
-
Style/UnneededPercentQ:
|
97
|
-
Enabled: false
|
98
|
-
|
99
|
-
# Offense count: 4
|
100
|
-
# Cop supports --auto-correct.
|
101
|
-
Style/WordArray:
|
102
|
-
MinSize: 2
|