artifactory 2.8.0 → 2.8.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 25479b749ea49c38799479ba12df5373efdf77a0
4
- data.tar.gz: 52732e8ba49c9b1e29ad2180aa1e4ff8175d1798
3
+ metadata.gz: 2b85783f95f2c304e859d43d9c35399812049fbf
4
+ data.tar.gz: 5c7d4b82bbdcb8d64effa3ef4d0d205c5ecc1b3e
5
5
  SHA512:
6
- metadata.gz: e111db3109a4598677fd2ba3b1cbe7d5cb26c087e43690c06ca97cc3ced0b0fc776e1736dfadf87ee5d8683ba1d6a369dbd0c416ae27055d41dfa0ca69d58c6f
7
- data.tar.gz: c76f8078e1829439fb4673a284842c954d8aa859b9ac16cad3535f508f568309c196e587df1d43946bcc1725e97211c5460d0797bd27717054124687ff4449f2
6
+ metadata.gz: 334b556c77599920368e7aaab3ff2062243872c8f02dc356b4acc4e4e6ec2ebc0db66280c9fb8185e6ed813185b0062c5c94052c46a1b394a805ff83a97dd377
7
+ data.tar.gz: 6991c793b25068e7d028d0939780809e72186d0dae9dcec1b31ea6107fe76d8015eed1d937030af34322a3dfa803144bb5239dc5404f7bf8da4b737f6238e146
@@ -3,6 +3,10 @@ Artifactory Client CHANGELOG
3
3
  This file is used to document the changes between releases of the Artifactory
4
4
  Ruby client.
5
5
 
6
+ v2.8.1 (03-21-2017)
7
+ -------------------
8
+ - Allow downloading of large files. Fixes #83.
9
+
6
10
  v2.8.0 (03-17-2017)
7
11
  -------------------
8
12
  - Include statuses in Build resource
@@ -90,16 +90,21 @@ module Artifactory
90
90
  #
91
91
  # Make a HTTP GET request
92
92
  #
93
+ # If a block is provided the response body is yielded in chunks/fragments
94
+ # as it is read from the undelrying socket.
95
+ #
93
96
  # @param path (see Client#request)
94
97
  # @param [Hash] params
95
98
  # the list of query params
96
99
  # @param headers (see Client#request)
97
100
  #
101
+ # @yield [chunk] Partial piece of response body
102
+ #
98
103
  # @raise (see Client#request)
99
104
  # @return (see Client#request)
100
105
  #
101
- def get(path, params = {}, headers = {})
102
- request(:get, path, params, headers)
106
+ def get(path, params = {}, headers = {}, &block)
107
+ request(:get, path, params, headers, &block)
103
108
  end
104
109
 
105
110
  #
@@ -162,7 +167,9 @@ module Artifactory
162
167
  #
163
168
  # Make an HTTP request with the given verb, data, params, and headers. If
164
169
  # the response has a return type of JSON, the JSON is automatically parsed
165
- # and returned as a hash; otherwise it is returned as a string.
170
+ # and returned as a hash; otherwise it is returned as a string. If a block
171
+ # is provided the response body is yielded in chunks/fragments as it is
172
+ # read from the undelrying socket.
166
173
  #
167
174
  # @raise [Error::HTTPError]
168
175
  # if the request is not an HTTP 200 OK
@@ -177,10 +184,12 @@ module Artifactory
177
184
  # @param [Hash] headers
178
185
  # the list of headers to use
179
186
  #
187
+ # @yield [chunk] Partial piece of response body
188
+ #
180
189
  # @return [String, Hash]
181
190
  # the response body
182
191
  #
183
- def request(verb, path, data = {}, headers = {})
192
+ def request(verb, path, data = {}, headers = {}, &block)
184
193
  # Build the URI and request object from the given information
185
194
  uri = build_uri(verb, path, data)
186
195
  request = class_for_request(verb).new(uri.request_uri)
@@ -245,16 +254,25 @@ module Artifactory
245
254
  # Create a connection using the block form, which will ensure the socket
246
255
  # is properly closed in the event of an error.
247
256
  connection.start do |http|
248
- response = http.request(request)
249
-
250
- case response
251
- when Net::HTTPRedirection
252
- redirect = URI.parse(response["location"])
253
- request(verb, redirect, data, headers)
254
- when Net::HTTPSuccess
255
- success(response)
257
+
258
+ if block_given?
259
+ http.request(request) do |response|
260
+ response.read_body do |chunk|
261
+ yield chunk
262
+ end
263
+ end
256
264
  else
257
- error(response)
265
+ response = http.request(request)
266
+
267
+ case response
268
+ when Net::HTTPRedirection
269
+ redirect = URI.parse(response["location"])
270
+ request(verb, redirect, data, headers)
271
+ when Net::HTTPSuccess
272
+ success(response)
273
+ else
274
+ error(response)
275
+ end
258
276
  end
259
277
  end
260
278
  rescue SocketError, Errno::ECONNREFUSED, EOFError
@@ -502,7 +502,9 @@ module Artifactory
502
502
  destination = File.join(target, filename)
503
503
 
504
504
  File.open(destination, "wb") do |file|
505
- file.write(client.get(download_uri))
505
+ client.get(download_uri) do |chunk|
506
+ file.write chunk
507
+ end
506
508
  end
507
509
 
508
510
  destination
@@ -15,5 +15,5 @@
15
15
  #
16
16
 
17
17
  module Artifactory
18
- VERSION = "2.8.0"
18
+ VERSION = "2.8.1"
19
19
  end
@@ -46,6 +46,13 @@ module Artifactory
46
46
  expect(subject).to receive(:request).with(:get, "/foo", {}, {})
47
47
  subject.get("/foo")
48
48
  end
49
+
50
+ context "called with a block" do
51
+ it "yields the response in chunks" do
52
+ expect(subject).to receive(:request).with(:get, "/foo", {}, {}) { |&block| block.call("Chunked Body") }
53
+ expect { |chunk| subject.get("/foo", &chunk) }.to yield_with_args("Chunked Body")
54
+ end
55
+ end
49
56
  end
50
57
 
51
58
  describe "#post" do
@@ -90,6 +97,16 @@ module Artifactory
90
97
  expect { subject.request(:get, "/") }.to raise_error(Error::HTTPError)
91
98
  end
92
99
  end
100
+
101
+ context "called with a block" do
102
+ before { stub_request(:get, /.+/).to_return(status: 200, body: "Chunked Body") }
103
+
104
+ it "yields the response in chunks" do
105
+ subject.request(:get, "/foo") do |chunk|
106
+ expect(chunk).to eq("Chunked Body")
107
+ end
108
+ end
109
+ end
93
110
  end
94
111
 
95
112
  describe "#to_query_string" do
@@ -560,6 +560,20 @@ module Artifactory
560
560
  expect(Dir.entries(tmpdir)).to include("foobar.deb")
561
561
  end
562
562
  end
563
+
564
+ it "writes the file in chunks" do
565
+ Dir.mktmpdir("artifact_download") do |tmpdir|
566
+ subject.download_uri = "/artifact.deb"
567
+
568
+ expect(client).to receive(:get).and_yield("some content")
569
+
570
+ file = double("file")
571
+ expect(File).to receive(:open).with(File.join(tmpdir, "artifact.deb"), "wb").and_yield(file)
572
+ expect(file).to receive(:write).with("some content")
573
+
574
+ subject.download(tmpdir)
575
+ end
576
+ end
563
577
  end
564
578
 
565
579
  describe "#relative_path" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artifactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Vargo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-17 00:00:00.000000000 Z
11
+ date: 2017-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler