hugs 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rvmrc +1 -1
- data/Gemfile +1 -11
- data/Gemfile.lock +13 -13
- data/README.md +1 -1
- data/Rakefile +3 -17
- data/hugs.gemspec +21 -70
- data/lib/hugs/client.rb +9 -3
- data/lib/hugs/version.rb +3 -0
- data/test/lib/hugs/client_test.rb +173 -151
- data/test/test_helper.rb +7 -4
- metadata +25 -73
- data/VERSION +0 -1
data/.gitignore
ADDED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm ruby-1.9.2-
|
1
|
+
rvm ruby-1.9.2-p136@hugs
|
data/Gemfile
CHANGED
@@ -1,13 +1,3 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
gem "nokogiri", "~> 1.4.4"
|
5
|
-
gem "net-http-persistent", "~> 1.4.1"
|
6
|
-
gem "multipart-post", "~> 1.0.1"
|
7
|
-
|
8
|
-
group :development, :test do
|
9
|
-
gem "rake"
|
10
|
-
gem "jeweler", "~> 1.5.1"
|
11
|
-
gem "minitest", "~> 2.0.0"
|
12
|
-
gem "webmock", "1.6.1"
|
13
|
-
end
|
3
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
hugs (2.3.0)
|
5
|
+
multipart-post (~> 1.0.1)
|
6
|
+
net-http-persistent (~> 1.4.1)
|
7
|
+
nokogiri (~> 1.4.4)
|
8
|
+
yajl-ruby (~> 0.7.9)
|
9
|
+
|
1
10
|
GEM
|
2
11
|
remote: http://rubygems.org/
|
3
12
|
specs:
|
4
13
|
addressable (2.2.2)
|
5
14
|
crack (0.1.8)
|
6
|
-
git (1.2.5)
|
7
|
-
jeweler (1.5.2)
|
8
|
-
bundler (~> 1.0.0)
|
9
|
-
git (>= 1.2.5)
|
10
|
-
rake
|
11
15
|
minitest (2.0.2)
|
12
16
|
multipart-post (1.0.1)
|
13
17
|
net-http-persistent (1.4.1)
|
@@ -16,17 +20,13 @@ GEM
|
|
16
20
|
webmock (1.6.1)
|
17
21
|
addressable (>= 2.2.2)
|
18
22
|
crack (>= 0.1.7)
|
19
|
-
yajl-ruby (0.7.
|
23
|
+
yajl-ruby (0.7.9)
|
20
24
|
|
21
25
|
PLATFORMS
|
22
26
|
ruby
|
23
27
|
|
24
28
|
DEPENDENCIES
|
25
|
-
|
26
|
-
minitest
|
27
|
-
multipart-post (~> 1.0.1)
|
28
|
-
net-http-persistent (~> 1.4.1)
|
29
|
-
nokogiri (~> 1.4.4)
|
29
|
+
hugs!
|
30
|
+
minitest
|
30
31
|
rake
|
31
|
-
webmock
|
32
|
-
yajl-ruby (~> 0.7.8)
|
32
|
+
webmock
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,23 +1,9 @@
|
|
1
|
-
require "
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require "jeweler"
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "hugs"
|
8
|
-
gem.summary = %Q{Hugs net-http-persistent with convenient get, delete, post, and put methods.}
|
9
|
-
gem.email = "john@dewey.ws"
|
10
|
-
gem.homepage = "http://github.com/retr0h/hugs"
|
11
|
-
gem.authors = ["retr0h"]
|
12
|
-
end
|
13
|
-
Jeweler::GemcutterTasks.new
|
14
|
-
rescue LoadError
|
15
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
16
|
-
end
|
1
|
+
require "bundler"
|
2
|
+
Bundler::GemHelper.install_tasks
|
17
3
|
|
18
4
|
require "rake/testtask"
|
19
5
|
Rake::TestTask.new(:test) do |test|
|
20
|
-
test.libs << "lib" << "test"
|
6
|
+
test.libs << "./lib" << "./test"
|
21
7
|
test.pattern = "test/**/*_test.rb"
|
22
8
|
test.verbose = true
|
23
9
|
end
|
data/hugs.gemspec
CHANGED
@@ -1,78 +1,29 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "hugs/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
6
|
+
s.name = "hugs"
|
7
|
+
s.version = Hugs::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["John Dewey"]
|
10
|
+
s.email = ["john@dewey.ws"]
|
11
|
+
s.homepage = %q{http://github.com/retr0h/hugs}
|
12
|
+
s.summary = %q{Hugs net-http-persistent with convenient get, delete, post, and put methods.}
|
9
13
|
|
10
|
-
s.
|
11
|
-
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
"LICENSE",
|
16
|
-
"README.md"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".rvmrc",
|
20
|
-
"Gemfile",
|
21
|
-
"Gemfile.lock",
|
22
|
-
"LICENSE",
|
23
|
-
"README.md",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"hugs.gemspec",
|
27
|
-
"lib/hugs.rb",
|
28
|
-
"lib/hugs/client.rb",
|
29
|
-
"lib/hugs/errors.rb",
|
30
|
-
"test/lib/hugs/client_test.rb",
|
31
|
-
"test/lib/hugs/errors_test.rb",
|
32
|
-
"test/test_helper.rb"
|
33
|
-
]
|
34
|
-
s.homepage = %q{http://github.com/retr0h/hugs}
|
14
|
+
s.rubyforge_project = "hugs"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
35
19
|
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.3.7}
|
37
|
-
s.summary = %q{Hugs net-http-persistent with convenient get, delete, post, and put methods.}
|
38
|
-
s.test_files = [
|
39
|
-
"test/lib/hugs/client_test.rb",
|
40
|
-
"test/lib/hugs/errors_test.rb",
|
41
|
-
"test/test_helper.rb"
|
42
|
-
]
|
43
20
|
|
44
|
-
|
45
|
-
|
46
|
-
|
21
|
+
s.add_dependency "yajl-ruby", "~> 0.7.9"
|
22
|
+
s.add_dependency "nokogiri", "~> 1.4.4"
|
23
|
+
s.add_dependency "net-http-persistent", "~> 1.4.1"
|
24
|
+
s.add_dependency "multipart-post", "~> 1.0.1"
|
47
25
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
s.add_runtime_dependency(%q<net-http-persistent>, ["~> 1.4.1"])
|
52
|
-
s.add_runtime_dependency(%q<multipart-post>, ["~> 1.0.1"])
|
53
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
54
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
55
|
-
s.add_development_dependency(%q<minitest>, ["~> 2.0.0"])
|
56
|
-
s.add_development_dependency(%q<webmock>, ["= 1.6.1"])
|
57
|
-
else
|
58
|
-
s.add_dependency(%q<yajl-ruby>, ["~> 0.7.8"])
|
59
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.4.4"])
|
60
|
-
s.add_dependency(%q<net-http-persistent>, ["~> 1.4.1"])
|
61
|
-
s.add_dependency(%q<multipart-post>, ["~> 1.0.1"])
|
62
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
63
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
64
|
-
s.add_dependency(%q<minitest>, ["~> 2.0.0"])
|
65
|
-
s.add_dependency(%q<webmock>, ["= 1.6.1"])
|
66
|
-
end
|
67
|
-
else
|
68
|
-
s.add_dependency(%q<yajl-ruby>, ["~> 0.7.8"])
|
69
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.4.4"])
|
70
|
-
s.add_dependency(%q<net-http-persistent>, ["~> 1.4.1"])
|
71
|
-
s.add_dependency(%q<multipart-post>, ["~> 1.0.1"])
|
72
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
73
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
74
|
-
s.add_dependency(%q<minitest>, ["~> 2.0.0"])
|
75
|
-
s.add_dependency(%q<webmock>, ["= 1.6.1"])
|
76
|
-
end
|
26
|
+
s.add_development_dependency "rake"
|
27
|
+
s.add_development_dependency "webmock"
|
28
|
+
s.add_development_dependency "minitest"
|
77
29
|
end
|
78
|
-
|
data/lib/hugs/client.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
|
1
|
+
require "hugs/errors"
|
2
|
+
|
3
|
+
require "net/http/persistent"
|
4
|
+
require "net/http/post/multipart"
|
5
|
+
require "nokogiri"
|
6
|
+
require "yajl"
|
2
7
|
|
3
8
|
module Hugs
|
4
9
|
class Client
|
5
10
|
attr_accessor :headers
|
6
|
-
attr_accessor :raise_4xx, :raise_5xx
|
7
|
-
attr_writer :raise_4xx, :raise_5xx
|
11
|
+
attr_accessor :raise_4xx, :raise_5xx, :debug
|
12
|
+
attr_writer :raise_4xx, :raise_5xx, :debug
|
8
13
|
|
9
14
|
Headers = {
|
10
15
|
:json => "application/json",
|
@@ -79,6 +84,7 @@ module Hugs
|
|
79
84
|
upload = params[:upload] && params.delete(:upload)
|
80
85
|
|
81
86
|
@http ||= Net::HTTP::Persistent.new
|
87
|
+
@http.debug_output = $stdout if debug
|
82
88
|
@url ||= URI.parse "#{@scheme}://#{@host}:#{@port}"
|
83
89
|
|
84
90
|
full_path = path_with_query path, query
|
data/lib/hugs/version.rb
ADDED
@@ -1,232 +1,254 @@
|
|
1
|
-
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
require "base64"
|
2
4
|
|
3
5
|
describe Hugs::Client do
|
4
6
|
before do
|
5
7
|
@instance = Hugs::Client.new valid_options
|
8
|
+
@request = Net::HTTP::Get
|
6
9
|
|
7
10
|
WebMock.reset!
|
8
11
|
end
|
9
12
|
|
10
|
-
describe "
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "path" do
|
16
|
-
it "is valid" do
|
17
|
-
stub_request :get, url
|
13
|
+
describe "path" do
|
14
|
+
it "is valid" do
|
15
|
+
stub_request :get, url
|
18
16
|
|
19
|
-
|
17
|
+
@instance.send :response_for, @request, "/", {}
|
20
18
|
|
21
|
-
|
22
|
-
|
19
|
+
assert_requested :get, url
|
20
|
+
end
|
23
21
|
|
24
|
-
|
25
|
-
|
22
|
+
it "is valid when an invalid :query is supplied" do
|
23
|
+
stub_request :get, url
|
26
24
|
|
27
|
-
|
25
|
+
@instance.send :response_for, @request, "/", :query => nil
|
28
26
|
|
29
|
-
|
30
|
-
|
27
|
+
assert_requested :get, url
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
30
|
+
it "also has a query string" do
|
31
|
+
stub_request(:get, url).with:query => {"foo" => "bar"}
|
34
32
|
|
35
|
-
|
33
|
+
@instance.send :response_for, @request, "/", :query => "foo=bar"
|
36
34
|
|
37
|
-
|
38
|
-
end
|
35
|
+
assert_requested :get, url, :query => {"foo" => "bar"}
|
39
36
|
end
|
37
|
+
end
|
40
38
|
|
41
|
-
|
42
|
-
|
39
|
+
describe "multi-part" do
|
40
|
+
Content_Type_Matcher = %r{multipart/form-data}
|
43
41
|
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
before do
|
43
|
+
@request = Net::HTTP::Post
|
44
|
+
end
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
}
|
46
|
+
it "uploads a file" do
|
47
|
+
stub_request :post, url
|
48
|
+
upload = {
|
49
|
+
:upload => {
|
50
|
+
:parts => { :file => "/dev/null" },
|
51
|
+
:content_type => "type/subtype"
|
55
52
|
}
|
53
|
+
}
|
56
54
|
|
57
|
-
|
55
|
+
@instance.send :response_for, @request, "/", upload
|
58
56
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
57
|
+
assert_requested :post, url, :body => %r{Content-Type: type/subtype}, :headers => {
|
58
|
+
"Content-Type" => Content_Type_Matcher
|
59
|
+
}
|
60
|
+
end
|
63
61
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
}
|
62
|
+
it "has parts" do
|
63
|
+
stub_request :post, url
|
64
|
+
upload = {
|
65
|
+
:upload => {
|
66
|
+
:parts => { :foo => :bar, :baz => :xyzzy },
|
67
|
+
:content_type => "foo/bar"
|
71
68
|
}
|
69
|
+
}
|
72
70
|
|
73
|
-
|
71
|
+
@instance.send :response_for, @request, "/", upload
|
74
72
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
73
|
+
### wtf can't use mx together.
|
74
|
+
content_disposition_matcher = %r{^Content-Disposition: form-data; name="foo".*^bar.*^Content-Disposition: form-data; name="baz".*^xyzzy.*}m
|
75
|
+
assert_requested :post, url, :body => content_disposition_matcher, :headers => {
|
76
|
+
"Content-Type" => Content_Type_Matcher
|
77
|
+
}
|
81
78
|
end
|
79
|
+
end
|
82
80
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
81
|
+
describe "body" do
|
82
|
+
describe "parses response" do
|
83
|
+
describe "json" do
|
84
|
+
it "objectifies and returns a hash" do
|
85
|
+
stub_request(:get, url).to_return :body => '{"foo":"bar"}'
|
86
|
+
instance = Hugs::Client.new valid_options(:type => :json)
|
89
87
|
|
90
|
-
|
88
|
+
response = instance.get "/"
|
91
89
|
|
92
|
-
|
93
|
-
end
|
90
|
+
response.body.must_be_kind_of Hash
|
94
91
|
end
|
92
|
+
end
|
95
93
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
94
|
+
describe "xml" do
|
95
|
+
it "parses and returns a Nokogiri object" do
|
96
|
+
stub_request(:get, url).to_return :body => "<STORAGE></STORAGE>"
|
97
|
+
instance = Hugs::Client.new valid_options(:type => :xml)
|
100
98
|
|
101
|
-
|
99
|
+
response = instance.get "/"
|
102
100
|
|
103
|
-
|
104
|
-
end
|
101
|
+
response.body.must_be_kind_of Nokogiri::XML::Document
|
105
102
|
end
|
106
103
|
end
|
104
|
+
end
|
107
105
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
106
|
+
describe "encodes request" do
|
107
|
+
before do
|
108
|
+
stub_request :get, url
|
109
|
+
end
|
112
110
|
|
113
|
-
|
114
|
-
|
111
|
+
it "is not set when :body invalid" do
|
112
|
+
@instance.send :response_for, @request, "/", :body => nil
|
115
113
|
|
116
|
-
|
117
|
-
|
114
|
+
assert_requested :get, url, :body => nil
|
115
|
+
end
|
118
116
|
|
119
|
-
|
120
|
-
|
117
|
+
it "is not set when :body is missing" do
|
118
|
+
@instance.send :response_for, @request, "/", {}
|
121
119
|
|
122
|
-
|
123
|
-
|
120
|
+
assert_requested :get, url, {}
|
121
|
+
end
|
124
122
|
|
125
|
-
|
126
|
-
|
127
|
-
|
123
|
+
describe "json" do
|
124
|
+
it "is valid" do
|
125
|
+
instance = Hugs::Client.new valid_options(:type => :json)
|
128
126
|
|
129
|
-
|
127
|
+
instance.send :response_for, @request, "/", :body => {:foo => :bar}
|
130
128
|
|
131
|
-
|
132
|
-
end
|
129
|
+
assert_requested :get, url, :body => '{"foo":"bar"}'
|
133
130
|
end
|
131
|
+
end
|
134
132
|
|
135
|
-
|
136
|
-
|
137
|
-
|
133
|
+
describe "xml" do
|
134
|
+
it "is valid" do
|
135
|
+
instance = Hugs::Client.new valid_options(:type => :xml)
|
138
136
|
|
139
|
-
|
137
|
+
instance.send :response_for, @request, "/", :body => "foo bar"
|
140
138
|
|
141
|
-
|
142
|
-
end
|
139
|
+
assert_requested :get, url, :body => "foo bar"
|
143
140
|
end
|
144
141
|
end
|
145
142
|
end
|
143
|
+
end
|
146
144
|
|
145
|
+
describe "headers" do
|
146
|
+
describe "authentication" do
|
147
|
+
it "uses basic auth when providing user and password" do
|
148
|
+
stub_request :get, url("/", "user:credentials")
|
149
|
+
instance = Hugs::Client.new valid_options(:user => "user", :password => "credentials")
|
147
150
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
stub_request :get, url("/", "user:credentials")
|
152
|
-
instance = Hugs::Client.new valid_options(:user => "user", :password => "credentials")
|
153
|
-
|
154
|
-
instance.send :response_for, @request, "/", {}
|
155
|
-
assert_requested :get, url("/", "user:credentials")
|
156
|
-
end
|
151
|
+
instance.send :response_for, @request, "/", {}
|
152
|
+
assert_requested :get, url("/", "user:credentials")
|
153
|
+
end
|
157
154
|
|
158
|
-
|
159
|
-
|
160
|
-
|
155
|
+
it "doesn't use basic auth without a user" do
|
156
|
+
assert_doesnt_use_basic_auth_without :user
|
157
|
+
end
|
161
158
|
|
162
|
-
|
163
|
-
|
164
|
-
end
|
159
|
+
it "doesn't use basic auth without a password" do
|
160
|
+
assert_doesnt_use_basic_auth_without :password
|
165
161
|
end
|
162
|
+
end
|
166
163
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
164
|
+
describe "JSON" do
|
165
|
+
it "supports json GET" do
|
166
|
+
assert_supports_http_verb :json, :get
|
167
|
+
end
|
171
168
|
|
172
|
-
|
173
|
-
|
174
|
-
|
169
|
+
it "supports json DELETE" do
|
170
|
+
assert_supports_http_verb :json, :delete
|
171
|
+
end
|
175
172
|
|
176
|
-
|
177
|
-
|
178
|
-
|
173
|
+
it "supports json POST" do
|
174
|
+
assert_supports_http_verb :json, :post
|
175
|
+
end
|
179
176
|
|
180
|
-
|
181
|
-
|
182
|
-
end
|
177
|
+
it "supports json PUT" do
|
178
|
+
assert_supports_http_verb :json, :put
|
183
179
|
end
|
180
|
+
end
|
184
181
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
182
|
+
describe "XML" do
|
183
|
+
it "supports xml GET" do
|
184
|
+
assert_supports_http_verb :xml, :get
|
185
|
+
end
|
189
186
|
|
190
|
-
|
191
|
-
|
192
|
-
|
187
|
+
it "supports xml DELETE" do
|
188
|
+
assert_supports_http_verb :xml, :delete
|
189
|
+
end
|
193
190
|
|
194
|
-
|
195
|
-
|
196
|
-
|
191
|
+
it "supports xml POST" do
|
192
|
+
assert_supports_http_verb :xml, :post
|
193
|
+
end
|
197
194
|
|
198
|
-
|
199
|
-
|
200
|
-
end
|
195
|
+
it "supports xml PUT" do
|
196
|
+
assert_supports_http_verb :xml, :put
|
201
197
|
end
|
202
198
|
end
|
199
|
+
end
|
203
200
|
|
204
|
-
|
205
|
-
|
206
|
-
|
201
|
+
describe "debug_output" do
|
202
|
+
before do
|
203
|
+
@instance = Hugs::Client.new valid_options(
|
204
|
+
:host => "gist.github.com",
|
205
|
+
:port => "80"
|
206
|
+
)
|
207
207
|
|
208
|
-
|
208
|
+
WebMock.allow_net_connect!
|
209
|
+
end
|
209
210
|
|
210
|
-
|
211
|
+
it "outputs net/http debug data" do
|
212
|
+
@instance.debug = true
|
211
213
|
|
212
|
-
|
213
|
-
instance = Hugs::Client.new valid_options(:type => type)
|
214
|
+
out, err = capture_io { @instance.send :response_for, Net::HTTP::Get, "/api/v1/json/374130", {} }
|
214
215
|
|
215
|
-
|
216
|
+
out.wont_be_empty
|
217
|
+
end
|
216
218
|
|
217
|
-
|
218
|
-
|
219
|
+
it "does not output net/http debug data" do
|
220
|
+
out, err = capture_io { @instance.send :response_for, Net::HTTP::Get, "/api/v1/json/374130", {} }
|
219
221
|
|
220
|
-
|
222
|
+
out.must_be_empty
|
221
223
|
end
|
224
|
+
end
|
222
225
|
|
223
|
-
def assert_doesnt_use_basic_auth_without option
|
224
|
-
stub_request :get, url
|
225
|
-
instance = Hugs::Client.new valid_options(option => "value")
|
226
226
|
|
227
|
-
|
227
|
+
def assert_supports_http_verb type, verb
|
228
|
+
mimetype = {:xml => 'application/xml',
|
229
|
+
:json => 'application/json'}[type]
|
228
230
|
|
229
|
-
|
230
|
-
|
231
|
+
assert mimetype, "Unsupported Mimetype '#{type}'"
|
232
|
+
|
233
|
+
clazz = Net::HTTP.const_get verb.capitalize
|
234
|
+
|
235
|
+
stub_request verb, url
|
236
|
+
instance = Hugs::Client.new valid_options(:type => type)
|
237
|
+
|
238
|
+
instance.send :response_for, clazz, "/", {}
|
239
|
+
|
240
|
+
headers = { "Accept" => ["*/*", mimetype] }
|
241
|
+
headers["Content-Type"] = mimetype if [:put, :put].include? type
|
242
|
+
|
243
|
+
assert_requested verb, url, :headers => headers
|
244
|
+
end
|
245
|
+
|
246
|
+
def assert_doesnt_use_basic_auth_without option
|
247
|
+
stub_request :get, url
|
248
|
+
instance = Hugs::Client.new valid_options(option => "value")
|
249
|
+
|
250
|
+
instance.send :response_for, @request, "/", {}
|
251
|
+
|
252
|
+
assert_requested :get, url
|
231
253
|
end
|
232
254
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
require "bundler"
|
2
1
|
Bundler.setup :default, :test
|
3
2
|
|
4
|
-
|
3
|
+
require "hugs"
|
4
|
+
|
5
|
+
require "minitest/spec"
|
6
|
+
require "uri"
|
7
|
+
require "webmock"
|
5
8
|
|
6
9
|
class MiniTest::Unit::TestCase
|
7
10
|
include WebMock::API
|
@@ -10,12 +13,12 @@ class MiniTest::Unit::TestCase
|
|
10
13
|
{
|
11
14
|
:host => "example.com",
|
12
15
|
:port => 80,
|
13
|
-
:scheme => "
|
16
|
+
:scheme => "http"
|
14
17
|
}.merge opts
|
15
18
|
end
|
16
19
|
|
17
20
|
def url path = "/", credentials = nil
|
18
|
-
URI::
|
21
|
+
URI::HTTP.build(
|
19
22
|
valid_options(
|
20
23
|
:path => path,
|
21
24
|
:userinfo => credentials
|
metadata
CHANGED
@@ -1,161 +1,117 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hugs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 2
|
7
|
-
- 3
|
8
|
-
- 0
|
9
|
-
version: 2.3.0
|
4
|
+
prerelease:
|
5
|
+
version: 2.4.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
|
-
-
|
8
|
+
- John Dewey
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-02-20 00:00:00 -08:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
17
|
name: yajl-ruby
|
18
|
+
prerelease: false
|
22
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
20
|
none: false
|
24
21
|
requirements:
|
25
22
|
- - ~>
|
26
23
|
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 0
|
29
|
-
- 7
|
30
|
-
- 8
|
31
|
-
version: 0.7.8
|
24
|
+
version: 0.7.9
|
32
25
|
type: :runtime
|
33
|
-
prerelease: false
|
34
26
|
version_requirements: *id001
|
35
27
|
- !ruby/object:Gem::Dependency
|
36
28
|
name: nokogiri
|
29
|
+
prerelease: false
|
37
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
31
|
none: false
|
39
32
|
requirements:
|
40
33
|
- - ~>
|
41
34
|
- !ruby/object:Gem::Version
|
42
|
-
segments:
|
43
|
-
- 1
|
44
|
-
- 4
|
45
|
-
- 4
|
46
35
|
version: 1.4.4
|
47
36
|
type: :runtime
|
48
|
-
prerelease: false
|
49
37
|
version_requirements: *id002
|
50
38
|
- !ruby/object:Gem::Dependency
|
51
39
|
name: net-http-persistent
|
40
|
+
prerelease: false
|
52
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
42
|
none: false
|
54
43
|
requirements:
|
55
44
|
- - ~>
|
56
45
|
- !ruby/object:Gem::Version
|
57
|
-
segments:
|
58
|
-
- 1
|
59
|
-
- 4
|
60
|
-
- 1
|
61
46
|
version: 1.4.1
|
62
47
|
type: :runtime
|
63
|
-
prerelease: false
|
64
48
|
version_requirements: *id003
|
65
49
|
- !ruby/object:Gem::Dependency
|
66
50
|
name: multipart-post
|
51
|
+
prerelease: false
|
67
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
53
|
none: false
|
69
54
|
requirements:
|
70
55
|
- - ~>
|
71
56
|
- !ruby/object:Gem::Version
|
72
|
-
segments:
|
73
|
-
- 1
|
74
|
-
- 0
|
75
|
-
- 1
|
76
57
|
version: 1.0.1
|
77
58
|
type: :runtime
|
78
|
-
prerelease: false
|
79
59
|
version_requirements: *id004
|
80
60
|
- !ruby/object:Gem::Dependency
|
81
61
|
name: rake
|
62
|
+
prerelease: false
|
82
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
64
|
none: false
|
84
65
|
requirements:
|
85
66
|
- - ">="
|
86
67
|
- !ruby/object:Gem::Version
|
87
|
-
segments:
|
88
|
-
- 0
|
89
68
|
version: "0"
|
90
69
|
type: :development
|
91
|
-
prerelease: false
|
92
70
|
version_requirements: *id005
|
93
71
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
72
|
+
name: webmock
|
73
|
+
prerelease: false
|
95
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
96
75
|
none: false
|
97
76
|
requirements:
|
98
|
-
- -
|
77
|
+
- - ">="
|
99
78
|
- !ruby/object:Gem::Version
|
100
|
-
|
101
|
-
- 1
|
102
|
-
- 5
|
103
|
-
- 1
|
104
|
-
version: 1.5.1
|
79
|
+
version: "0"
|
105
80
|
type: :development
|
106
|
-
prerelease: false
|
107
81
|
version_requirements: *id006
|
108
82
|
- !ruby/object:Gem::Dependency
|
109
83
|
name: minitest
|
84
|
+
prerelease: false
|
110
85
|
requirement: &id007 !ruby/object:Gem::Requirement
|
111
86
|
none: false
|
112
87
|
requirements:
|
113
|
-
- -
|
88
|
+
- - ">="
|
114
89
|
- !ruby/object:Gem::Version
|
115
|
-
|
116
|
-
- 2
|
117
|
-
- 0
|
118
|
-
- 0
|
119
|
-
version: 2.0.0
|
90
|
+
version: "0"
|
120
91
|
type: :development
|
121
|
-
prerelease: false
|
122
92
|
version_requirements: *id007
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: webmock
|
125
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
126
|
-
none: false
|
127
|
-
requirements:
|
128
|
-
- - "="
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
segments:
|
131
|
-
- 1
|
132
|
-
- 6
|
133
|
-
- 1
|
134
|
-
version: 1.6.1
|
135
|
-
type: :development
|
136
|
-
prerelease: false
|
137
|
-
version_requirements: *id008
|
138
93
|
description:
|
139
|
-
email:
|
94
|
+
email:
|
95
|
+
- john@dewey.ws
|
140
96
|
executables: []
|
141
97
|
|
142
98
|
extensions: []
|
143
99
|
|
144
|
-
extra_rdoc_files:
|
145
|
-
|
146
|
-
- README.md
|
100
|
+
extra_rdoc_files: []
|
101
|
+
|
147
102
|
files:
|
103
|
+
- .gitignore
|
148
104
|
- .rvmrc
|
149
105
|
- Gemfile
|
150
106
|
- Gemfile.lock
|
151
107
|
- LICENSE
|
152
108
|
- README.md
|
153
109
|
- Rakefile
|
154
|
-
- VERSION
|
155
110
|
- hugs.gemspec
|
156
111
|
- lib/hugs.rb
|
157
112
|
- lib/hugs/client.rb
|
158
113
|
- lib/hugs/errors.rb
|
114
|
+
- lib/hugs/version.rb
|
159
115
|
- test/lib/hugs/client_test.rb
|
160
116
|
- test/lib/hugs/errors_test.rb
|
161
117
|
- test/test_helper.rb
|
@@ -173,21 +129,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
129
|
requirements:
|
174
130
|
- - ">="
|
175
131
|
- !ruby/object:Gem::Version
|
176
|
-
segments:
|
177
|
-
- 0
|
178
132
|
version: "0"
|
179
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
134
|
none: false
|
181
135
|
requirements:
|
182
136
|
- - ">="
|
183
137
|
- !ruby/object:Gem::Version
|
184
|
-
segments:
|
185
|
-
- 0
|
186
138
|
version: "0"
|
187
139
|
requirements: []
|
188
140
|
|
189
|
-
rubyforge_project:
|
190
|
-
rubygems_version: 1.
|
141
|
+
rubyforge_project: hugs
|
142
|
+
rubygems_version: 1.5.0
|
191
143
|
signing_key:
|
192
144
|
specification_version: 3
|
193
145
|
summary: Hugs net-http-persistent with convenient get, delete, post, and put methods.
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.3.0
|