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 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: