rest-client 1.6.14

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rest-client might be problematic. Click here for more details.

Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +3 -0
  5. data/AUTHORS +75 -0
  6. data/Gemfile +7 -0
  7. data/README.rdoc +300 -0
  8. data/Rakefile +49 -0
  9. data/bin/restclient +93 -0
  10. data/history.md +160 -0
  11. data/lib/rest-client.rb +2 -0
  12. data/lib/rest_client.rb +2 -0
  13. data/lib/restclient.rb +170 -0
  14. data/lib/restclient/abstract_response.rb +106 -0
  15. data/lib/restclient/exceptions.rb +198 -0
  16. data/lib/restclient/net_http_ext.rb +55 -0
  17. data/lib/restclient/payload.rb +240 -0
  18. data/lib/restclient/platform.rb +29 -0
  19. data/lib/restclient/raw_response.rb +34 -0
  20. data/lib/restclient/request.rb +360 -0
  21. data/lib/restclient/resource.rb +169 -0
  22. data/lib/restclient/response.rb +26 -0
  23. data/lib/restclient/version.rb +7 -0
  24. data/rest-client.gemspec +26 -0
  25. data/spec/abstract_response_spec.rb +85 -0
  26. data/spec/base.rb +13 -0
  27. data/spec/exceptions_spec.rb +98 -0
  28. data/spec/integration/capath_digicert/244b5494.0 +19 -0
  29. data/spec/integration/capath_digicert/81b9768f.0 +19 -0
  30. data/spec/integration/capath_digicert/README +8 -0
  31. data/spec/integration/capath_digicert/digicert.crt +19 -0
  32. data/spec/integration/certs/digicert.crt +19 -0
  33. data/spec/integration/certs/verisign.crt +14 -0
  34. data/spec/integration/request_spec.rb +75 -0
  35. data/spec/integration_spec.rb +38 -0
  36. data/spec/master_shake.jpg +0 -0
  37. data/spec/payload_spec.rb +244 -0
  38. data/spec/raw_response_spec.rb +17 -0
  39. data/spec/request2_spec.rb +35 -0
  40. data/spec/request_spec.rb +528 -0
  41. data/spec/resource_spec.rb +136 -0
  42. data/spec/response_spec.rb +169 -0
  43. data/spec/restclient_spec.rb +73 -0
  44. metadata +192 -0
@@ -0,0 +1,136 @@
1
+ require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
+
3
+ require 'webmock/rspec'
4
+ include WebMock::API
5
+
6
+ describe RestClient::Resource do
7
+ before do
8
+ @resource = RestClient::Resource.new('http://some/resource', :user => 'jane', :password => 'mypass', :headers => {'X-Something' => '1'})
9
+ end
10
+
11
+ context "Resource delegation" do
12
+ it "GET" do
13
+ RestClient::Request.should_receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
14
+ @resource.get
15
+ end
16
+
17
+ it "HEAD" do
18
+ RestClient::Request.should_receive(:execute).with(:method => :head, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
19
+ @resource.head
20
+ end
21
+
22
+ it "POST" do
23
+ RestClient::Request.should_receive(:execute).with(:method => :post, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
24
+ @resource.post 'abc', :content_type => 'image/jpg'
25
+ end
26
+
27
+ it "PUT" do
28
+ RestClient::Request.should_receive(:execute).with(:method => :put, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
29
+ @resource.put 'abc', :content_type => 'image/jpg'
30
+ end
31
+
32
+ it "PATCH" do
33
+ RestClient::Request.should_receive(:execute).with(:method => :patch, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
34
+ @resource.patch 'abc', :content_type => 'image/jpg'
35
+ end
36
+
37
+ it "DELETE" do
38
+ RestClient::Request.should_receive(:execute).with(:method => :delete, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
39
+ @resource.delete
40
+ end
41
+
42
+ it "overrides resource headers" do
43
+ RestClient::Request.should_receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '2'}, :user => 'jane', :password => 'mypass')
44
+ @resource.get 'X-Something' => '2'
45
+ end
46
+ end
47
+
48
+ it "can instantiate with no user/password" do
49
+ @resource = RestClient::Resource.new('http://some/resource')
50
+ end
51
+
52
+ it "is backwards compatible with previous constructor" do
53
+ @resource = RestClient::Resource.new('http://some/resource', 'user', 'pass')
54
+ @resource.user.should eq 'user'
55
+ @resource.password.should eq 'pass'
56
+ end
57
+
58
+ it "concatenates urls, inserting a slash when it needs one" do
59
+ @resource.concat_urls('http://example.com', 'resource').should eq 'http://example.com/resource'
60
+ end
61
+
62
+ it "concatenates urls, using no slash if the first url ends with a slash" do
63
+ @resource.concat_urls('http://example.com/', 'resource').should eq 'http://example.com/resource'
64
+ end
65
+
66
+ it "concatenates urls, using no slash if the second url starts with a slash" do
67
+ @resource.concat_urls('http://example.com', '/resource').should eq 'http://example.com/resource'
68
+ end
69
+
70
+ it "concatenates even non-string urls, :posts + 1 => 'posts/1'" do
71
+ @resource.concat_urls(:posts, 1).should eq 'posts/1'
72
+ end
73
+
74
+ it "offers subresources via []" do
75
+ parent = RestClient::Resource.new('http://example.com')
76
+ parent['posts'].url.should eq 'http://example.com/posts'
77
+ end
78
+
79
+ it "transports options to subresources" do
80
+ parent = RestClient::Resource.new('http://example.com', :user => 'user', :password => 'password')
81
+ parent['posts'].user.should eq 'user'
82
+ parent['posts'].password.should eq 'password'
83
+ end
84
+
85
+ it "passes a given block to subresources" do
86
+ block = Proc.new{|r| r}
87
+ parent = RestClient::Resource.new('http://example.com', &block)
88
+ parent['posts'].block.should eq block
89
+ end
90
+
91
+ it "the block should be overrideable" do
92
+ block1 = Proc.new{|r| r}
93
+ block2 = Proc.new{|r| r}
94
+ parent = RestClient::Resource.new('http://example.com', &block1)
95
+ # parent['posts', &block2].block.should eq block2 # ruby 1.9 syntax
96
+ parent.send(:[], 'posts', &block2).block.should eq block2
97
+ end
98
+
99
+ it "the block should be overrideable in ruby 1.9 syntax" do
100
+ block = Proc.new{|r| r}
101
+ parent = RestClient::Resource.new('http://example.com', &block)
102
+ r19_syntax = %q{
103
+ parent['posts', &->(r){r}].block.should_not eq block
104
+ }
105
+ if is_ruby_19?
106
+ eval(r19_syntax)
107
+ else
108
+ parent.should_not be_nil
109
+ end
110
+ end
111
+
112
+ it "prints its url with to_s" do
113
+ RestClient::Resource.new('x').to_s.should eq 'x'
114
+ end
115
+
116
+ describe 'block' do
117
+ it 'can use block when creating the resource' do
118
+ stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
119
+ resource = RestClient::Resource.new('www.example.com') { |response, request| 'foo' }
120
+ resource.get.should eq 'foo'
121
+ end
122
+
123
+ it 'can use block when executing the resource' do
124
+ stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
125
+ resource = RestClient::Resource.new('www.example.com')
126
+ resource.get { |response, request| 'foo' }.should eq 'foo'
127
+ end
128
+
129
+ it 'execution block override resource block' do
130
+ stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
131
+ resource = RestClient::Resource.new('www.example.com') { |response, request| 'foo' }
132
+ resource.get { |response, request| 'bar' }.should eq 'bar'
133
+ end
134
+
135
+ end
136
+ end
@@ -0,0 +1,169 @@
1
+ require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
+
3
+ require 'webmock/rspec'
4
+ include WebMock::API
5
+
6
+ describe RestClient::Response do
7
+ before do
8
+ @net_http_res = double('net http response', :to_hash => {"Status" => ["200 OK"]}, :code => 200)
9
+ @request = double('http request', :user => nil, :password => nil)
10
+ @response = RestClient::Response.create('abc', @net_http_res, {})
11
+ end
12
+
13
+ it "behaves like string" do
14
+ @response.to_s.should eq 'abc'
15
+ @response.to_str.should eq 'abc'
16
+ @response.to_i.should eq 200
17
+ end
18
+
19
+ it "accepts nil strings and sets it to empty for the case of HEAD" do
20
+ RestClient::Response.create(nil, @net_http_res, {}).to_s.should eq ""
21
+ end
22
+
23
+ it "test headers and raw headers" do
24
+ @response.raw_headers["Status"][0].should eq "200 OK"
25
+ @response.headers[:status].should eq "200 OK"
26
+ end
27
+
28
+ describe "cookie processing" do
29
+ it "should correctly deal with one Set-Cookie header with one cookie inside" do
30
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT"]})
31
+ response = RestClient::Response.create('abc', net_http_res, {})
32
+ response.headers[:set_cookie].should eq ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT"]
33
+ response.cookies.should eq({ "main_page" => "main_page_no_rewrite" })
34
+ end
35
+
36
+ it "should correctly deal with multiple cookies [multiple Set-Cookie headers]" do
37
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT", "remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT", "user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]})
38
+ response = RestClient::Response.create('abc', net_http_res, {})
39
+ response.headers[:set_cookie].should eq ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT", "remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT", "user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]
40
+ response.cookies.should eq({
41
+ "main_page" => "main_page_no_rewrite",
42
+ "remember_me" => "",
43
+ "user" => "somebody"
44
+ })
45
+ end
46
+
47
+ it "should correctly deal with multiple cookies [one Set-Cookie header with multiple cookies]" do
48
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT, remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT, user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]})
49
+ response = RestClient::Response.create('abc', net_http_res, {})
50
+ response.cookies.should eq({
51
+ "main_page" => "main_page_no_rewrite",
52
+ "remember_me" => "",
53
+ "user" => "somebody"
54
+ })
55
+ end
56
+ end
57
+
58
+ describe "exceptions processing" do
59
+ it "should return itself for normal codes" do
60
+ (200..206).each do |code|
61
+ net_http_res = double('net http response', :code => '200')
62
+ response = RestClient::Response.create('abc', net_http_res, {})
63
+ response.return! @request
64
+ end
65
+ end
66
+
67
+ it "should throw an exception for other codes" do
68
+ RestClient::Exceptions::EXCEPTIONS_MAP.each_key do |code|
69
+ unless (200..207).include? code
70
+ net_http_res = double('net http response', :code => code.to_i)
71
+ response = RestClient::Response.create('abc', net_http_res, {})
72
+ lambda { response.return!}.should raise_error
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ describe "redirection" do
80
+
81
+ it "follows a redirection when the request is a get" do
82
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
83
+ stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
84
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
85
+ end
86
+
87
+ it "follows a redirection and keep the parameters" do
88
+ stub_request(:get, 'http://foo:bar@some/resource').with(:headers => {'Accept' => 'application/json'}).to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
89
+ stub_request(:get, 'http://foo:bar@new/resource').with(:headers => {'Accept' => 'application/json'}).to_return(:body => 'Foo')
90
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :user => 'foo', :password => 'bar', :headers => {:accept => :json}).body.should eq 'Foo'
91
+ end
92
+
93
+ it "follows a redirection and keep the cookies" do
94
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Set-Cookie' => 'Foo=Bar', 'Location' => 'http://new/resource', })
95
+ stub_request(:get, 'http://new/resource').with(:headers => {'Cookie' => 'Foo=Bar'}).to_return(:body => 'Qux')
96
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Qux'
97
+ end
98
+
99
+ it "doesn't follow a 301 when the request is a post" do
100
+ net_http_res = double('net http response', :code => 301)
101
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post})
102
+ lambda { response.return!(@request)}.should raise_error(RestClient::MovedPermanently)
103
+ end
104
+
105
+ it "doesn't follow a 302 when the request is a post" do
106
+ net_http_res = double('net http response', :code => 302)
107
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post})
108
+ lambda { response.return!(@request)}.should raise_error(RestClient::Found)
109
+ end
110
+
111
+ it "doesn't follow a 307 when the request is a post" do
112
+ net_http_res = double('net http response', :code => 307)
113
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post})
114
+ lambda { response.return!(@request)}.should raise_error(RestClient::TemporaryRedirect)
115
+ end
116
+
117
+ it "doesn't follow a redirection when the request is a put" do
118
+ net_http_res = double('net http response', :code => 301)
119
+ response = RestClient::Response.create('abc', net_http_res, {:method => :put})
120
+ lambda { response.return!(@request)}.should raise_error(RestClient::MovedPermanently)
121
+ end
122
+
123
+ it "follows a redirection when the request is a post and result is a 303" do
124
+ stub_request(:put, 'http://some/resource').to_return(:body => '', :status => 303, :headers => {'Location' => 'http://new/resource'})
125
+ stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
126
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :put).body.should eq 'Foo'
127
+ end
128
+
129
+ it "follows a redirection when the request is a head" do
130
+ stub_request(:head, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
131
+ stub_request(:head, 'http://new/resource').to_return(:body => 'Foo')
132
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :head).body.should eq 'Foo'
133
+ end
134
+
135
+ it "handles redirects with relative paths" do
136
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'index'})
137
+ stub_request(:get, 'http://some/index').to_return(:body => 'Foo')
138
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
139
+ end
140
+
141
+ it "handles redirects with relative path and query string" do
142
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'index?q=1'})
143
+ stub_request(:get, 'http://some/index?q=1').to_return(:body => 'Foo')
144
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
145
+ end
146
+
147
+ it "follow a redirection when the request is a get and the response is in the 30x range" do
148
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
149
+ stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
150
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
151
+ end
152
+
153
+ it "follows no more than 10 redirections before raising error" do
154
+ stub_request(:get, 'http://some/redirect-1').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
155
+ stub_request(:get, 'http://some/redirect-2').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
156
+ lambda { RestClient::Request.execute(:url => 'http://some/redirect-1', :method => :get) }.should raise_error(RestClient::MaxRedirectsReached)
157
+ WebMock.should have_requested(:get, 'http://some/redirect-2').times(10)
158
+ end
159
+
160
+ it "follows no more than max_redirects redirections, if specified" do
161
+ stub_request(:get, 'http://some/redirect-1').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
162
+ stub_request(:get, 'http://some/redirect-2').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
163
+ lambda { RestClient::Request.execute(:url => 'http://some/redirect-1', :method => :get, :max_redirects => 5) }.should raise_error(RestClient::MaxRedirectsReached)
164
+ WebMock.should have_requested(:get, 'http://some/redirect-2').times(5)
165
+ end
166
+ end
167
+
168
+
169
+ end
@@ -0,0 +1,73 @@
1
+ require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
+
3
+ describe RestClient do
4
+ describe "API" do
5
+ it "GET" do
6
+ RestClient::Request.should_receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {})
7
+ RestClient.get('http://some/resource')
8
+ end
9
+
10
+ it "POST" do
11
+ RestClient::Request.should_receive(:execute).with(:method => :post, :url => 'http://some/resource', :payload => 'payload', :headers => {})
12
+ RestClient.post('http://some/resource', 'payload')
13
+ end
14
+
15
+ it "PUT" do
16
+ RestClient::Request.should_receive(:execute).with(:method => :put, :url => 'http://some/resource', :payload => 'payload', :headers => {})
17
+ RestClient.put('http://some/resource', 'payload')
18
+ end
19
+
20
+ it "PATCH" do
21
+ RestClient::Request.should_receive(:execute).with(:method => :patch, :url => 'http://some/resource', :payload => 'payload', :headers => {})
22
+ RestClient.patch('http://some/resource', 'payload')
23
+ end
24
+
25
+ it "DELETE" do
26
+ RestClient::Request.should_receive(:execute).with(:method => :delete, :url => 'http://some/resource', :headers => {})
27
+ RestClient.delete('http://some/resource')
28
+ end
29
+
30
+ it "HEAD" do
31
+ RestClient::Request.should_receive(:execute).with(:method => :head, :url => 'http://some/resource', :headers => {})
32
+ RestClient.head('http://some/resource')
33
+ end
34
+
35
+ it "OPTIONS" do
36
+ RestClient::Request.should_receive(:execute).with(:method => :options, :url => 'http://some/resource', :headers => {})
37
+ RestClient.options('http://some/resource')
38
+ end
39
+ end
40
+
41
+ describe "logging" do
42
+ after do
43
+ RestClient.log = nil
44
+ end
45
+
46
+ it "uses << if the log is not a string" do
47
+ log = RestClient.log = []
48
+ log.should_receive(:<<).with('xyz')
49
+ RestClient.log << 'xyz'
50
+ end
51
+
52
+ it "displays the log to stdout" do
53
+ RestClient.log = 'stdout'
54
+ STDOUT.should_receive(:puts).with('xyz')
55
+ RestClient.log << 'xyz'
56
+ end
57
+
58
+ it "displays the log to stderr" do
59
+ RestClient.log = 'stderr'
60
+ STDERR.should_receive(:puts).with('xyz')
61
+ RestClient.log << 'xyz'
62
+ end
63
+
64
+ it "append the log to the requested filename" do
65
+ RestClient.log = '/tmp/restclient.log'
66
+ f = double('file handle')
67
+ File.should_receive(:open).with('/tmp/restclient.log', 'a').and_yield(f)
68
+ f.should_receive(:puts).with('xyz')
69
+ RestClient.log << 'xyz'
70
+ end
71
+ end
72
+
73
+ end
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rest-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.14
5
+ platform: ruby
6
+ authors:
7
+ - REST Client Team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mime-types
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.4.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.4.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.4'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: 'A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework
98
+ style of specifying actions: get, put, post, delete.'
99
+ email: rest.client@librelist.com
100
+ executables:
101
+ - restclient
102
+ extensions: []
103
+ extra_rdoc_files:
104
+ - README.rdoc
105
+ - history.md
106
+ files:
107
+ - ".gitignore"
108
+ - ".rspec"
109
+ - ".travis.yml"
110
+ - AUTHORS
111
+ - Gemfile
112
+ - README.rdoc
113
+ - Rakefile
114
+ - bin/restclient
115
+ - history.md
116
+ - lib/rest-client.rb
117
+ - lib/rest_client.rb
118
+ - lib/restclient.rb
119
+ - lib/restclient/abstract_response.rb
120
+ - lib/restclient/exceptions.rb
121
+ - lib/restclient/net_http_ext.rb
122
+ - lib/restclient/payload.rb
123
+ - lib/restclient/platform.rb
124
+ - lib/restclient/raw_response.rb
125
+ - lib/restclient/request.rb
126
+ - lib/restclient/resource.rb
127
+ - lib/restclient/response.rb
128
+ - lib/restclient/version.rb
129
+ - rest-client.gemspec
130
+ - spec/abstract_response_spec.rb
131
+ - spec/base.rb
132
+ - spec/exceptions_spec.rb
133
+ - spec/integration/capath_digicert/244b5494.0
134
+ - spec/integration/capath_digicert/81b9768f.0
135
+ - spec/integration/capath_digicert/README
136
+ - spec/integration/capath_digicert/digicert.crt
137
+ - spec/integration/certs/digicert.crt
138
+ - spec/integration/certs/verisign.crt
139
+ - spec/integration/request_spec.rb
140
+ - spec/integration_spec.rb
141
+ - spec/master_shake.jpg
142
+ - spec/payload_spec.rb
143
+ - spec/raw_response_spec.rb
144
+ - spec/request2_spec.rb
145
+ - spec/request_spec.rb
146
+ - spec/resource_spec.rb
147
+ - spec/response_spec.rb
148
+ - spec/restclient_spec.rb
149
+ homepage: https://github.com/rest-client/rest-client
150
+ licenses:
151
+ - MIT
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubygems_version: 3.0.3
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Simple HTTP and REST client for Ruby, inspired by microframework syntax for
172
+ specifying actions.
173
+ test_files:
174
+ - spec/abstract_response_spec.rb
175
+ - spec/base.rb
176
+ - spec/exceptions_spec.rb
177
+ - spec/integration/capath_digicert/244b5494.0
178
+ - spec/integration/capath_digicert/81b9768f.0
179
+ - spec/integration/capath_digicert/README
180
+ - spec/integration/capath_digicert/digicert.crt
181
+ - spec/integration/certs/digicert.crt
182
+ - spec/integration/certs/verisign.crt
183
+ - spec/integration/request_spec.rb
184
+ - spec/integration_spec.rb
185
+ - spec/master_shake.jpg
186
+ - spec/payload_spec.rb
187
+ - spec/raw_response_spec.rb
188
+ - spec/request2_spec.rb
189
+ - spec/request_spec.rb
190
+ - spec/resource_spec.rb
191
+ - spec/response_spec.rb
192
+ - spec/restclient_spec.rb