rest 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .idea
2
2
  pkg/
3
+ *.gem
@@ -1,27 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rest (2.1.0)
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
- excon (0.16.3)
12
- ffi (1.1.5)
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 (3.5.0)
17
+ minitest (4.4.0)
15
18
  net-http-persistent (2.8)
16
- quicky (0.1.1)
17
- rake (0.9.2.2)
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.2)
21
- typhoeus (0.4.2)
22
- ffi (~> 1.0)
23
- mime-types (~> 1.18)
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
  ------
@@ -1 +1 @@
1
- require_relative 'rest/client'
1
+ require 'rest/client'
@@ -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
- require_relative 'errors'
13
+ require 'rest/errors'
9
14
 
10
15
  module Rest
11
16
 
12
- require_relative 'wrappers/base_wrapper'
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
- require_relative 'wrappers/excon_wrapper'
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
- require_relative 'wrappers/typhoeus_wrapper'
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
- require_relative 'wrappers/net_http_persistent_wrapper'
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 = Random.rand * pow
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
@@ -1,3 +1,3 @@
1
1
  module Rest
2
- VERSION = "2.1.1"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -53,4 +53,5 @@ module Rest
53
53
  end
54
54
 
55
55
  # we need it for post_file, ok as gem already depends on it
56
- require_relative 'rest_client_wrapper'
56
+ require 'rest/wrappers/rest_client_wrapper'
57
+
@@ -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
- if req_hash[:params]
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[:connect_timeout] = 5000
39
+ req_hash[:connecttimeout] = 5000
40
40
  req_hash[:timeout] = 10000
41
- req_hash[:follow_location] = true
42
- req_hash[:max_redirects] = 2
41
+ req_hash[:followlocation] = true
42
+ req_hash[:maxredirs] = 2
43
43
  req_hash
44
44
  end
45
45
 
@@ -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.9")
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
@@ -1,4 +1,3 @@
1
- gem 'test-unit'
2
1
  require 'test/unit'
3
2
  require 'yaml'
4
3
  begin
@@ -16,6 +15,9 @@ class TestBase < Test::Unit::TestCase
16
15
 
17
16
  end
18
17
 
18
+ def test_fake
19
+ end
20
+
19
21
  ALL_OPS = [:get, :put, :post, :delete]
20
22
 
21
23
 
@@ -1,9 +1,8 @@
1
- gem 'test-unit'
2
1
  require 'test/unit'
3
2
  require 'yaml'
4
3
  require 'quicky'
5
4
 
6
- require_relative 'test_base'
5
+ require 'test_base'
7
6
 
8
7
  class TestPerformance < TestBase
9
8
  def setup
@@ -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
- require_relative 'test_base'
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?("Social Coding")
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=3&switch_to=200")
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: "Rick Astley"})
161
+ r = @rest.post("http://google.com/search", :params=>{:q => "Rick Astley"})
163
162
  p r
164
163
  end
165
164
 
@@ -1,7 +1,6 @@
1
- gem 'test-unit'
2
1
  require 'test/unit'
3
2
  require 'yaml'
4
- require_relative 'test_base'
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: "Rick Astley"})
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.1.1
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: 2012-12-05 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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.9'
196
+ version: '1.8'
197
197
  required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  none: false
199
199
  requirements: