curb-openuri 0.1.0 → 0.2.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.
- data/Rakefile +2 -11
- data/VERSION.yml +3 -2
- data/curb-openuri.gemspec +4 -4
- data/lib/curl_agent.rb +32 -2
- data/spec/curl_agent_spec.rb +23 -3
- data/spec/spec_helper.rb +2 -6
- metadata +23 -9
data/Rakefile
CHANGED
@@ -24,16 +24,7 @@ Rake::RDocTask.new do |rdoc|
|
|
24
24
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
25
25
|
end
|
26
26
|
|
27
|
-
require '
|
28
|
-
|
29
|
-
t.libs << 'lib' << 'spec'
|
30
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
31
|
-
end
|
32
|
-
|
33
|
-
Spec::Rake::SpecTask.new(:rcov) do |t|
|
34
|
-
t.libs << 'lib' << 'spec'
|
35
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
36
|
-
t.rcov = true
|
37
|
-
end
|
27
|
+
require 'rspec/core/rake_task'
|
28
|
+
RSpec::Core::RakeTask.new
|
38
29
|
|
39
30
|
task :default => :spec
|
data/VERSION.yml
CHANGED
data/curb-openuri.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{curb-openuri}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roman Shterenzon"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-11-10}
|
13
13
|
s.description = %q{open-uri drop-in replacement that uses curb}
|
14
14
|
s.email = %q{romanbsd@yahoo.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.homepage = %q{http://github.com/romanbsd/curb-openuri}
|
33
33
|
s.rdoc_options = ["--charset=UTF-8"]
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = %q{1.3.
|
35
|
+
s.rubygems_version = %q{1.3.7}
|
36
36
|
s.summary = %q{open-uri drop-in replacement that uses curb}
|
37
37
|
s.test_files = [
|
38
38
|
"spec/curb_openuri_spec.rb",
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
|
|
44
44
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
45
|
s.specification_version = 3
|
46
46
|
|
47
|
-
if Gem::Version.new(Gem::
|
47
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
48
|
s.add_runtime_dependency(%q<curb>, [">= 0.1.4"])
|
49
49
|
else
|
50
50
|
s.add_dependency(%q<curb>, [">= 0.1.4"])
|
data/lib/curl_agent.rb
CHANGED
@@ -76,7 +76,9 @@ class CurlAgent
|
|
76
76
|
agent = CurlAgent.new(name, options)
|
77
77
|
|
78
78
|
agent.perform!
|
79
|
-
io =
|
79
|
+
io = IO.new(agent.body_str, agent.header_str)
|
80
|
+
io.base_uri = URI.parse(agent.last_effective_url) rescue nil
|
81
|
+
io.status = [agent.response_code, '']
|
80
82
|
if block
|
81
83
|
block.call(io)
|
82
84
|
else
|
@@ -93,4 +95,32 @@ class CurlAgent
|
|
93
95
|
end
|
94
96
|
return mode, perm, rest
|
95
97
|
end
|
96
|
-
|
98
|
+
|
99
|
+
class IO < StringIO
|
100
|
+
# returns an Array which consists status code and message.
|
101
|
+
attr_accessor :status
|
102
|
+
|
103
|
+
# returns a URI which is base of relative URIs in the data.
|
104
|
+
# It may differ from the URI supplied by a user because redirection.
|
105
|
+
attr_accessor :base_uri
|
106
|
+
|
107
|
+
def initialize(body_str, header_str)
|
108
|
+
super(body_str)
|
109
|
+
@header_str = header_str
|
110
|
+
end
|
111
|
+
|
112
|
+
# returns a Hash which represents header fields.
|
113
|
+
# The Hash keys are downcased for canonicalization.
|
114
|
+
def meta
|
115
|
+
@meta ||= begin
|
116
|
+
arr = @header_str.split(/\r?\n/)
|
117
|
+
arr.shift
|
118
|
+
arr.inject({}) do |hash, hdr|
|
119
|
+
key, val = hdr.split(/:\s+/, 2)
|
120
|
+
hash[key.downcase] = val
|
121
|
+
hash
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/spec/curl_agent_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
describe "CurlAgent" do
|
4
5
|
|
@@ -62,6 +63,7 @@ EOF
|
|
62
63
|
describe 'when used with open' do
|
63
64
|
before(:each) do
|
64
65
|
@headers = {'User-Agent'=>'foo'}
|
66
|
+
@url = 'http://www.example.com/'
|
65
67
|
@curl_easy = mock('curl_easy')
|
66
68
|
Curl::Easy.should_receive(:new).and_return(@curl_easy)
|
67
69
|
@curl_easy.stub!(:headers).and_return(@headers)
|
@@ -72,23 +74,41 @@ EOF
|
|
72
74
|
@curl_easy.stub!(:timeout=)
|
73
75
|
@curl_easy.stub!(:perform)
|
74
76
|
@curl_easy.stub!(:body_str).and_return('test')
|
77
|
+
@curl_easy.stub!(:response_code).and_return(200)
|
78
|
+
@curl_easy.stub!(:last_effective_url).and_return(@url)
|
79
|
+
@curl_easy.stub!(:header_str).and_return("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nServer: Apache")
|
75
80
|
end
|
76
81
|
|
77
82
|
it 'shall permit to specify user-agent' do
|
78
83
|
@curl_easy.headers['User-Agent'].should_not == 'curl'
|
79
|
-
CurlAgent.open(
|
84
|
+
CurlAgent.open(@url, 'User-Agent'=>'curl')
|
80
85
|
@curl_easy.headers['User-Agent'].should == 'curl'
|
81
86
|
end
|
82
87
|
|
83
88
|
it 'shall permit to override timeout' do
|
84
89
|
@curl_easy.should_receive(:'timeout=').once.with(10)
|
85
|
-
CurlAgent.open(
|
90
|
+
CurlAgent.open(@url, :timeout => 10)
|
86
91
|
end
|
87
92
|
|
88
93
|
it 'shall use block when provided' do
|
89
|
-
CurlAgent.open(
|
94
|
+
CurlAgent.open(@url) {|f| f.read}.should == 'test'
|
90
95
|
end
|
91
96
|
|
97
|
+
it 'shall return io object which responds to base_uri' do
|
98
|
+
io = CurlAgent.open(@url)
|
99
|
+
io.should respond_to(:base_uri)
|
100
|
+
io.base_uri.should be_a_kind_of(URI)
|
101
|
+
io.base_uri.to_s.should == @url
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'shall return io object which responds to meta' do
|
105
|
+
io = CurlAgent.open(@url)
|
106
|
+
io.should respond_to(:meta)
|
107
|
+
meta = io.meta
|
108
|
+
meta.should be_a_kind_of(Hash)
|
109
|
+
meta.should have(2).keys
|
110
|
+
meta['server'].should == 'Apache'
|
111
|
+
end
|
92
112
|
end
|
93
113
|
|
94
114
|
describe 'when parsing parameters to open' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curb-openuri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Roman Shterenzon
|
@@ -9,19 +14,24 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-11-10 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: curb
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 1
|
31
|
+
- 4
|
23
32
|
version: 0.1.4
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
description: open-uri drop-in replacement that uses curb
|
26
36
|
email: romanbsd@yahoo.com
|
27
37
|
executables: []
|
@@ -53,21 +63,25 @@ rdoc_options:
|
|
53
63
|
require_paths:
|
54
64
|
- lib
|
55
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
56
67
|
requirements:
|
57
68
|
- - ">="
|
58
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
59
72
|
version: "0"
|
60
|
-
version:
|
61
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
62
75
|
requirements:
|
63
76
|
- - ">="
|
64
77
|
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 0
|
65
80
|
version: "0"
|
66
|
-
version:
|
67
81
|
requirements: []
|
68
82
|
|
69
83
|
rubyforge_project:
|
70
|
-
rubygems_version: 1.3.
|
84
|
+
rubygems_version: 1.3.7
|
71
85
|
signing_key:
|
72
86
|
specification_version: 3
|
73
87
|
summary: open-uri drop-in replacement that uses curb
|