curb 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26faca47e47561b5ab762a32f58e2771db9a39c2482152fa1116a7082a27de91
4
- data.tar.gz: a138509513b023f12537a1bff7fa11e6ef563cc5c59af860b73f119705ee1023
3
+ metadata.gz: 0105bb19d8f3c70c7b16dc47ede5eef29b26d78a765b6ab9ac19c81dc34c647a
4
+ data.tar.gz: 8bb7441583b1caa916969f4a7aad3785777de7912347f6c454bb110c4ab50b08
5
5
  SHA512:
6
- metadata.gz: 4686d9ad528ba0f1931c95fa95d25266c8ffcc2214c3a5f527e437f30977f94bde4a48b38d27ad6342cc868c620e2fd4bd214baeae435725a1746d0c93a22aef
7
- data.tar.gz: 2e4ba49a5906448e0ad381dad6017cf01140166ee78f1b025b9245cc79c6ff20b37ffd18abc61a56289e8bdeee0750a68f3d84369da36d360f7a61775da10566
6
+ metadata.gz: b9d63ab6203a5d37fe3ef02b081f92afa9ece68acdde249d6f3e09fd21fec5fd1342fa6e2fcbfb6fc58a6fd5ad2fce44fd0915d0b0bd31902cc9c5aef976d250
7
+ data.tar.gz: cb9f110ebeddb88eddc31d9cf1985148365c6abe5a378e2ea157414dd7bc96c59b2b2883ba0b21ac1569d82ee4bc8744cfbeaae1eaae07245c81a146bae78510
data/README.markdown CHANGED
@@ -37,6 +37,103 @@ POST request
37
37
  puts res.body
38
38
  ```
39
39
 
40
+ ## FTP Support
41
+
42
+ require 'curb'
43
+
44
+ ### Basic FTP Download
45
+ ```ruby
46
+ puts "=== FTP Download Example ==="
47
+ ftp = Curl::Easy.new('ftp://ftp.example.com/remote/file.txt')
48
+ ftp.username = 'user'
49
+ ftp.password = 'password'
50
+ ftp.perform
51
+ puts ftp.body
52
+ ```
53
+
54
+ ### FTP Upload
55
+ ```ruby
56
+ puts "\n=== FTP Upload Example ==="
57
+ upload = Curl::Easy.new('ftp://ftp.example.com/remote/upload.txt')
58
+ upload.username = 'user'
59
+ upload.password = 'password'
60
+ upload.upload = true
61
+ upload.put_data = File.read('local_file.txt')
62
+ upload.perform
63
+ ```
64
+
65
+ ### List Directory Contents
66
+ ```ruby
67
+ puts "\n=== FTP Directory Listing Example ==="
68
+ list = Curl::Easy.new('ftp://ftp.example.com/remote/directory/')
69
+ list.username = 'user'
70
+ list.password = 'password'
71
+ list.dirlistonly = true
72
+ list.perform
73
+ puts list.body
74
+ ```
75
+
76
+ ### Advanced FTP Usage with Various Options
77
+ ```
78
+ puts "\n=== Advanced FTP Example ==="
79
+ advanced = Curl::Easy.new do |curl|
80
+ curl.url = 'ftp://ftp.example.com/remote/file.txt'
81
+ curl.username = 'user'
82
+ curl.password = 'password'
83
+
84
+ # FTP Options
85
+ curl.ftp_response_timeout = 30
86
+ curl.ftp_create_missing_dirs = true # Create directories if they don't exist
87
+ curl.ftp_filemethod = Curl::CURL_MULTICWD # Use multicwd method for traversing paths
88
+
89
+ # SSL/TLS Options for FTPS
90
+ curl.use_ssl = Curl::CURLUSESSL_ALL # Use SSL/TLS for control and data
91
+ curl.ssl_verify_peer = true
92
+ curl.ssl_verify_host = true
93
+ curl.cacert = "/path/to/cacert.pem"
94
+
95
+ # Progress callback
96
+ curl.on_progress do |dl_total, dl_now, ul_total, ul_now|
97
+ puts "Download: #{dl_now}/#{dl_total} Upload: #{ul_now}/#{ul_total}"
98
+ true # must return true to continue
99
+ end
100
+
101
+ # Debug output
102
+ curl.verbose = true
103
+ curl.on_debug do |type, data|
104
+ puts "#{type}: #{data}"
105
+ true
106
+ end
107
+ end
108
+
109
+ advanced.perform
110
+ ```
111
+
112
+ ### Parallel FTP Downloads
113
+ ```
114
+ puts "\n=== Parallel FTP Downloads Example ==="
115
+ urls = [
116
+ 'ftp://ftp.example.com/file1.txt',
117
+ 'ftp://ftp.example.com/file2.txt',
118
+ 'ftp://ftp.example.com/file3.txt'
119
+ ]
120
+ ```
121
+
122
+ ### Common options for all connections
123
+ ```
124
+ options = {
125
+ :username => 'user',
126
+ :password => 'password',
127
+ :timeout => 30,
128
+ :on_success => proc { |easy| puts "Successfully downloaded: #{easy.url}" },
129
+ :on_failure => proc { |easy, code| puts "Failed to download: #{easy.url} (#{code})" }
130
+ }
131
+
132
+ Curl::Multi.download(urls, options) do |curl, file_path|
133
+ puts "Completed downloading to: #{file_path}"
134
+ end
135
+ ```
136
+
40
137
  ## You will need
41
138
 
42
139
  * A working Ruby installation (`2.0.0+` will work but `2.1+` preferred) (it's possible it still works with 1.8.7 but you'd have to tell me if not...)
@@ -50,20 +147,23 @@ A **non-exhaustive** set of compatibility versions of the libcurl library
50
147
  with this gem are as follows. (Note that these are only the ones that have been
51
148
  tested and reported to work across a variety of platforms / rubies)
52
149
 
53
- | Gem Version | Release Date | libcurl versions |
54
- | ----------- | ----------- | ---------------- |
55
- | 1.0.5 | Jan 2023 | 7.58 - 7.87 |
56
- | 1.0.4 | Jan 2023 | 7.58 - 7.87 |
57
- | 1.0.3* | Dec 2022 | 7.58 - 7.87 |
58
- | 1.0.2* | Dec 2022 | 7.58 - 7.87 |
59
- | 1.0.1 | Apr 2022 | 7.58 - 7.87 |
60
- | 1.0.0 | Jan 2022 | 7.58 - 7.87 |
61
- | 0.9.8 | Jan 2019 | 7.58 - 7.81 |
62
- | 0.9.7 | Nov 2018 | 7.56 - 7.60 |
63
- | 0.9.6 | May 2018 | 7.51 - 7.59 |
64
- | 0.9.5 | May 2018 | 7.51 - 7.59 |
65
- | 0.9.4 | Aug 2017 | 7.41 - 7.58 |
66
- | 0.9.3 | Apr 2016 | 7.26 - 7.58 |
150
+ | Gem Version | Release Date | libcurl versions |
151
+ | ----------- | -------------- | ----------------- |
152
+ | 1.0.8 | Feb 10, 2025 | 7.58 8.12.1 |
153
+ | 1.0.7 | Feb 09, 2025 | 7.58 8.12.1 |
154
+ | 1.0.6 | Aug 23, 2024 | 7.58 8.12.1 |
155
+ | 1.0.5 | Jan 2023 | 7.58 8.12.1 |
156
+ | 1.0.4 | Jan 2023 | 7.58 8.12.1 |
157
+ | 1.0.3* | Dec 2022 | 7.58 8.12.1 |
158
+ | 1.0.2* | Dec 2022 | 7.58 8.12.1 |
159
+ | 1.0.1 | Apr 2022 | 7.58 8.12.1 |
160
+ | 1.0.0 | Jan 2022 | 7.58 8.12.1 |
161
+ | 0.9.8 | Jan 2019 | 7.58 7.81 |
162
+ | 0.9.7 | Nov 2018 | 7.56 7.60 |
163
+ | 0.9.6 | May 2018 | 7.51 7.59 |
164
+ | 0.9.5 | May 2018 | 7.51 – 7.59 |
165
+ | 0.9.4 | Aug 2017 | 7.41 – 7.58 |
166
+ | 0.9.3 | Apr 2016 | 7.26 – 7.58 |
67
167
 
68
168
  ```*avoid using these version are known to have issues with segmentation faults```
69
169
 
@@ -215,7 +315,7 @@ c = Curl::Easy.new
215
315
  ["http://www.google.co.uk", "http://www.ruby-lang.org/"].map do |url|
216
316
  c.url = url
217
317
  c.perform
218
- c.body_str
318
+ c.body
219
319
  end
220
320
  ```
221
321
 
@@ -242,7 +342,7 @@ c = Curl::Easy.new("https://http2.akamai.com")
242
342
  c.set(:HTTP_VERSION, Curl::HTTP_2_0)
243
343
 
244
344
  c.perform
245
- puts (c.body_str.include? "You are using HTTP/2 right now!") ? "HTTP/2" : "HTTP/1.x"
345
+ puts (c.body.include? "You are using HTTP/2 right now!") ? "HTTP/2" : "HTTP/1.x"
246
346
  ```
247
347
 
248
348
  ### Multi Interface (Basic HTTP GET):
data/Rakefile CHANGED
@@ -3,6 +3,10 @@
3
3
  require 'rake/clean'
4
4
  require 'rake/testtask'
5
5
  require "ruby_memcheck"
6
+ begin
7
+ require 'mixlib/shellout'
8
+ rescue LoadError
9
+ end
6
10
 
7
11
  CLEAN.include '**/*.o'
8
12
  CLEAN.include "**/*.#{(defined?(RbConfig) ? RbConfig : Config)::MAKEFILE_CONFIG['DLEXT']}"
data/ext/curb.h CHANGED
@@ -28,11 +28,11 @@
28
28
  #include "curb_macros.h"
29
29
 
30
30
  // These should be managed from the Rake 'release' task.
31
- #define CURB_VERSION "1.0.8"
32
- #define CURB_VER_NUM 1008
31
+ #define CURB_VERSION "1.0.9"
32
+ #define CURB_VER_NUM 1009
33
33
  #define CURB_VER_MAJ 1
34
34
  #define CURB_VER_MIN 0
35
- #define CURB_VER_MIC 8
35
+ #define CURB_VER_MIC 9
36
36
  #define CURB_VER_PATCH 0
37
37
 
38
38
 
data/ext/curb_easy.c CHANGED
@@ -2535,7 +2535,7 @@ VALUE ruby_curl_easy_setup(ruby_curl_easy *rbce) {
2535
2535
  rb_iterate(rb_each, rb_easy_get("proxy_headers"), cb_each_http_proxy_header, wrap);
2536
2536
  } else {
2537
2537
  VALUE proxy_headers_str = rb_obj_as_string(rb_easy_get("proxy_headers"));
2538
- *phdrs = curl_slist_append(*hdrs, StringValuePtr(proxy_headers_str));
2538
+ *phdrs = curl_slist_append(*phdrs, StringValuePtr(proxy_headers_str));
2539
2539
  }
2540
2540
 
2541
2541
  if (*phdrs) {
@@ -58,12 +58,13 @@ class TestCurbCurlPostfield < Test::Unit::TestCase
58
58
 
59
59
  def test_new_file_01
60
60
  pf = Curl::PostField.file('foo', 'localname')
61
+ pf.content_type = 'text/super'
61
62
 
62
63
  assert_equal 'foo', pf.name
63
64
  assert_equal 'localname', pf.local_file
64
65
  assert_equal 'localname', pf.remote_file
65
66
  assert_nothing_raised { pf.to_s }
66
- assert_nil pf.content_type
67
+ assert_equal 'text/super', pf.content_type
67
68
  assert_nil pf.content
68
69
  assert_nil pf.set_content_proc
69
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
8
8
  - Todd A. Fisher
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-09 00:00:00.000000000 Z
11
+ date: 2025-02-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
14
14
  for the libcurl(3), a fully-featured client-side URL transfer library. cURL and
@@ -79,7 +79,8 @@ files:
79
79
  homepage: https://github.com/taf2/curb
80
80
  licenses:
81
81
  - Ruby
82
- metadata: {}
82
+ metadata:
83
+ changelog_uri: https://github.com/taf2/curb/blob/master/ChangeLog.md
83
84
  rdoc_options:
84
85
  - "--main"
85
86
  - README.markdown