rest 2.1.1 → 2.2.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.
- data/.gitignore +1 -0
- data/Gemfile.lock +15 -13
- data/README.md +3 -1
- data/lib/rest.rb +1 -1
- data/lib/rest/client.rb +11 -6
- data/lib/rest/version.rb +1 -1
- data/lib/rest/wrappers/base_wrapper.rb +2 -1
- data/lib/rest/wrappers/net_http_persistent_wrapper.rb +17 -8
- data/lib/rest/wrappers/typhoeus_wrapper.rb +3 -3
- data/rest.gemspec +3 -3
- data/test/test_base.rb +3 -1
- data/test/test_performance.rb +1 -2
- data/test/test_rest.rb +4 -5
- data/test/tmp.rb +2 -3
- metadata +7 -7
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,27 +1,29 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rest (2.
|
4
|
+
rest (2.2.0)
|
5
5
|
net-http-persistent
|
6
6
|
rest-client (>= 0.3.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
12
|
-
|
11
|
+
ethon (0.5.7)
|
12
|
+
ffi (~> 1.2.0)
|
13
|
+
mime-types (~> 1.18)
|
14
|
+
excon (0.16.10)
|
15
|
+
ffi (1.2.1)
|
13
16
|
mime-types (1.19)
|
14
|
-
minitest (
|
17
|
+
minitest (4.4.0)
|
15
18
|
net-http-persistent (2.8)
|
16
|
-
quicky (0.
|
17
|
-
rake (0.
|
19
|
+
quicky (0.4.0)
|
20
|
+
rake (10.0.3)
|
18
21
|
rest-client (1.6.7)
|
19
22
|
mime-types (>= 1.16)
|
20
|
-
test-unit (2.5.
|
21
|
-
typhoeus (0.4
|
22
|
-
|
23
|
-
|
24
|
-
uber_config (0.0.6)
|
23
|
+
test-unit (2.5.3)
|
24
|
+
typhoeus (0.5.4)
|
25
|
+
ethon (~> 0.5.7)
|
26
|
+
uber_config (1.0.5)
|
25
27
|
|
26
28
|
PLATFORMS
|
27
29
|
ruby
|
@@ -29,9 +31,9 @@ PLATFORMS
|
|
29
31
|
DEPENDENCIES
|
30
32
|
excon
|
31
33
|
minitest
|
32
|
-
quicky
|
34
|
+
quicky (>= 0.4.0)
|
33
35
|
rake
|
34
36
|
rest!
|
35
37
|
test-unit
|
36
|
-
typhoeus
|
38
|
+
typhoeus (>= 0.5.4)
|
37
39
|
uber_config
|
data/README.md
CHANGED
@@ -16,6 +16,7 @@ Features
|
|
16
16
|
* Chooses best client you have installed on your system based on what we have found performs the best.
|
17
17
|
* Currently net_http_persistent and typhoeus are nearly the same, but since net_http_persistent doesn't have a binary
|
18
18
|
dependency, it wins.
|
19
|
+
* Handles 503 errors with exponential backoff.
|
19
20
|
|
20
21
|
|
21
22
|
Getting Started
|
@@ -59,7 +60,8 @@ POST
|
|
59
60
|
options:
|
60
61
|
|
61
62
|
- :body => POST body
|
62
|
-
- :headers => headers
|
63
|
+
- :headers => headers hash
|
64
|
+
- :form_data => hash of fields/values, sent form encoded (only tested with default net-http-persistent)
|
63
65
|
|
64
66
|
PUT
|
65
67
|
------
|
data/lib/rest.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
require 'rest/client'
|
data/lib/rest/client.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
if RUBY_VERSION.split('.')[1].to_i == 8
|
2
|
+
require 'rubygems'
|
3
|
+
gem 'json'
|
4
|
+
end
|
5
|
+
|
1
6
|
require 'json'
|
2
7
|
require 'logger'
|
3
8
|
|
@@ -5,11 +10,11 @@ require 'logger'
|
|
5
10
|
# The purpose of this is so that users who can't install binaries easily (like windoze users)
|
6
11
|
# can have fallbacks that work.
|
7
12
|
|
8
|
-
|
13
|
+
require 'rest/errors'
|
9
14
|
|
10
15
|
module Rest
|
11
16
|
|
12
|
-
|
17
|
+
require 'rest/wrappers/base_wrapper'
|
13
18
|
|
14
19
|
def self.logger=(logger)
|
15
20
|
@logger = logger
|
@@ -39,15 +44,15 @@ module Rest
|
|
39
44
|
end
|
40
45
|
|
41
46
|
if @gem == :excon
|
42
|
-
|
47
|
+
require 'rest/wrappers/excon_wrapper'
|
43
48
|
@wrapper = Rest::Wrappers::ExconWrapper.new(self)
|
44
49
|
@logger.debug "Using excon gem."
|
45
50
|
elsif @gem == :typhoeus
|
46
|
-
|
51
|
+
require 'rest/wrappers/typhoeus_wrapper'
|
47
52
|
@wrapper = Rest::Wrappers::TyphoeusWrapper.new
|
48
53
|
@logger.debug "Using typhoeus gem."
|
49
54
|
elsif @gem == :net_http_persistent
|
50
|
-
|
55
|
+
require 'rest/wrappers/net_http_persistent_wrapper'
|
51
56
|
@wrapper = Rest::Wrappers::NetHttpPersistentWrapper.new(self)
|
52
57
|
@logger.debug "Using net-http-persistent gem."
|
53
58
|
else
|
@@ -129,7 +134,7 @@ module Rest
|
|
129
134
|
|
130
135
|
pow = (4 ** (current_retry)) * 100 # milliseconds
|
131
136
|
#puts 'pow=' + pow.to_s
|
132
|
-
s =
|
137
|
+
s = rand * pow
|
133
138
|
#puts 's=' + s.to_s
|
134
139
|
sleep_secs = 1.0 * s / 1000.0
|
135
140
|
#puts 'sleep for ' + sleep_secs.to_s
|
data/lib/rest/version.rb
CHANGED
@@ -80,14 +80,7 @@ module Rest
|
|
80
80
|
#p uri.request_uri
|
81
81
|
#puts "query: " + uri.query.inspect
|
82
82
|
#puts "fragment: " + uri.fragment.inspect
|
83
|
-
|
84
|
-
new_q = URI.encode_www_form(req_hash[:params])
|
85
|
-
if uri.query
|
86
|
-
new_q = uri.query + "&" + new_q
|
87
|
-
end
|
88
|
-
#puts "new_q: " + new_q
|
89
|
-
uri.query = new_q
|
90
|
-
end
|
83
|
+
append_query_params(req_hash, uri)
|
91
84
|
#p uri.request_uri
|
92
85
|
post = Net::HTTP::Get.new fix_path(uri.request_uri)
|
93
86
|
add_headers(post, req_hash, default_headers)
|
@@ -120,6 +113,17 @@ module Rest
|
|
120
113
|
r
|
121
114
|
end
|
122
115
|
|
116
|
+
def append_query_params(req_hash, uri)
|
117
|
+
if req_hash[:params]
|
118
|
+
new_q = URI.encode_www_form(req_hash[:params])
|
119
|
+
if uri.query
|
120
|
+
new_q = uri.query + "&" + new_q
|
121
|
+
end
|
122
|
+
#puts "new_q: " + new_q
|
123
|
+
uri.query = new_q
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
123
127
|
def fix_path(path)
|
124
128
|
return "/" if path.nil? || path == ""
|
125
129
|
path
|
@@ -129,9 +133,12 @@ module Rest
|
|
129
133
|
def post(url, req_hash={})
|
130
134
|
r = nil
|
131
135
|
uri = URI(url)
|
136
|
+
append_query_params(req_hash, uri)
|
132
137
|
post = Net::HTTP::Post.new fix_path(uri.request_uri)
|
133
138
|
add_headers(post, req_hash, default_headers)
|
134
139
|
post.body = stringed_body(req_hash[:body]) if req_hash[:body]
|
140
|
+
post.set_form_data req_hash[:form_data] if req_hash[:form_data]
|
141
|
+
Rest.logger.debug "POST request to #{uri}. body: #{post.body}"
|
135
142
|
response = http.request uri, post
|
136
143
|
r = NetHttpPersistentResponseWrapper.new(response)
|
137
144
|
case response
|
@@ -152,6 +159,7 @@ module Rest
|
|
152
159
|
def put(url, req_hash={})
|
153
160
|
r = nil
|
154
161
|
uri = URI(url)
|
162
|
+
append_query_params(req_hash, uri)
|
155
163
|
post = Net::HTTP::Put.new fix_path(uri.request_uri)
|
156
164
|
add_headers(post, req_hash, default_headers)
|
157
165
|
post.body = stringed_body(req_hash[:body]) if req_hash[:body]
|
@@ -167,6 +175,7 @@ module Rest
|
|
167
175
|
def delete(url, req_hash={})
|
168
176
|
r = nil
|
169
177
|
uri = URI(url)
|
178
|
+
append_query_params(req_hash, uri)
|
170
179
|
post = Net::HTTP::Delete.new fix_path(uri.request_uri)
|
171
180
|
add_headers(post, req_hash, default_headers)
|
172
181
|
post.body = stringed_body(req_hash[:body]) if req_hash[:body]
|
@@ -36,10 +36,10 @@ module Rest
|
|
36
36
|
def default_typhoeus_options
|
37
37
|
req_hash = {}
|
38
38
|
# todo: should change this timeout to longer if it's for posting file
|
39
|
-
req_hash[:
|
39
|
+
req_hash[:connecttimeout] = 5000
|
40
40
|
req_hash[:timeout] = 10000
|
41
|
-
req_hash[:
|
42
|
-
req_hash[:
|
41
|
+
req_hash[:followlocation] = true
|
42
|
+
req_hash[:maxredirs] = 2
|
43
43
|
req_hash
|
44
44
|
end
|
45
45
|
|
data/rest.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.version = Rest::VERSION
|
16
16
|
|
17
17
|
gem.required_rubygems_version = ">= 1.3.6"
|
18
|
-
gem.required_ruby_version = Gem::Requirement.new(">= 1.
|
18
|
+
gem.required_ruby_version = Gem::Requirement.new(">= 1.8")
|
19
19
|
gem.add_runtime_dependency "rest-client", ">= 0.3.0"
|
20
20
|
gem.add_runtime_dependency "net-http-persistent"
|
21
21
|
|
@@ -23,8 +23,8 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_development_dependency "minitest"
|
24
24
|
gem.add_development_dependency "rake"
|
25
25
|
gem.add_development_dependency "uber_config"
|
26
|
-
gem.add_development_dependency "typhoeus"
|
27
|
-
gem.add_development_dependency "quicky"
|
26
|
+
gem.add_development_dependency "typhoeus", ">= 0.5.4"
|
27
|
+
gem.add_development_dependency "quicky", ">= 0.4.0"
|
28
28
|
gem.add_development_dependency "excon"
|
29
29
|
|
30
30
|
end
|
data/test/test_base.rb
CHANGED
data/test/test_performance.rb
CHANGED
data/test/test_rest.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# Put config.yml file in ~/Dropbox/configs/ironmq_gem/test/config.yml
|
2
2
|
|
3
|
-
gem 'test-unit'
|
4
3
|
require 'test/unit'
|
5
4
|
require 'yaml'
|
6
|
-
|
5
|
+
require 'test_base'
|
7
6
|
|
8
7
|
class TestRest < TestBase
|
9
8
|
def setup
|
@@ -17,11 +16,11 @@ class TestRest < TestBase
|
|
17
16
|
p response.code
|
18
17
|
assert response.code == 200
|
19
18
|
p response.body
|
20
|
-
assert response.body.include?("
|
19
|
+
assert response.body.include?("Explore GitHub")
|
21
20
|
end
|
22
21
|
|
23
22
|
def test_backoff
|
24
|
-
response = @rest.get("http://rest-test.iron.io/code/503?switch_after=
|
23
|
+
response = @rest.get("http://rest-test.iron.io/code/503?switch_after=2&switch_to=200")
|
25
24
|
p response
|
26
25
|
p response.code
|
27
26
|
assert response.tries == 3
|
@@ -159,7 +158,7 @@ class TestRest < TestBase
|
|
159
158
|
end
|
160
159
|
|
161
160
|
def test_form_post
|
162
|
-
r = @rest.post("http://google.com/search", :params=>{q
|
161
|
+
r = @rest.post("http://google.com/search", :params=>{:q => "Rick Astley"})
|
163
162
|
p r
|
164
163
|
end
|
165
164
|
|
data/test/tmp.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
gem 'test-unit'
|
2
1
|
require 'test/unit'
|
3
2
|
require 'yaml'
|
4
|
-
|
3
|
+
require 'test_base'
|
5
4
|
|
6
5
|
class TestTemp < TestBase
|
7
6
|
def setup
|
@@ -11,7 +10,7 @@ class TestTemp < TestBase
|
|
11
10
|
|
12
11
|
|
13
12
|
def test_form_post
|
14
|
-
r = @rest.post("http://google.com/search", :params=>{q
|
13
|
+
r = @rest.post("http://google.com/search", :params=>{:q => "Rick Astley"})
|
15
14
|
p r
|
16
15
|
end
|
17
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 0.5.4
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
requirements:
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
125
|
+
version: 0.5.4
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: quicky
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,7 +130,7 @@ dependencies:
|
|
130
130
|
requirements:
|
131
131
|
- - ! '>='
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
133
|
+
version: 0.4.0
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -138,7 +138,7 @@ dependencies:
|
|
138
138
|
requirements:
|
139
139
|
- - ! '>='
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
141
|
+
version: 0.4.0
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
143
|
name: excon
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
193
193
|
requirements:
|
194
194
|
- - ! '>='
|
195
195
|
- !ruby/object:Gem::Version
|
196
|
-
version: '1.
|
196
|
+
version: '1.8'
|
197
197
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
198
|
none: false
|
199
199
|
requirements:
|