mediawiki_api 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05fde886762b19553fe636b7e7d8cccb220a7481
4
- data.tar.gz: 37036c78dcbd186c31f9da0a08f754f7931d1daa
3
+ metadata.gz: 20db69d02e685dd6c01f43a617e783310b884784
4
+ data.tar.gz: 8ea86db0e30f32006981ba4e04779f0e8eb1b73c
5
5
  SHA512:
6
- metadata.gz: ab02ae9dd0aaca8aac8c4d4bd08a8a9dabe2e907b2b6f656575d1ee29be059f4a39eb8802e720360c36b301e198a8579648802d4accfaf132d5416961d50ab50
7
- data.tar.gz: e18cd950e866512999fb22e86fc7021ce260d99935f8f558b782ef75c38ad6e7aa4fa2df03e99970742e165f9bc17dd4033320c0785cc7948f760453b7c0cf4c
6
+ metadata.gz: c5c9196a44d8975fb8081273791487d88188ed4f452c892d656d2de940fc9e1049b61dd64ec14d2a71e7c0c6935109bfb006378eb697bd189f70536d10ed80b9
7
+ data.tar.gz: cd1f86124b668e951ec1a608be92ec7c6aee66273eb3c360da85b546ffd460d87427d16a4dcac23c5e0c476c5f77c207cdce673af3053bb4b9a9a3ce03bc21c9
data/.gitignore CHANGED
@@ -1,4 +1,6 @@
1
1
  .bundle/
2
+ /.yardoc/
3
+ /doc/
2
4
  .ruby-version
3
5
  .ruby-gemset
4
6
  .gem
data/.rubocop.yml ADDED
@@ -0,0 +1 @@
1
+ inherit_from: .rubocop_todo.yml
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,102 @@
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
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --title "MediaWiki Ruby API"
data/README.md CHANGED
@@ -54,6 +54,11 @@ See https://www.mediawiki.org/wiki/Gerrit
54
54
 
55
55
  ## Release notes
56
56
 
57
+ ### 0.3.0 2014-10-14
58
+
59
+ - HTTP 400 and 500 responses now result in an HttpError exception.
60
+ - Edit failures now result in an EditError exception.
61
+
57
62
  ### 0.2.1 2014-08-26
58
63
 
59
64
  - Fix error handling for token requests
@@ -37,8 +37,10 @@ module MediawikiApi
37
37
 
38
38
  response = @conn.send(method, "", params.merge(action: name, format: FORMAT))
39
39
 
40
+ raise HttpError, response.status if response.status >= 400
41
+
40
42
  if response.headers.include?("mediawiki-api-error")
41
- raise ApiError.new(Response.new(response, ["error"]))
43
+ raise ApiError, Response.new(response, ["error"])
42
44
  end
43
45
 
44
46
  Response.new(response, envelope)
@@ -64,13 +66,19 @@ module MediawikiApi
64
66
  end
65
67
 
66
68
  def create_page(title, content)
67
- action(:edit, title: title, text: content)
69
+ edit(title: title, text: content)
68
70
  end
69
71
 
70
72
  def delete_page(title, reason)
71
73
  action(:delete, title: title, reason: reason)
72
74
  end
73
75
 
76
+ def edit(params = {})
77
+ response = action(:edit, params)
78
+ raise EditError, response if response.data["result"] == "Failure"
79
+ response
80
+ end
81
+
74
82
  def get_wikitext(title)
75
83
  @conn.get "/w/index.php", { action: "raw", title: title }
76
84
  end
@@ -28,6 +28,24 @@ module MediawikiApi
28
28
  class CreateAccountError < StandardError
29
29
  end
30
30
 
31
+ class HttpError < StandardError
32
+ attr_reader :status
33
+
34
+ def initialize(status)
35
+ @status = status
36
+ end
37
+
38
+ def to_s
39
+ "unexpected HTTP response (#{status})"
40
+ end
41
+ end
42
+
43
+ class EditError < ApiError
44
+ def to_s
45
+ "check the response data for details"
46
+ end
47
+ end
48
+
31
49
  class LoginError < StandardError
32
50
  end
33
51
 
@@ -1,3 +1,3 @@
1
1
  module MediawikiApi
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -24,4 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake", "~> 0"
25
25
  spec.add_development_dependency "rspec", "~> 3.0", ">= 3.0.0"
26
26
  spec.add_development_dependency "webmock", "~> 1.17", ">= 1.17.2"
27
+ spec.add_development_dependency "redcarpet"
28
+ spec.add_development_dependency "yard"
27
29
  end
data/spec/client_spec.rb CHANGED
@@ -18,7 +18,8 @@ describe MediawikiApi::Client do
18
18
  let(:token_type) { action }
19
19
  let(:params) { {} }
20
20
 
21
- let(:response) { { headers: response_headers, body: response_body.to_json } }
21
+ let(:response) { { status: response_status, headers: response_headers, body: response_body.to_json } }
22
+ let(:response_status) { 200 }
22
23
  let(:response_headers) { nil }
23
24
  let(:response_body) { { "something" => {} } }
24
25
 
@@ -100,6 +101,22 @@ describe MediawikiApi::Client do
100
101
  end
101
102
  end
102
103
 
104
+ context "when the response status is in the 400 range" do
105
+ let(:response_status) { 403 }
106
+
107
+ it "raises an HttpError" do
108
+ expect { subject }.to raise_error(MediawikiApi::HttpError, "unexpected HTTP response (403)")
109
+ end
110
+ end
111
+
112
+ context "when the response status is in the 500 range" do
113
+ let(:response_status) { 502 }
114
+
115
+ it "raises an HttpError" do
116
+ expect { subject }.to raise_error(MediawikiApi::HttpError, "unexpected HTTP response (502)")
117
+ end
118
+ end
119
+
103
120
  context "when the response is an error" do
104
121
  let(:response_headers) { { "MediaWiki-API-Error" => "code" } }
105
122
  let(:response_body) { { error: { info: "detailed message", code: "code" } } }
@@ -189,17 +206,21 @@ describe MediawikiApi::Client do
189
206
  end
190
207
 
191
208
  describe "#create_page" do
209
+ subject { client.create_page(title, text) }
210
+
211
+ let(:title) { "Test" }
212
+ let(:text) { "test123" }
213
+ let(:response) { {} }
214
+
192
215
  before do
193
- stub_request(:get, api_url).
194
- with(query: { format: "json", action: "tokens", type: "edit" }).
195
- to_return(body: { tokens: { edittoken: "t123" } }.to_json )
196
- @edit_req = stub_request(:post, api_url).
197
- with(body: { format: "json", action: "edit", title: "Test", text: "test123", token: "t123" })
216
+ stub_token_request(:edit)
217
+ @edit_request = stub_action_request(:edit, title: title, text: text).
218
+ to_return(body: response.to_json)
198
219
  end
199
220
 
200
- it "creates a page using an edit token" do
201
- subject.create_page("Test", "test123")
202
- expect(@edit_req).to have_been_requested
221
+ it "makes the right request" do
222
+ subject
223
+ expect(@edit_request).to have_been_requested
203
224
  end
204
225
  end
205
226
 
@@ -220,6 +241,31 @@ describe MediawikiApi::Client do
220
241
  # evaluate results
221
242
  end
222
243
 
244
+ describe "#edit" do
245
+ subject { client.edit(params) }
246
+
247
+ let(:params) { {} }
248
+ let(:response) { { edit: {} } }
249
+
250
+ before do
251
+ stub_token_request(:edit)
252
+ @edit_request = stub_action_request(:edit).to_return(body: response.to_json)
253
+ end
254
+
255
+ it "makes the request" do
256
+ subject
257
+ expect(@edit_request).to have_been_requested
258
+ end
259
+
260
+ context "upon an edit failure" do
261
+ let(:response) { { edit: { result: "Failure" } } }
262
+
263
+ it "raises an EditError" do
264
+ expect { subject }.to raise_error(MediawikiApi::EditError)
265
+ end
266
+ end
267
+ end
268
+
223
269
  describe "#get_wikitext" do
224
270
  before do
225
271
  @get_req = stub_request(:get, index_url).with(query: { action: "raw", title: "Test" })
@@ -12,6 +12,8 @@ module MediawikiApi::RequestHelpers
12
12
  end
13
13
 
14
14
  def stub_api_request(method, params)
15
+ params = params.each.with_object({}) { |(k, v), p| p[k] = v.to_s }
16
+
15
17
  stub_request(method, api_url).
16
18
  with((method == :post ? :body : :query) => params.merge(format: "json"))
17
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediawiki_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amir Aharoni
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-08-27 00:00:00.000000000 Z
16
+ date: 2014-10-14 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: faraday
@@ -123,6 +123,34 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: 1.17.2
126
+ - !ruby/object:Gem::Dependency
127
+ name: redcarpet
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: yard
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
126
154
  description: Uses adapter-agnostic Faraday gem to talk to MediaWiki API.
127
155
  email:
128
156
  - amir.aharoni@mail.huji.ac.il
@@ -138,6 +166,9 @@ files:
138
166
  - ".gitignore"
139
167
  - ".gitreview"
140
168
  - ".rspec"
169
+ - ".rubocop.yml"
170
+ - ".rubocop_todo.yml"
171
+ - ".yardopts"
141
172
  - CREDITS
142
173
  - Gemfile
143
174
  - LICENSE.txt