halcyon 0.5.2 → 0.5.3
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 +6 -6
- data/lib/halcyon.rb +1 -1
- data/lib/halcyon/client.rb +5 -24
- data/spec/halcyon/client_spec.rb +14 -1
- metadata +7 -7
data/Rakefile
CHANGED
@@ -25,14 +25,14 @@ project = {
|
|
25
25
|
--exclude "^(_darcs|spec|pkg|.svn)/"
|
26
26
|
],
|
27
27
|
:dependencies => {
|
28
|
-
'json_pure' => '>=1.1.2',
|
29
|
-
'rack' => '>=0.
|
30
|
-
'extlib' => '>=0.9.
|
31
|
-
'merb' => '>=0.9.
|
32
|
-
'rubigen' => '>=1.2.4'
|
28
|
+
'json_pure' => '>= 1.1.2',
|
29
|
+
'rack' => '>= 0.4.0',
|
30
|
+
'extlib' => '>= 0.9.5',
|
31
|
+
'merb-core' => '>= 0.9.5',
|
32
|
+
'rubigen' => '>= 1.2.4'
|
33
33
|
},
|
34
34
|
:requirements => 'install the json gem to get faster JSON parsing',
|
35
|
-
:ruby_version_required => '>=1.8.6'
|
35
|
+
:ruby_version_required => '>= 1.8.6'
|
36
36
|
}
|
37
37
|
|
38
38
|
BASEDIR = File.expand_path(File.dirname(__FILE__))
|
data/lib/halcyon.rb
CHANGED
data/lib/halcyon/client.rb
CHANGED
@@ -41,8 +41,8 @@ module Halcyon
|
|
41
41
|
class Client
|
42
42
|
include Exceptions
|
43
43
|
|
44
|
-
USER_AGENT = "JSON/#{JSON::VERSION} Compatible (en-US) Halcyon::Client/#{Halcyon.version}"
|
45
|
-
CONTENT_TYPE =
|
44
|
+
USER_AGENT = "JSON/#{JSON::VERSION} Compatible (en-US) Halcyon::Client/#{Halcyon.version}".freeze
|
45
|
+
CONTENT_TYPE = "application/x-www-form-urlencoded".freeze
|
46
46
|
DEFAULT_OPTIONS = {
|
47
47
|
:raise_exceptions => false
|
48
48
|
}
|
@@ -162,8 +162,9 @@ module Halcyon
|
|
162
162
|
# exceptions specifically.
|
163
163
|
def request(req, headers={})
|
164
164
|
# set default headers
|
165
|
-
req["Content-Type"] = CONTENT_TYPE
|
166
165
|
req["User-Agent"] = USER_AGENT
|
166
|
+
req["Content-Type"] = CONTENT_TYPE unless req.body.nil?
|
167
|
+
req["Content-Length"] = req.body unless req.body.nil?
|
167
168
|
|
168
169
|
# apply provided headers
|
169
170
|
self.headers.merge(headers).each do |(header, value)|
|
@@ -193,27 +194,7 @@ module Halcyon
|
|
193
194
|
# format according to Net::HTTP for sending through as a Hash.
|
194
195
|
def format_body(data)
|
195
196
|
data = {:body => data} unless data.is_a? Hash
|
196
|
-
data
|
197
|
-
# Hash.to_params (from extlib) doesn't escape keys/values
|
198
|
-
build_query(data)
|
199
|
-
end
|
200
|
-
|
201
|
-
# Ported over from Rack::Utils.build_query which has not been released yet
|
202
|
-
# as of Halcyon 0.5.2's release.
|
203
|
-
#
|
204
|
-
# The key difference from this and extlib's Hash.to_params is
|
205
|
-
# that the keys and values are escaped (which cause many problems).
|
206
|
-
#
|
207
|
-
# TODO: Remove when Rack is released with Rack::Utils.build_query included.
|
208
|
-
#
|
209
|
-
def build_query(params)
|
210
|
-
params.map { |k, v|
|
211
|
-
if v.class == Array
|
212
|
-
build_query(v.map { |x| [k, x] })
|
213
|
-
else
|
214
|
-
Rack::Utils.escape(k) + "=" + Rack::Utils.escape(v)
|
215
|
-
end
|
216
|
-
}.join("&")
|
197
|
+
Rack::Utils.build_query(data)
|
217
198
|
end
|
218
199
|
|
219
200
|
end
|
data/spec/halcyon/client_spec.rb
CHANGED
@@ -62,9 +62,22 @@ describe "Halcyon::Client" do
|
|
62
62
|
|
63
63
|
it "should handle ampersands (and others) in POST data correctly" do
|
64
64
|
response = @client.post('/returner', :key => "value1&value2=0")
|
65
|
-
|
66
65
|
response[:status].should == 200
|
67
66
|
response[:body].should == {'controller' => 'application', 'action' => 'returner', 'key' => "value1&value2=0"}
|
67
|
+
|
68
|
+
response = @client.post('/returner', :key => "%todd")
|
69
|
+
response[:status].should == 200
|
70
|
+
response[:body].should == {'controller' => 'application', 'action' => 'returner', 'key' => "%todd"}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not handle percent signs in the URL that are not escaped" do
|
74
|
+
should.raise(EOFError){ @client.post('/returner?key=%todd') }
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should handle pre-escaped percent signs in the URLs" do
|
78
|
+
response = @client.post('/returner?key=%25todd')
|
79
|
+
response[:status].should == 200
|
80
|
+
response[:body].should == {'controller' => 'application', 'action' => 'returner', 'key' => "%todd"}
|
68
81
|
end
|
69
82
|
|
70
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halcyon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Todd
|
@@ -9,28 +9,28 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-28 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: merb-core
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.
|
23
|
+
version: 0.9.5
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
26
|
+
name: rack
|
27
27
|
type: :runtime
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.4.0
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: extlib
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.9.
|
43
|
+
version: 0.9.5
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: json_pure
|