down 4.3.0 → 4.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fe68b913e3b94078cfc74c7599ef57cab7d4ac2
4
- data.tar.gz: f2cc86395be9ee08f188bd40d90cac2b9ae0ab59
3
+ metadata.gz: a80bdc5c9a560cb80bb1ad7ff6ff5d37c7286516
4
+ data.tar.gz: f9015c19819666eaeeaa13dbcf5e9537e63699f9
5
5
  SHA512:
6
- metadata.gz: 6a28ee64408befa22c4fb0eb51a5863daaa83555bb4dc5a72c3ee536cb32a2aaa0781cf163284144cdf42c179fdf0f3530bf5c5e804b18e6ff2dea2ab3e48fb6
7
- data.tar.gz: 45d8928e426182b463dee00daa5956e0a828a547e672b7e611cf135e333da696aa19fdf7f29eff45ce46580918c48c1720c1f5727d4d8bf01e534b2aa4d9f093
6
+ metadata.gz: 3a250ed7339d70e339f8591e260a85925395add6f18d8b4c2aa5cea40bfa420442606e0bdfa96b76df2661beec0830b1c011d609a16d15996bca80072b41c5e9
7
+ data.tar.gz: 884481d0a865cf7664715a77fcd0ae9a43fc36aa6dc0bc7729197c1dea6c1382aaca80925a2c6411390ca2c72e6ea825e2be41681399c59bd0cc0e1fe403a020
@@ -1,3 +1,9 @@
1
+ ## 4.4.0 (2018-04-12)
2
+
3
+ * Add `:method` option to `Down::Http` for specifying the request method (@janko-m)
4
+
5
+ * Set default timeout of 30 for each operation to all backends (@janko-m)
6
+
1
7
  ## 4.3.0 (2018-03-11)
2
8
 
3
9
  * Accept CLI arguments as a list of symbols in `Down::Wget#download` (@janko-m)
data/README.md CHANGED
@@ -41,7 +41,7 @@ Down allows you to pass a `:max_size` option:
41
41
 
42
42
  ```rb
43
43
  Down.download("http://example.com/image.jpg", max_size: 5 * 1024 * 1024) # 5 MB
44
- # !~> Down::TooLarge
44
+ # Down::TooLarge: file is too large (max is 5MB)
45
45
  ```
46
46
 
47
47
  What is the advantage over simply checking size after downloading? Well, Down
@@ -57,7 +57,6 @@ specific location on disk, you can specify the `:destination` option:
57
57
 
58
58
  ```rb
59
59
  Down.download("http://example.com/image.jpg", destination: "/path/to/destination")
60
- #=> nil
61
60
  ```
62
61
 
63
62
  ### Basic authentication
@@ -355,7 +354,7 @@ Net::HTTP include:
355
354
  All additional options will be forwarded to `HTTP::Client#request`:
356
355
 
357
356
  ```rb
358
- Down::Http.download("http://example.org/image.jpg", timeout: { connect: 3 })
357
+ Down::Http.download("http://example.org/image.jpg", headers: { "Foo" => "Bar" })
359
358
  Down::Http.open("http://example.org/image.jpg", follow: { max_hops: 0 })
360
359
  ```
361
360
 
@@ -370,7 +369,7 @@ end
370
369
  You can also initialize the backend with default options:
371
370
 
372
371
  ```rb
373
- http = Down::Http.new(timeout: { connect: 3 })
372
+ http = Down::Http.new(headers: { "Foo" => "Bar" })
374
373
  # or
375
374
  http = Down::Http.new(HTTP.timeout(connect: 3))
376
375
 
@@ -378,6 +377,19 @@ http.download("http://example.com/image.jpg")
378
377
  http.open("http://example.com/image.jpg")
379
378
  ```
380
379
 
380
+ #### Request method
381
+
382
+ By default `Down::Http` makes a `GET` request to the specified endpoint, but you
383
+ can specify a different request method using the `:method` option:
384
+
385
+ ```rb
386
+ Down::Http.download("http://example.org/image.jpg", method: :post)
387
+ Down::Http.open("http://example.org/image.jpg", method: :post)
388
+
389
+ down = Down::Http.new(method: :post)
390
+ down.download("http://example.org/image.jpg")
391
+ ```
392
+
381
393
  ### Wget (experimental)
382
394
 
383
395
  ```rb
@@ -15,8 +15,15 @@ end
15
15
  module Down
16
16
  class Http < Backend
17
17
  def initialize(client_or_options = {})
18
- options = client_or_options.is_a?(HTTP::Client) ? client_or_options.default_options : client_or_options
19
- @options = { headers: { "User-Agent" => "Down/#{Down::VERSION}" }, follow: { max_hops: 2 } }.merge(options)
18
+ options = client_or_options.is_a?(HTTP::Client) ? client_or_options.default_options.to_hash : client_or_options
19
+
20
+ @method = options.delete(:method) || :get
21
+ @options = {
22
+ headers: { "User-Agent" => "Down/#{Down::VERSION}" },
23
+ follow: { max_hops: 2 },
24
+ timeout_class: HTTP::Timeout::PerOperation,
25
+ timeout_options: { write_timeout: 30, connect_timeout: 30, read_timeout: 30 }
26
+ }.merge(options)
20
27
  end
21
28
 
22
29
  def download(url, max_size: nil, progress_proc: nil, content_length_proc: nil, destination: nil, **options, &block)
@@ -58,7 +65,7 @@ module Down
58
65
  end
59
66
 
60
67
  def open(url, rewindable: true, **options, &block)
61
- response = get(url, **options, &block)
68
+ response = request(url, **options, &block)
62
69
 
63
70
  response_error!(response) unless response.status.success?
64
71
 
@@ -78,13 +85,13 @@ module Down
78
85
  @default_client ||= HTTP::Client.new(@options)
79
86
  end
80
87
 
81
- def get(url, **options, &block)
88
+ def request(url, method: @method, **options, &block)
82
89
  url = process_url(url, options)
83
90
 
84
91
  client = default_client
85
92
  client = block.call(client) if block
86
93
 
87
- client.get(url, options)
94
+ client.send(method.to_s.downcase, url, options)
88
95
  rescue => exception
89
96
  request_error!(exception)
90
97
  end
@@ -12,7 +12,12 @@ require "cgi"
12
12
  module Down
13
13
  class NetHttp < Backend
14
14
  def initialize(options = {})
15
- @options = { "User-Agent" => "Down/#{Down::VERSION}", max_redirects: 2 }.merge(options)
15
+ @options = {
16
+ "User-Agent" => "Down/#{Down::VERSION}",
17
+ max_redirects: 2,
18
+ open_timeout: 30,
19
+ read_timeout: 30,
20
+ }.merge(options)
16
21
  end
17
22
 
18
23
  def download(url, options = {})
@@ -1,5 +1,5 @@
1
1
  # frozen-string-literal: true
2
2
 
3
3
  module Down
4
- VERSION = "4.3.0"
4
+ VERSION = "4.4.0"
5
5
  end
@@ -16,7 +16,13 @@ require "cgi"
16
16
  module Down
17
17
  class Wget < Backend
18
18
  def initialize(*arguments)
19
- @arguments = [max_redirect: 2, user_agent: "Down/#{Down::VERSION}"] + arguments
19
+ @arguments = [
20
+ user_agent: "Down/#{Down::VERSION}",
21
+ max_redirect: 2,
22
+ dns_timeout: 30,
23
+ connect_timeout: 30,
24
+ read_timeout: 30,
25
+ ] + arguments
20
26
  end
21
27
 
22
28
  def download(url, *args, max_size: nil, content_length_proc: nil, progress_proc: nil, destination: nil, **options)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: down
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-11 00:00:00.000000000 Z
11
+ date: 2018-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest