curb 0.8.5 → 0.8.6

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.
@@ -5,7 +5,7 @@ class ::WEBrick::BasicLog ; def log(level, data) ; end ; end
5
5
 
6
6
  class BugCrashOnDebug < Test::Unit::TestCase
7
7
 
8
- def test_on_debug
8
+ def test_on_progress_raise
9
9
  server = WEBrick::HTTPServer.new( :Port => 9999 )
10
10
  server.mount_proc("/test") do|req,res|
11
11
  res.body = "hi"
@@ -30,4 +30,44 @@ class BugCrashOnDebug < Test::Unit::TestCase
30
30
  ensure
31
31
  server.shutdown
32
32
  end
33
+
34
+ def test_on_progress_abort
35
+ server = WEBrick::HTTPServer.new( :Port => 9999 )
36
+ server.mount_proc("/test") do|req,res|
37
+ res.body = "hi"
38
+ res['Content-Type'] = "text/html"
39
+ end
40
+
41
+ thread = Thread.new(server) do|srv|
42
+ srv.start
43
+ end
44
+
45
+ # see: https://github.com/taf2/curb/issues/192,
46
+ # to pass:
47
+ #
48
+ # c = Curl::Easy.new('http://127.0.0.1:9999/test')
49
+ # c.on_progress do|x|
50
+ # puts "we're in the progress callback"
51
+ # false
52
+ # end
53
+ # c.perform
54
+ #
55
+ # notice no return keyword
56
+ #
57
+ c = Curl::Easy.new('http://127.0.0.1:9999/test')
58
+ c.on_progress do|x|
59
+ puts "we're in the progress callback"
60
+ return false
61
+ end
62
+ c.perform
63
+
64
+ assert false, "should not reach this point"
65
+
66
+ rescue => e
67
+ assert_equal 'Curl::Err::AbortedByCallbackError', e.class.to_s
68
+ c.close
69
+ ensure
70
+ server.shutdown
71
+ end
72
+
33
73
  end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ class BugIssue102 < Test::Unit::TestCase
4
+
5
+ def test_interface
6
+ test = "https://api.twitter.com/1/users/show.json?screen_name=TwitterAPI&include_entities=true"
7
+ ip = "0.0.0.0"
8
+
9
+ c = Curl::Easy.new do |curl|
10
+ curl.url = test
11
+ curl.interface = ip
12
+ end
13
+
14
+ c.perform
15
+ end
16
+
17
+ end
@@ -10,7 +10,12 @@ $:.unshift($LIBDIR)
10
10
  $:.unshift($EXTDIR)
11
11
 
12
12
  require 'curb'
13
- require 'test/unit'
13
+ begin
14
+ require 'test/unit'
15
+ rescue LoadError
16
+ gem 'test/unit'
17
+ require 'test/unit'
18
+ end
14
19
  require 'fileutils'
15
20
 
16
21
  $TEST_URL = "file://#{URI.escape(File.expand_path(__FILE__).tr('\\','/').tr(':','|'))}"
@@ -6,7 +6,7 @@ class TestCurbCurlDownload < Test::Unit::TestCase
6
6
  def setup
7
7
  server_setup
8
8
  end
9
-
9
+
10
10
  def test_download_url_to_file_via_string
11
11
  dl_url = "http://127.0.0.1:9129/ext/curb_easy.c"
12
12
  dl_path = File.join(Dir::tmpdir, "dl_url_test.file")
@@ -645,8 +645,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
645
645
  curl = Curl::Easy.new(TestServlet.url)
646
646
  curl.multipart_form_post = true
647
647
  fields = [
648
- Curl::PostField.file('foo', File.expand_path(File.join(File.dirname(__FILE__),'..','README'))),
649
- Curl::PostField.file('bar', File.expand_path(File.join(File.dirname(__FILE__),'..','README')))
648
+ Curl::PostField.file('foo', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown'))),
649
+ Curl::PostField.file('bar', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
650
650
  ]
651
651
  curl.http_post(fields)
652
652
  assert_match /HTTP POST file upload/, curl.body_str
@@ -674,7 +674,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
674
674
  def test_post_multipart_file_remote
675
675
  curl = Curl::Easy.new(TestServlet.url)
676
676
  curl.multipart_form_post = true
677
- pf = Curl::PostField.file('readme', File.expand_path(File.join(File.dirname(__FILE__),'..','README')))
677
+ pf = Curl::PostField.file('readme', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
678
678
  curl.http_post(pf)
679
679
  assert_match /HTTP POST file upload/, curl.body_str
680
680
  assert_match /Content-Disposition: form-data/, curl.body_str
@@ -855,7 +855,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
855
855
  end
856
856
 
857
857
  def test_post_streaming
858
- readme = File.expand_path(File.join(File.dirname(__FILE__),'..','README'))
858
+ readme = File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown'))
859
859
 
860
860
  pf = Curl::PostField.file("filename", readme)
861
861
 
@@ -1022,6 +1022,13 @@ class TestCurbCurlEasy < Test::Unit::TestCase
1022
1022
  end
1023
1023
  end
1024
1024
 
1025
+ def test_set_unsupported_options
1026
+ curl = Curl::Easy.new
1027
+ assert_raises TypeError do
1028
+ curl.set(99999, 1)
1029
+ end
1030
+ end
1031
+
1025
1032
  include TestServerMethods
1026
1033
 
1027
1034
  def setup
@@ -466,7 +466,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
466
466
  m.add(c)
467
467
  m.add(c)
468
468
  rescue => e
469
- assert_equal Curl::Err::MultiBadEasyHandle, e.class
469
+ assert Curl::Err::MultiBadEasyHandle == e.class || Curl::Err::MultiAddedAlready == e.class
470
470
  end
471
471
 
472
472
  def test_multi_default_timeout
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-06-05 00:00:00.000000000 Z
13
+ date: 2014-07-22 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
16
16
  for the libcurl(3), a fully-featured client-side URL transfer library. cURL and
@@ -21,10 +21,10 @@ extensions:
21
21
  - ext/extconf.rb
22
22
  extra_rdoc_files:
23
23
  - LICENSE
24
- - README
24
+ - README.markdown
25
25
  files:
26
26
  - LICENSE
27
- - README
27
+ - README.markdown
28
28
  - Rakefile
29
29
  - doc.rb
30
30
  - ext/extconf.rb
@@ -51,6 +51,7 @@ files:
51
51
  - tests/bug_curb_easy_blocks_ruby_threads.rb
52
52
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
53
53
  - tests/bug_instance_post_differs_from_class_post.rb
54
+ - tests/bug_issue102.rb
54
55
  - tests/bug_multi_segfault.rb
55
56
  - tests/bug_postfields_crash.rb
56
57
  - tests/bug_postfields_crash2.rb
@@ -74,7 +75,7 @@ licenses: []
74
75
  post_install_message:
75
76
  rdoc_options:
76
77
  - --main
77
- - README
78
+ - README.markdown
78
79
  require_paths:
79
80
  - lib
80
81
  - ext
@@ -103,6 +104,7 @@ test_files:
103
104
  - tests/bug_curb_easy_blocks_ruby_threads.rb
104
105
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
105
106
  - tests/bug_instance_post_differs_from_class_post.rb
107
+ - tests/bug_issue102.rb
106
108
  - tests/bug_multi_segfault.rb
107
109
  - tests/bug_postfields_crash.rb
108
110
  - tests/bug_postfields_crash2.rb
data/README DELETED
@@ -1,194 +0,0 @@
1
- # Curb - Libcurl bindings for Ruby
2
-
3
- + [rubyforge rdoc](http://curb.rubyforge.org/)
4
- + [rubyforge project](http://rubyforge.org/projects/curb)
5
- + [github project](http://github.com/taf2/curb/tree/master)
6
-
7
- Curb (probably CUrl-RuBy or something) provides Ruby-language bindings for the
8
- libcurl(3), a fully-featured client-side URL transfer library.
9
- cURL and libcurl live at [http://curl.haxx.se/](http://curl.haxx.se/) .
10
-
11
- Curb is a work-in-progress, and currently only supports libcurl's 'easy' and 'multi' modes.
12
-
13
- ## License
14
-
15
- Curb is copyright (c)2006 Ross Bamford, and released under the terms of the
16
- Ruby license. See the LICENSE file for the gory details.
17
-
18
- ## You will need
19
-
20
- + A working Ruby installation (1.8+, tested with 1.8.6, 1.8.7, 1.9.1, and 1.9.2)
21
- + A working (lib)curl installation, with development stuff (7.5+, tested with 7.19.x)
22
- + A sane build environment (e.g. gcc, make)
23
-
24
- ## Installation...
25
-
26
- ... will usually be as simple as:
27
-
28
- $ gem install curb
29
-
30
- Or, if you downloaded the archive:
31
-
32
- $ rake install
33
-
34
- If you have a wierd setup, you might need extconf options. In this case, pass
35
- them like so:
36
-
37
- $ rake install EXTCONF_OPTS='--with-curl-dir=/path/to/libcurl --prefix=/what/ever'
38
-
39
- Curb is tested only on GNU/Linux x86 and Mac OSX - YMMV on other platforms.
40
- If you do use another platform and experience problems, or if you can
41
- expand on the above instructions, please report the issue at http://github.com/taf2/curb/issues
42
-
43
- On Ubuntu, the dependencies can be satisfied by installing the following packages:
44
-
45
- $ sudo apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev
46
-
47
- Curb has fairly extensive RDoc comments in the source. You can build the
48
- documentation with:
49
-
50
- $ rake doc
51
-
52
- ## Usage & examples
53
-
54
- Curb provides two classes:
55
-
56
- + Curl::Easy - simple API, for day-to-day tasks.
57
- + Curl::Multi - more advanced API, for operating on multiple URLs simultaneously.
58
-
59
- ### Super simple API (less typing)
60
-
61
- http = Curl.get("http://www.google.com/")
62
- puts http.body_str
63
-
64
- http = Curl.post("http://www.google.com/", {:foo => "bar"})
65
- puts http.body_str
66
-
67
- http = Curl.get("http://www.google.com/") do|http|
68
- http.headers['Cookie'] = 'foo=1;bar=2'
69
- end
70
- puts http.body_str
71
-
72
- ### Simple fetch via HTTP:
73
-
74
- c = Curl::Easy.perform("http://www.google.co.uk")
75
- puts c.body_str
76
-
77
- Same thing, more manual:
78
-
79
- c = Curl::Easy.new("http://www.google.co.uk")
80
- c.perform
81
- puts c.body_str
82
-
83
- ### Additional config:
84
-
85
- Curl::Easy.perform("http://www.google.co.uk") do |curl|
86
- curl.headers["User-Agent"] = "myapp-0.0"
87
- curl.verbose = true
88
- end
89
-
90
- Same thing, more manual:
91
-
92
- c = Curl::Easy.new("http://www.google.co.uk") do |curl|
93
- curl.headers["User-Agent"] = "myapp-0.0"
94
- curl.verbose = true
95
- end
96
-
97
- c.perform
98
-
99
- ### HTTP basic authentication:
100
-
101
- c = Curl::Easy.new("http://github.com/")
102
- c.http_auth_types = :basic
103
- c.username = 'foo'
104
- c.password = 'bar'
105
- c.perform
106
-
107
- ### Supplying custom handlers:
108
-
109
- c = Curl::Easy.new("http://www.google.co.uk")
110
-
111
- c.on_body { |data| print(data) }
112
- c.on_header { |data| print(data) }
113
-
114
- c.perform
115
-
116
- ### Reusing Curls:
117
-
118
- c = Curl::Easy.new
119
-
120
- ["http://www.google.co.uk", "http://www.ruby-lang.org/"].map do |url|
121
- c.url = url
122
- c.perform
123
- c.body_str
124
- end
125
-
126
- ### HTTP POST form:
127
-
128
- c = Curl::Easy.http_post("http://my.rails.box/thing/create",
129
- Curl::PostField.content('thing[name]', 'box'),
130
- Curl::PostField.content('thing[type]', 'storage'))
131
-
132
- ### HTTP POST file upload:
133
-
134
- c = Curl::Easy.new("http://my.rails.box/files/upload")
135
- c.multipart_form_post = true
136
- c.http_post(Curl::PostField.file('thing[file]', 'myfile.rb'))
137
-
138
- ### Multi Interface (Basic HTTP GET):
139
-
140
- # make multiple GET requests
141
- easy_options = {:follow_location => true}
142
- multi_options = {:pipeline => true}
143
-
144
- Curl::Multi.get('url1','url2','url3','url4','url5', easy_options, multi_options) do|easy|
145
- # do something interesting with the easy response
146
- puts easy.last_effective_url
147
- end
148
-
149
- ### Multi Interface (Basic HTTP POST):
150
-
151
- # make multiple POST requests
152
- easy_options = {:follow_location => true, :multipart_form_post => true}
153
- multi_options = {:pipeline => true}
154
-
155
- url_fields = [
156
- { :url => 'url1', :post_fields => {'f1' => 'v1'} },
157
- { :url => 'url2', :post_fields => {'f1' => 'v1'} },
158
- { :url => 'url3', :post_fields => {'f1' => 'v1'} }
159
- ]
160
-
161
- Curl::Multi.post(url_fields, easy_options, multi_options) do|easy|
162
- # do something interesting with the easy response
163
- puts easy.last_effective_url
164
- end
165
-
166
- ### Multi Interface (Advanced):
167
-
168
- responses = {}
169
- requests = ["http://www.google.co.uk/", "http://www.ruby-lang.org/"]
170
- m = Curl::Multi.new
171
- # add a few easy handles
172
- requests.each do |url|
173
- responses[url] = ""
174
- c = Curl::Easy.new(url) do|curl|
175
- curl.follow_location = true
176
- curl.on_body{|data| responses[url] << data; data.size }
177
- curl.on_success {|easy| puts "success, add more easy handles" }
178
- end
179
- m.add(c)
180
- end
181
-
182
- m.perform do
183
- puts "idling... can do some work here"
184
- end
185
-
186
- requests.each do|url|
187
- puts responses[url]
188
- end
189
-
190
- ### Easy Callbacks
191
-
192
- on_success: is called when the response code is 20x
193
- on_failure: is called when the response code is not success, including redirects e.g. 30x
194
- on_complete: is called in all cases.