maremma 1.0.4 → 1.1.0

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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 066d5fedc85b22f80d289d2eced817883d2d421b
4
- data.tar.gz: 8ae566e814112ab1a4d727b5233eac84e8782931
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDU5MzBlM2Q3ZGNiZThlMTFhZWQyMTlkOGY0YjY1OGZhNjJiODU3MQ==
5
+ data.tar.gz: !binary |-
6
+ MTE5ODlmMjM3NDQ5NWVhYjliNGVmNGQzMDBkOWIxMDJmZjA0MmRkMw==
5
7
  SHA512:
6
- metadata.gz: 72fba8b0dc27854f0ad674f692df71c918bc5aa0c36fbb8976b7727c9739704e47c777b191151f164a33be3c6c85fdc72cd0d2434fb7985e58495d217c85fb14
7
- data.tar.gz: b85c990959ceadeedc1abf9efe09b12969acc9246fdc73cd36421f22d96c31b92eec96f52bff4065c95352a379524efb24fe24546b3705c56509f5ab8dfbb24f
8
+ metadata.gz: !binary |-
9
+ YmQ4YTA2YjZmNTE2OTBkZTE3MjJhZDk3MTI1ZWFlNTExMGIyODc2MjY5OTJm
10
+ YTdhOWJhMDBjMTkwYmIyMjQ3MzhkYThmMGUzNTFiZTU0MmE5NGM1NDk0ZjI2
11
+ MDJmMDcwNDk3ZGIxNjY4ZTE1MGM5YWIwMzUxZTBkYjhiNzZiNWI=
12
+ data.tar.gz: !binary |-
13
+ MjdlOTJmNzNiNzkzMGYyY2Q3YjU1Mzc1ZTY4YWMwZDYyN2ViZTMyODM4NzNj
14
+ N2YwZWE0NDIxOTY1Yjk5MTJkYzM5YWUwYmM1ZDQ4YWZhM2I4NWFiODZjMDVl
15
+ ZTI4MjEyOTliY2E3YmE5ZWU4YzVmYTYxZTcyMTI3YmUwZGFkMGE=
@@ -1,3 +1,9 @@
1
+ ## v.1.1.0 (January 5, 2016)
2
+
3
+ [maremma 1.1](https://github.com/datacite/maremma/releases/tag/v.1.1) was released on January 5, 2015:
4
+
5
+ * added support for rate-limiting headers (Twitter, Github)
6
+
1
7
  ## v.1.0 (November 28, 2015)
2
8
 
3
9
  [maremma 1.0](https://github.com/datacite/maremma/releases/tag/v.1.0) was released on November 28, 2015:
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- maremma (1.0.3)
4
+ maremma (1.1.0)
5
5
  activesupport (~> 4.2, >= 4.2.5)
6
6
  builder (~> 3.2, >= 3.2.2)
7
7
  excon (~> 0.45.0)
@@ -23,7 +23,7 @@ GEM
23
23
  tzinfo (~> 1.1)
24
24
  addressable (2.3.8)
25
25
  builder (3.2.2)
26
- crack (0.4.2)
26
+ crack (0.4.3)
27
27
  safe_yaml (~> 1.0.0)
28
28
  diff-lcs (1.2.5)
29
29
  excon (0.45.4)
@@ -64,9 +64,9 @@ GEM
64
64
  thread_safe (0.3.5)
65
65
  tzinfo (1.2.2)
66
66
  thread_safe (~> 0.1)
67
- vcr (3.0.0)
68
- webmock (1.22.3)
69
- addressable (>= 2.3.6)
67
+ vcr (3.0.1)
68
+ webmock (1.22.5)
69
+ addressable (< 2.4.0)
70
70
  crack (>= 0.3.2)
71
71
  hashdiff
72
72
 
@@ -76,11 +76,8 @@ PLATFORMS
76
76
  DEPENDENCIES
77
77
  bundler (~> 1.0)
78
78
  maremma!
79
- rack-test
79
+ rack-test (~> 0)
80
80
  rake
81
81
  rspec (~> 3.4)
82
82
  vcr
83
- webmock
84
-
85
- BUNDLED WITH
86
- 1.10.6
83
+ webmock (~> 1.22, >= 1.22.3)
@@ -49,6 +49,12 @@ module Maremma
49
49
  conn.options[:timeout] = options[:timeout] || DEFAULT_TIMEOUT
50
50
 
51
51
  response = conn.get url, {}, options[:headers]
52
+
53
+ # return error if we are close to the rate limit, if supported in headers
54
+ if get_rate_limit_remaining(response.headers) < 10
55
+ return { error: "Rate limit soon exceeded", status: 429 }
56
+ end
57
+
52
58
  parse_response(response.body)
53
59
  rescue *NETWORKABLE_EXCEPTIONS => error
54
60
  rescue_faraday_error(error)
@@ -113,6 +119,13 @@ module Maremma
113
119
 
114
120
  protected
115
121
 
122
+ # currently supported by Twitter and Github
123
+ # with slightly different header names
124
+ # use arbitrary high value if not supported
125
+ def self.get_rate_limit_remaining(headers)
126
+ (headers["X-Rate-Limit-Remaining"] || headers["X-RateLimit-Remaining"] || 100).to_i
127
+ end
128
+
116
129
  def self.from_xml(string)
117
130
  if Nokogiri::XML(string).errors.empty?
118
131
  Hash.from_xml(string)
@@ -1,3 +1,3 @@
1
1
  module Maremma
2
- VERSION = "1.0.4"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
31
31
  s.add_development_dependency 'bundler', '~> 1.0'
32
32
  s.add_development_dependency 'rspec', '~> 3.4'
33
33
  s.add_development_dependency 'rake'
34
- s.add_development_dependency 'rack-test'
34
+ s.add_development_dependency 'rack-test', '~> 0'
35
35
  s.add_development_dependency 'vcr'
36
- s.add_development_dependency 'webmock'
36
+ s.add_development_dependency 'webmock', '~> 1.22', '>= 1.22.3'
37
37
  end
@@ -150,6 +150,36 @@ describe Maremma do
150
150
  end
151
151
  end
152
152
 
153
+ context "rate limit exceeded" do
154
+ it "get json" do
155
+ stub = stub_request(:get, url).to_return(status: 200, headers: { 'X-Rate-Limit-Remaining' => 3 })
156
+ response = subject.get(url)
157
+ expect(response).to eq(error: "Rate limit soon exceeded", status: 429)
158
+ expect(stub).to have_been_requested
159
+ end
160
+
161
+ it "get xml" do
162
+ stub = stub_request(:get, url).to_return(status: 200, headers: { 'X-Rate-Limit-Remaining' => 3 })
163
+ response = subject.get(url, content_type: 'xml')
164
+ expect(response).to eq(error: "Rate limit soon exceeded", status: 429)
165
+ expect(stub).to have_been_requested
166
+ end
167
+
168
+ it "get html" do
169
+ stub = stub_request(:get, url).to_return(status: 200, headers: { 'X-Rate-Limit-Remaining' => 3 })
170
+ response = subject.get(url, content_type: 'html')
171
+ expect(response).to eq(error: "Rate limit soon exceeded", status: 429)
172
+ expect(stub).to have_been_requested
173
+ end
174
+
175
+ it "post xml" do
176
+ stub = stub_request(:post, url).with(:body => post_data.to_xml)
177
+ .to_return(status: 200, headers: { 'X-Rate-Limit-Remaining' => 3 })
178
+ subject.post(url, content_type: 'xml', data: post_data.to_xml) { |response| expect(response).to be_nil }
179
+ expect(stub).to have_been_requested
180
+ end
181
+ end
182
+
153
183
  context "redirect requests" do
154
184
  let(:redirect_url) { "http://www.example.org/redirect" }
155
185
 
metadata CHANGED
@@ -1,237 +1,243 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maremma
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2016-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.9.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday_middleware
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.10.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.10.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday-encoding
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: excon
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.45.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.45.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 1.6.6.4
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.6.6.4
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: builder
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '3.2'
90
- - - ">="
90
+ - - ! '>='
91
91
  - !ruby/object:Gem::Version
92
92
  version: 3.2.2
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
97
+ - - ~>
98
98
  - !ruby/object:Gem::Version
99
99
  version: '3.2'
100
- - - ">="
100
+ - - ! '>='
101
101
  - !ruby/object:Gem::Version
102
102
  version: 3.2.2
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: multi_json
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
109
  version: 1.11.2
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - "~>"
114
+ - - ~>
115
115
  - !ruby/object:Gem::Version
116
116
  version: 1.11.2
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: oj
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - "~>"
121
+ - - ~>
122
122
  - !ruby/object:Gem::Version
123
123
  version: 2.13.1
124
124
  type: :runtime
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - "~>"
128
+ - - ~>
129
129
  - !ruby/object:Gem::Version
130
130
  version: 2.13.1
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: activesupport
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - "~>"
135
+ - - ~>
136
136
  - !ruby/object:Gem::Version
137
137
  version: '4.2'
138
- - - ">="
138
+ - - ! '>='
139
139
  - !ruby/object:Gem::Version
140
140
  version: 4.2.5
141
141
  type: :runtime
142
142
  prerelease: false
143
143
  version_requirements: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ~>
146
146
  - !ruby/object:Gem::Version
147
147
  version: '4.2'
148
- - - ">="
148
+ - - ! '>='
149
149
  - !ruby/object:Gem::Version
150
150
  version: 4.2.5
151
151
  - !ruby/object:Gem::Dependency
152
152
  name: bundler
153
153
  requirement: !ruby/object:Gem::Requirement
154
154
  requirements:
155
- - - "~>"
155
+ - - ~>
156
156
  - !ruby/object:Gem::Version
157
157
  version: '1.0'
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - "~>"
162
+ - - ~>
163
163
  - !ruby/object:Gem::Version
164
164
  version: '1.0'
165
165
  - !ruby/object:Gem::Dependency
166
166
  name: rspec
167
167
  requirement: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - "~>"
169
+ - - ~>
170
170
  - !ruby/object:Gem::Version
171
171
  version: '3.4'
172
172
  type: :development
173
173
  prerelease: false
174
174
  version_requirements: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - "~>"
176
+ - - ~>
177
177
  - !ruby/object:Gem::Version
178
178
  version: '3.4'
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: rake
181
181
  requirement: !ruby/object:Gem::Requirement
182
182
  requirements:
183
- - - ">="
183
+ - - ! '>='
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  type: :development
187
187
  prerelease: false
188
188
  version_requirements: !ruby/object:Gem::Requirement
189
189
  requirements:
190
- - - ">="
190
+ - - ! '>='
191
191
  - !ruby/object:Gem::Version
192
192
  version: '0'
193
193
  - !ruby/object:Gem::Dependency
194
194
  name: rack-test
195
195
  requirement: !ruby/object:Gem::Requirement
196
196
  requirements:
197
- - - ">="
197
+ - - ~>
198
198
  - !ruby/object:Gem::Version
199
199
  version: '0'
200
200
  type: :development
201
201
  prerelease: false
202
202
  version_requirements: !ruby/object:Gem::Requirement
203
203
  requirements:
204
- - - ">="
204
+ - - ~>
205
205
  - !ruby/object:Gem::Version
206
206
  version: '0'
207
207
  - !ruby/object:Gem::Dependency
208
208
  name: vcr
209
209
  requirement: !ruby/object:Gem::Requirement
210
210
  requirements:
211
- - - ">="
211
+ - - ! '>='
212
212
  - !ruby/object:Gem::Version
213
213
  version: '0'
214
214
  type: :development
215
215
  prerelease: false
216
216
  version_requirements: !ruby/object:Gem::Requirement
217
217
  requirements:
218
- - - ">="
218
+ - - ! '>='
219
219
  - !ruby/object:Gem::Version
220
220
  version: '0'
221
221
  - !ruby/object:Gem::Dependency
222
222
  name: webmock
223
223
  requirement: !ruby/object:Gem::Requirement
224
224
  requirements:
225
- - - ">="
225
+ - - ~>
226
226
  - !ruby/object:Gem::Version
227
- version: '0'
227
+ version: '1.22'
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: 1.22.3
228
231
  type: :development
229
232
  prerelease: false
230
233
  version_requirements: !ruby/object:Gem::Requirement
231
234
  requirements:
232
- - - ">="
235
+ - - ~>
233
236
  - !ruby/object:Gem::Version
234
- version: '0'
237
+ version: '1.22'
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: 1.22.3
235
241
  description: Simplifies network calls, including json/xml parsing and error handling.
236
242
  Based on Faraday.
237
243
  email: mfenner@datacite.org
@@ -240,8 +246,8 @@ extensions: []
240
246
  extra_rdoc_files:
241
247
  - README.md
242
248
  files:
243
- - ".gitignore"
244
- - ".travis.yml"
249
+ - .gitignore
250
+ - .travis.yml
245
251
  - CHANGELOG.md
246
252
  - Gemfile
247
253
  - Gemfile.lock
@@ -263,20 +269,18 @@ require_paths:
263
269
  - lib
264
270
  required_ruby_version: !ruby/object:Gem::Requirement
265
271
  requirements:
266
- - - ">="
272
+ - - ! '>='
267
273
  - !ruby/object:Gem::Version
268
274
  version: '0'
269
275
  required_rubygems_version: !ruby/object:Gem::Requirement
270
276
  requirements:
271
- - - ">="
277
+ - - ! '>='
272
278
  - !ruby/object:Gem::Version
273
279
  version: '0'
274
280
  requirements: []
275
281
  rubyforge_project:
276
- rubygems_version: 2.4.5.1
282
+ rubygems_version: 2.4.5
277
283
  signing_key:
278
284
  specification_version: 4
279
285
  summary: Simplified network calls
280
- test_files:
281
- - spec/maremma_spec.rb
282
- - spec/spec_helper.rb
286
+ test_files: []