rest-client-components 1.1.1 → 1.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/Rakefile CHANGED
@@ -9,7 +9,7 @@ begin
9
9
  s.homepage = "http://github.com/crohr/rest-client-components"
10
10
  s.description = "RestClient on steroids ! Easily add one or more Rack middleware around RestClient to add functionalities such as transparent caching (Rack::Cache), transparent logging, etc."
11
11
  s.authors = ["Cyril Rohr"]
12
- s.add_dependency "rest-client", ">= 1.5.0"
12
+ s.add_dependency "rest-client", ">= 1.6.0", "< 1.7.0"
13
13
  s.add_dependency "rack", ">= 1.0.1"
14
14
  s.add_development_dependency "webmock"
15
15
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.2.0
@@ -90,7 +90,11 @@ module RestClient
90
90
  uri = URI.parse(@url)
91
91
  # minimal rack spec
92
92
  env = {
93
- "restclient.hash" => {:request => self, :error => nil, :block => block},
93
+ "restclient.hash" => {
94
+ :request => self,
95
+ :error => nil,
96
+ :block => block
97
+ },
94
98
  "REQUEST_METHOD" => @method.to_s.upcase,
95
99
  "SCRIPT_NAME" => "",
96
100
  "PATH_INFO" => uri.path || "/",
@@ -108,7 +112,12 @@ module RestClient
108
112
  @processed_headers.each do |key, value|
109
113
  env.merge!("HTTP_"+key.to_s.gsub("-", "_").upcase => value)
110
114
  end
111
- env.delete('HTTP_CONTENT_TYPE'); env.delete('HTTP_CONTENT_LENGTH')
115
+ if content_type = env.delete('HTTP_CONTENT_TYPE')
116
+ env['CONTENT_TYPE'] = content_type
117
+ end
118
+ if content_length = env.delete('HTTP_CONTENT_LENGTH')
119
+ env['CONTENT_LENGTH'] = content_length
120
+ end
112
121
  stack = RestClient::RACK_APP
113
122
  RestClient.components.each do |(component, args)|
114
123
  if (args || []).empty?
@@ -169,10 +178,12 @@ module RestClient
169
178
  begin
170
179
  # get the original request, replace headers with those of env, and execute it
171
180
  request = env['restclient.hash'][:request]
172
- additional_headers = (env.keys.select{|k| k=~/^HTTP_/}).inject({}){|accu, k|
173
- accu[k.gsub("HTTP_", "")] = env[k]
181
+ env_headers = (env.keys.select{|k| k=~/^HTTP_/}).inject({}){|accu, k|
182
+ accu[k.gsub("HTTP_", "").split("_").map{|s| s.downcase.capitalize}.join("-")] = env[k]
174
183
  accu
175
184
  }
185
+ env_headers['Content-Type'] = env['CONTENT_TYPE'] if env['CONTENT_TYPE']
186
+ env_headers['Content-Length'] = env['CONTENT_LENGTH'] if env['CONTENT_LENGTH']
176
187
  # hack, should probably avoid to call #read on rack.input..
177
188
  payload = if (env['rack.input'].size > 0)
178
189
  env['rack.input'].rewind
@@ -181,12 +192,14 @@ module RestClient
181
192
  nil
182
193
  end
183
194
  request.instance_variable_set "@payload", payload
184
- headers = request.make_headers(additional_headers)
185
- headers.delete('Content-Type')
186
- headers['Content-type'] = env['CONTENT_TYPE'] if env['CONTENT_TYPE']
195
+ headers = request.make_headers(env_headers)
187
196
  request.processed_headers.update(headers)
188
197
  response = request.original_execute
189
- rescue RestClient::ExceptionWithResponse => e
198
+ rescue RestClient::ExceptionWithResponse => e
199
+ # re-raise the error if the response is nil (RestClient does not
200
+ # differentiate between a RestClient::RequestTimeout due to a 408
201
+ # status code, and a RestClient::RequestTimeout due to a Timeout::Error)
202
+ raise e if e.response.nil?
190
203
  env['restclient.hash'][:error] = e
191
204
  response = e.response
192
205
  end
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rest-client-components}
8
- s.version = "1.1.1"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cyril Rohr"]
12
- s.date = %q{2010-04-24}
12
+ s.date = %q{2010-07-22}
13
13
  s.description = %q{RestClient on steroids ! Easily add one or more Rack middleware around RestClient to add functionalities such as transparent caching (Rack::Cache), transparent logging, etc.}
14
14
  s.email = %q{cyril.rohr@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.homepage = %q{http://github.com/crohr/rest-client-components}
33
33
  s.rdoc_options = ["--charset=UTF-8"]
34
34
  s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.3.5}
35
+ s.rubygems_version = %q{1.3.7}
36
36
  s.summary = %q{RestClient on steroids ! Easily add one or more Rack middleware around RestClient to add functionalities such as transparent caching (Rack::Cache), transparent logging, etc.}
37
37
  s.test_files = [
38
38
  "spec/components_spec.rb",
@@ -46,17 +46,17 @@ Gem::Specification.new do |s|
46
46
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
47
  s.specification_version = 3
48
48
 
49
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
50
- s.add_runtime_dependency(%q<rest-client>, [">= 1.5.0"])
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<rest-client>, [">= 1.6.0", "< 1.7.0"])
51
51
  s.add_runtime_dependency(%q<rack>, [">= 1.0.1"])
52
52
  s.add_development_dependency(%q<webmock>, [">= 0"])
53
53
  else
54
- s.add_dependency(%q<rest-client>, [">= 1.5.0"])
54
+ s.add_dependency(%q<rest-client>, [">= 1.6.0", "< 1.7.0"])
55
55
  s.add_dependency(%q<rack>, [">= 1.0.1"])
56
56
  s.add_dependency(%q<webmock>, [">= 0"])
57
57
  end
58
58
  else
59
- s.add_dependency(%q<rest-client>, [">= 1.5.0"])
59
+ s.add_dependency(%q<rest-client>, [">= 1.6.0", "< 1.7.0"])
60
60
  s.add_dependency(%q<rack>, [">= 1.0.1"])
61
61
  s.add_dependency(%q<webmock>, [">= 0"])
62
62
  end
@@ -60,6 +60,10 @@ describe "Components for RestClient" do
60
60
  stub_request(:get, "http://server.ltd/resource").to_raise(EOFError)
61
61
  lambda{ RestClient.get "http://server.ltd/resource" }.should raise_error(RestClient::ServerBrokeConnection)
62
62
  end
63
+ it "should raise timeout Exception errors" do
64
+ stub_request(:get, "http://server.ltd/resource").to_raise(Timeout::Error)
65
+ lambda{ RestClient.get "http://server.ltd/resource" }.should raise_error(RestClient::RequestTimeout)
66
+ end
63
67
  it "should correctly pass the payload in rack.input" do
64
68
  class RackAppThatProcessesPayload
65
69
  def initialize(app); @app = app; end
@@ -71,10 +75,15 @@ describe "Components for RestClient" do
71
75
  end
72
76
  end
73
77
  RestClient.enable RackAppThatProcessesPayload
74
- stub_request(:post, "http://server.ltd/resource").with(:body => "<b>rest-client-components</b> is cool", :headers => {'Content-Type'=>'text/plain', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'37', 'Accept'=>'*/*; q=0.5, application/xml'}).to_return(:status => 201, :body => "ok", :headers => {'Content-Length' => 2, 'Content-Type' => "text/plain"})
78
+ stub_request(:post, "http://server.ltd/resource").with(:body => "<b>rest-client-components</b> is cool", :headers => {'Content-Type'=>'text/html', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'37', 'Accept'=>'*/*; q=0.5, application/xml'}).to_return(:status => 201, :body => "ok", :headers => {'Content-Length' => 2, 'Content-Type' => "text/plain"})
75
79
  RestClient.post "http://server.ltd/resource", 'rest-client is cool', :content_type => "text/plain"
76
80
  end
77
81
 
82
+ it "should correctly pass content-length and content-type headers" do
83
+ stub_request(:post, "http://server.ltd/resource").with(:body => "some stupid message", :headers => {'Content-Type'=>'text/plain', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'19', 'Accept'=>'*/*; q=0.5, application/xml'}).to_return(:status => 201, :body => "ok", :headers => {'Content-Length' => 2, 'Content-Type' => "text/plain"})
84
+ RestClient.post "http://server.ltd/resource", 'some stupid message', :content_type => "text/plain", :content_length => 19
85
+ end
86
+
78
87
  describe "and another component" do
79
88
  before do
80
89
  class AnotherRackMiddleware
@@ -124,10 +133,8 @@ describe "Components for RestClient" do
124
133
  response.headers[:age].should == "0"
125
134
  response.body.should == "body"
126
135
  end
127
- sleep 1
128
136
  RestClient.get "http://server.ltd/resource" do |response|
129
137
  response.headers[:x_rack_cache].should == 'stale, valid, store'
130
- response.headers[:age].should == "1"
131
138
  response.body.should == "body"
132
139
  end
133
140
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-client-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ hash: 2840920021394413258
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Cyril Rohr
@@ -9,39 +15,63 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-04-24 00:00:00 +02:00
18
+ date: 2010-07-22 00:00:00 +02:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: rest-client
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
23
- version: 1.5.0
24
- version:
29
+ hash: 2657083326512599250
30
+ segments:
31
+ - 1
32
+ - 6
33
+ - 0
34
+ version: 1.6.0
35
+ - - <
36
+ - !ruby/object:Gem::Version
37
+ hash: 158014003617880386
38
+ segments:
39
+ - 1
40
+ - 7
41
+ - 0
42
+ version: 1.7.0
43
+ type: :runtime
44
+ version_requirements: *id001
25
45
  - !ruby/object:Gem::Dependency
26
46
  name: rack
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
47
+ prerelease: false
48
+ requirement: &id002 !ruby/object:Gem::Requirement
49
+ none: false
30
50
  requirements:
31
51
  - - ">="
32
52
  - !ruby/object:Gem::Version
53
+ hash: 3196562863265611407
54
+ segments:
55
+ - 1
56
+ - 0
57
+ - 1
33
58
  version: 1.0.1
34
- version:
59
+ type: :runtime
60
+ version_requirements: *id002
35
61
  - !ruby/object:Gem::Dependency
36
62
  name: webmock
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
63
+ prerelease: false
64
+ requirement: &id003 !ruby/object:Gem::Requirement
65
+ none: false
40
66
  requirements:
41
67
  - - ">="
42
68
  - !ruby/object:Gem::Version
69
+ hash: -1411813972297755852
70
+ segments:
71
+ - 0
43
72
  version: "0"
44
- version:
73
+ type: :development
74
+ version_requirements: *id003
45
75
  description: RestClient on steroids ! Easily add one or more Rack middleware around RestClient to add functionalities such as transparent caching (Rack::Cache), transparent logging, etc.
46
76
  email: cyril.rohr@gmail.com
47
77
  executables: []
@@ -73,21 +103,27 @@ rdoc_options:
73
103
  require_paths:
74
104
  - lib
75
105
  required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
76
107
  requirements:
77
108
  - - ">="
78
109
  - !ruby/object:Gem::Version
110
+ hash: -1411813972297755852
111
+ segments:
112
+ - 0
79
113
  version: "0"
80
- version:
81
114
  required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
82
116
  requirements:
83
117
  - - ">="
84
118
  - !ruby/object:Gem::Version
119
+ hash: -1411813972297755852
120
+ segments:
121
+ - 0
85
122
  version: "0"
86
- version:
87
123
  requirements: []
88
124
 
89
125
  rubyforge_project:
90
- rubygems_version: 1.3.5
126
+ rubygems_version: 1.3.7
91
127
  signing_key:
92
128
  specification_version: 3
93
129
  summary: RestClient on steroids ! Easily add one or more Rack middleware around RestClient to add functionalities such as transparent caching (Rack::Cache), transparent logging, etc.