taf2-curb 0.2.7.3 → 0.2.7.4

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.
data/Rakefile CHANGED
@@ -4,11 +4,11 @@ require 'rake/clean'
4
4
  require 'rake/testtask'
5
5
  require 'rake/rdoctask'
6
6
 
7
- begin
8
- require 'rake/gempackagetask'
9
- rescue LoadError
10
- $stderr.puts("Rubygems support disabled")
11
- end
7
+ #begin
8
+ # require 'rake/gempackagetask'
9
+ #rescue LoadError
10
+ # $stderr.puts("Rubygems support disabled")
11
+ #end
12
12
 
13
13
  CLEAN.include '**/*.o'
14
14
  CLEAN.include "**/*.#{Config::MAKEFILE_CONFIG['DLEXT']}"
@@ -130,74 +130,30 @@ task :doc_upload => [ :doc ] do
130
130
  end
131
131
  end
132
132
 
133
- # Packaging ------------------------------------------------
134
- PKG_FILES = FileList[
135
- 'ext/*.rb',
136
- 'ext/*.c',
137
- 'ext/*.h',
138
- 'lib/*.rb',
139
- 'tests/**/*',
140
- 'samples/**/*',
141
- 'doc.rb',
142
- '[A-Z]*',
143
- ]
144
-
145
133
  if ! defined?(Gem)
146
134
  warn "Package Target requires RubyGEMs"
147
135
  else
148
- spec = Gem::Specification.new do |s|
149
-
150
- #### Basic information.
151
-
152
- s.name = 'curb'
153
- s.version = PKG_VERSION
154
- s.summary = "Ruby bindings for the libcurl(3) URL transfer library."
155
- s.description = <<-EOF
156
- C-language Ruby bindings for the libcurl(3) URL transfer library.
157
- EOF
158
- s.extensions = 'ext/extconf.rb'
159
-
160
- #### Which files are to be included in this gem?
161
-
162
- s.files = PKG_FILES.to_a
163
-
164
- #### Load-time details
165
- s.require_path = 'lib'
166
-
167
- #### Documentation and testing.
168
- s.has_rdoc = true
169
- s.extra_rdoc_files = Dir['ext/*.c'] << 'lib/curb.rb' << 'README' << 'LICENSE'
170
- s.rdoc_options <<
171
- '--title' << 'Curb API' <<
172
- '--main' << 'README'
173
-
174
- s.test_files = Dir.glob('tests/tc_*.rb')
175
-
176
- #### Author and project details.
177
-
178
- s.author = "Ross Bamford"
179
- s.email = "curb-devel@rubyforge.org"
180
- s.homepage = "http://curb.rubyforge.org"
181
- s.rubyforge_project = "curb"
182
- end
183
-
184
- # Quick fix for Ruby 1.8.3 / YAML bug
185
- if (RUBY_VERSION == '1.8.3')
186
- def spec.to_yaml
187
- out = super
188
- out = '--- ' + out unless out =~ /^---/
189
- out
190
- end
136
+ desc 'Generate gem specification'
137
+ task :gemspec do
138
+ require 'erb'
139
+ tspec = ERB.new(File.read(File.join(File.dirname(__FILE__),'lib','curb.gemspec.erb')))
140
+ File.open(File.join(File.dirname(__FILE__),'curb.gemspec'),'wb') do|f|
141
+ f << tspec.result
142
+ end
191
143
  end
192
144
 
193
- package_task = Rake::GemPackageTask.new(spec) do |pkg|
194
- pkg.need_zip = true
195
- pkg.need_tar_gz = true
196
- pkg.package_dir = 'pkg'
197
- end
145
+ desc 'Build gem'
146
+ task :package => :gemspec do
147
+ require 'rubygems/specification'
148
+ spec_source = File.read File.join(File.dirname(__FILE__),'curb.gemspec')
149
+ spec = nil
150
+ # see: http://gist.github.com/16215
151
+ Thread.new { spec = eval("$SAFE = 3\n#{spec_source}") }.join
152
+ spec.validate
153
+ Gem::Builder.new(spec).build
154
+ end
198
155
  end
199
156
 
200
-
201
157
  # --------------------------------------------------------------------
202
158
  # Creating a release
203
159
  desc "Make a new release (Requires SVN commit / webspace access)"
data/ext/curb.h CHANGED
@@ -20,12 +20,12 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.2.7.2"
23
+ #define CURB_VERSION "0.2.7.4"
24
24
  #define CURB_VER_NUM 224
25
25
  #define CURB_VER_MAJ 0
26
26
  #define CURB_VER_MIN 2
27
- #define CURB_VER_MIC 4
28
- #define CURB_VER_PATCH 0
27
+ #define CURB_VER_MIC 7
28
+ #define CURB_VER_PATCH 4
29
29
 
30
30
 
31
31
  // Maybe not yet defined in Ruby
data/tests/alltests.rb ADDED
@@ -0,0 +1,3 @@
1
+ $: << $TESTDIR = File.expand_path(File.dirname(__FILE__))
2
+ require 'unittests'
3
+ Dir[File.join($TESTDIR, 'bug_*.rb')].each { |lib| require lib }
@@ -0,0 +1,52 @@
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
+ require 'webrick'
3
+ class ::WEBrick::HTTPServer ; def access_log(config, req, res) ; end ; end
4
+ class ::WEBrick::BasicLog ; def log(level, data) ; end ; end
5
+
6
+ class BugTestInstancePostDiffersFromClassPost < Test::Unit::TestCase
7
+ def test_bug
8
+ server = WEBrick::HTTPServer.new( :Port => 9999 )
9
+ server.mount_proc("/test") do|req,res|
10
+ sleep 0.5
11
+ res.body = "hi"
12
+ res['Content-Type'] = "text/html"
13
+ end
14
+
15
+ thread = Thread.new(server) do|srv|
16
+ srv.start
17
+ end
18
+
19
+ threads = []
20
+ timer = Time.now
21
+
22
+ 5.times do |i|
23
+ t = Thread.new do
24
+ c = Curl::Easy.perform('http://localhost:9999/test')
25
+ c.header_str
26
+ end
27
+ threads << t
28
+ end
29
+
30
+ multi_responses = threads.collect do|t|
31
+ t.value
32
+ end
33
+
34
+ multi_time = (Time.now - timer)
35
+ puts "requested in #{multi_time}"
36
+
37
+ timer = Time.now
38
+ single_responses = []
39
+ 5.times do |i|
40
+ c = Curl::Easy.perform('http://localhost:9999/test')
41
+ single_responses << c.header_str
42
+ end
43
+
44
+ single_time = (Time.now - timer)
45
+ puts "requested in #{single_time}"
46
+
47
+ assert single_time > multi_time
48
+
49
+ server.shutdown
50
+ thread.join
51
+ end
52
+ end
@@ -0,0 +1,53 @@
1
+ # From Vlad Jebelev:
2
+ #
3
+ # - Second thing - I think you just probably didn't have the time to update
4
+ # instance methods yet but when I POST with a reusal of a previous curl
5
+ # instance, it doesnt' work for me, e.g. when I create a curl previously and
6
+ # then issue:
7
+ #
8
+ # c.http_post(login_url, *fields)
9
+ #
10
+ # instead of:
11
+ #
12
+ # c = Curl::Easy.http_post(login_url, *fields) do |curl|
13
+ # ...
14
+ # end
15
+ #
16
+ # then the result I am getting is quite different.
17
+ #
18
+ # ================
19
+ #
20
+ # Update:
21
+ #
22
+ # It seems that class httpost is incorrectly passing arguments down to
23
+ # instance httppost. This bug is intermittent, but results in an
24
+ # exception from the first post when it occurs.
25
+ #
26
+ require File.join(File.dirname(__FILE__), 'helper')
27
+
28
+ class BugTestInstancePostDiffersFromClassPost < Test::Unit::TestCase
29
+ def test_bug
30
+ 5.times do |i|
31
+ puts "Test ##{i}"
32
+ do_test
33
+ sleep 2
34
+ end
35
+ end
36
+
37
+ def do_test
38
+ c = Curl::Easy.http_post('https://www.google.com/accounts/ServiceLoginAuth',
39
+ Curl::PostField.content('ltmpl','m_blanco'))
40
+ body_c, header_c = c.body_str, c.header_str
41
+
42
+ sleep 2
43
+
44
+ c.http_post('https://www.google.com/accounts/ServiceLoginAuth',
45
+ Curl::PostField.content('ltmpl','m_blanco'))
46
+ body_i, header_i = c.body_str, c.header_str
47
+
48
+ # timestamps will differ, just check first bit. We wont get here if
49
+ # the bug bites anyway...
50
+ assert_equal header_c[0..50], header_i[0..50]
51
+ end
52
+ end
53
+
@@ -0,0 +1,40 @@
1
+ # From Vlad Jebelev:
2
+ #
3
+ # - if I have a require statement after "require 'curb'" and there is a
4
+ # POST with at least 1 field, the script will fail with a segmentation
5
+ # fault, e.g. the following sequence fails every time for me (Ruby 1.8.5):
6
+ # -----------------------------------------------------------------
7
+ # require 'curb'
8
+ # require 'uri'
9
+ #
10
+ # url = 'https://www.google.com/accounts/ServiceLoginAuth'
11
+ #
12
+ # c = Curl::Easy.http_post(
13
+ # 'https://www.google.com/accounts/ServiceLoginAuth',
14
+ # [Curl:: PostField.content('ltmpl','m_blanco')] ) do |curl|
15
+ # end
16
+ # ------------------------------------------------------------------
17
+ # :..dev/util$ ruby seg.rb
18
+ # seg.rb:6: [BUG] Segmentation fault
19
+ # ruby 1.8.5 (2006-08-25) [i686-linux]
20
+ #
21
+ # Aborted
22
+ # ------------------------------------------------------------------
23
+ #
24
+ require 'test/unit'
25
+ require 'rbconfig'
26
+
27
+ $rubycmd = Config::CONFIG['RUBY_INSTALL_NAME'] || 'ruby'
28
+
29
+ class BugTestRequireLastOrSegfault < Test::Unit::TestCase
30
+ def test_bug
31
+ 5.times do |i|
32
+ puts "Test ##{i}"
33
+
34
+ # will be empty string if it segfaults...
35
+ assert_equal 'success', `#$rubycmd #{File.dirname(__FILE__)}/require_last_or_segfault_script.rb`.chomp
36
+ sleep 5
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,36 @@
1
+ # From Vlad Jebelev:
2
+ #
3
+ # - if I have a require statement after "require 'curb'" and there is a
4
+ # POST with at least 1 field, the script will fail with a segmentation
5
+ # fault, e.g. the following sequence fails every time for me (Ruby 1.8.5):
6
+ # -----------------------------------------------------------------
7
+ # require 'curb'
8
+ # require 'uri'
9
+ #
10
+ # url = 'https://www.google.com/accounts/ServiceLoginAuth'
11
+ #
12
+ # c = Curl::Easy.http_post(
13
+ # 'https://www.google.com/accounts/ServiceLoginAuth',
14
+ # [Curl:: PostField.content('ltmpl','m_blanco')] ) do |curl|
15
+ # end
16
+ # ------------------------------------------------------------------
17
+ # :..dev/util$ ruby seg.rb
18
+ # seg.rb:6: [BUG] Segmentation fault
19
+ # ruby 1.8.5 (2006-08-25) [i686-linux]
20
+ #
21
+ # Aborted
22
+ # ------------------------------------------------------------------
23
+ #
24
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'ext'))
25
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
26
+ require 'curb'
27
+ require 'uri'
28
+
29
+ url = 'https://www.google.com/accounts/ServiceLoginAuth'
30
+
31
+ c = Curl::Easy.http_post('https://www.google.com/accounts/ServiceLoginAuth',
32
+ Curl:: PostField.content('ltmpl','m_blanco')) #do
33
+ # end
34
+
35
+ puts "success"
36
+
@@ -0,0 +1,27 @@
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
+
3
+ class TestCurbCurlDownload < Test::Unit::TestCase
4
+ include TestServerMethods
5
+
6
+ def setup
7
+ server_setup(9130)
8
+ end
9
+
10
+ def test_download_url_to_file
11
+ dl_url = "http://127.0.0.1:9130/ext/curb_easy.c"
12
+ dl_path = File.join("/tmp/dl_url_test.file")
13
+
14
+ curb = Curl::Easy.download(dl_url, dl_path)
15
+ assert File.exist?(dl_path)
16
+ end
17
+
18
+ def test_download_bad_url_gives_404
19
+ dl_url = "http://127.0.0.1:9130/this_file_does_not_exist.html"
20
+ dl_path = File.join("/tmp/dl_url_test.file")
21
+
22
+ curb = Curl::Easy.download(dl_url, dl_path)
23
+ assert_equal Curl::Easy, curb.class
24
+ assert_equal 404, curb.response_code
25
+ end
26
+
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taf2-curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7.3
4
+ version: 0.2.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-11-03 00:00:00 -08:00
13
+ date: 2009-02-22 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -28,20 +28,21 @@ files:
28
28
  - README
29
29
  - Rakefile
30
30
  - doc.rb
31
- - ext/curb.h
31
+ - ext/extconf.rb
32
+ - lib/curb.rb
33
+ - lib/curl.rb
34
+ - ext/curb.c
35
+ - ext/curb_postfield.c
36
+ - ext/curb_multi.c
37
+ - ext/curb_errors.c
38
+ - ext/curb_easy.c
32
39
  - ext/curb_easy.h
33
40
  - ext/curb_errors.h
34
41
  - ext/curb_macros.h
35
- - ext/curb_multi.h
42
+ - ext/curb.h
36
43
  - ext/curb_postfield.h
37
- - ext/curb.c
38
- - ext/curb_easy.c
39
- - ext/curb_errors.c
40
- - ext/curb_multi.c
41
- - ext/curb_postfield.c
42
- - lib/curl.rb
43
- - ext/extconf.rb
44
- - lib/curb.rb
44
+ - ext/curb_config.h
45
+ - ext/curb_multi.h
45
46
  has_rdoc: true
46
47
  homepage: http://curb.rubyforge.org/
47
48
  post_install_message:
@@ -49,6 +50,7 @@ rdoc_options:
49
50
  - --main
50
51
  - README
51
52
  require_paths:
53
+ - lib
52
54
  - ext
53
55
  required_ruby_version: !ruby/object:Gem::Requirement
54
56
  requirements:
@@ -70,8 +72,14 @@ signing_key:
70
72
  specification_version: 2
71
73
  summary: Ruby libcurl bindings
72
74
  test_files:
73
- - tests/tc_curl_easy.rb
74
75
  - tests/tc_curl_multi.rb
75
76
  - tests/tc_curl_postfield.rb
77
+ - tests/bug_curb_easy_blocks_ruby_threads.rb
76
78
  - tests/unittests.rb
79
+ - tests/bug_require_last_or_segfault.rb
80
+ - tests/bug_instance_post_differs_from_class_post.rb
81
+ - tests/tc_curl_download.rb
82
+ - tests/alltests.rb
77
83
  - tests/helper.rb
84
+ - tests/tc_curl_easy.rb
85
+ - tests/require_last_or_segfault_script.rb