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 +1 -1
- data/VERSION +1 -1
- data/lib/restclient/components.rb +21 -8
- data/rest-client-components.gemspec +8 -8
- data/spec/components_spec.rb +10 -3
- metadata +54 -18
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.
|
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.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" => {
|
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')
|
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
|
-
|
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(
|
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
|
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.
|
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-
|
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.
|
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::
|
50
|
-
s.add_runtime_dependency(%q<rest-client>, [">= 1.
|
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.
|
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.
|
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
|
data/spec/components_spec.rb
CHANGED
@@ -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/
|
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
|
-
|
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-
|
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
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
24
|
-
|
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
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
59
|
+
type: :runtime
|
60
|
+
version_requirements: *id002
|
35
61
|
- !ruby/object:Gem::Dependency
|
36
62
|
name: webmock
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
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.
|
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.
|