kronk 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +7 -0
- data/lib/kronk.rb +1 -1
- data/lib/kronk/request.rb +2 -5
- data/lib/kronk/response.rb +73 -40
- data/test/test_helper.rb +5 -0
- data/test/test_request.rb +5 -3
- data/test/test_response.rb +2 -1
- metadata +4 -16
data/History.rdoc
CHANGED
data/lib/kronk.rb
CHANGED
data/lib/kronk/request.rb
CHANGED
@@ -101,8 +101,7 @@ class Kronk
|
|
101
101
|
|
102
102
|
rescue Net::HTTPBadResponse
|
103
103
|
file.rewind
|
104
|
-
resp = HeadlessResponse.new file.read
|
105
|
-
resp['Content-Type'] = File.extname path
|
104
|
+
resp = HeadlessResponse.new file.read, File.extname(path)
|
106
105
|
end
|
107
106
|
end
|
108
107
|
|
@@ -235,9 +234,7 @@ class Kronk
|
|
235
234
|
use_cookies? options
|
236
235
|
|
237
236
|
resp.extend Response::Helpers
|
238
|
-
|
239
|
-
r_req, r_resp, r_bytes = Response.read_raw_from socket_io
|
240
|
-
resp.raw = r_resp
|
237
|
+
resp.set_helper_attribs socket_io
|
241
238
|
|
242
239
|
resp
|
243
240
|
end
|
data/lib/kronk/response.rb
CHANGED
@@ -21,65 +21,93 @@ class Kronk
|
|
21
21
|
end
|
22
22
|
|
23
23
|
resp.extend Helpers
|
24
|
-
|
25
|
-
r_req, r_resp, r_bytes = read_raw_from socket_io
|
26
|
-
resp.raw = r_resp
|
27
|
-
resp.instance_variable_set "@read", true
|
28
|
-
resp.instance_variable_set "@socket", true
|
29
|
-
|
30
|
-
resp.instance_variable_set "@body", resp.raw.split("\r\n\r\n",2)[1] if
|
31
|
-
!resp.body
|
24
|
+
resp.set_helper_attribs socket_io, true, true
|
32
25
|
|
33
26
|
resp
|
34
27
|
end
|
35
28
|
|
36
29
|
|
30
|
+
|
37
31
|
##
|
38
|
-
#
|
39
|
-
# containing the raw request, response, and number of bytes received.
|
32
|
+
# Helper methods for Net::HTTPResponse objects.
|
40
33
|
|
41
|
-
|
42
|
-
req = nil
|
43
|
-
resp = ""
|
44
|
-
bytes = nil
|
34
|
+
module Helpers
|
45
35
|
|
46
|
-
|
47
|
-
|
36
|
+
##
|
37
|
+
# Read the raw response from a debug_output instance and return an array
|
38
|
+
# containing the raw request, response, and number of bytes received.
|
48
39
|
|
49
|
-
|
50
|
-
req =
|
51
|
-
|
52
|
-
|
40
|
+
def read_raw_from debug_io
|
41
|
+
req = nil
|
42
|
+
resp = ""
|
43
|
+
bytes = nil
|
53
44
|
|
54
|
-
|
55
|
-
|
56
|
-
output.delete_at(-1)
|
57
|
-
end
|
45
|
+
debug_io.rewind
|
46
|
+
output = debug_io.read.split "\n"
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
48
|
+
if output.first =~ %r{<-\s(.*)}
|
49
|
+
req = instance_eval $1
|
50
|
+
output.delete_at 0
|
51
|
+
end
|
52
|
+
|
53
|
+
if output.last =~ %r{read (\d+) bytes}
|
54
|
+
bytes = $1.to_i
|
55
|
+
output.delete_at(-1)
|
56
|
+
end
|
57
|
+
|
58
|
+
output.map do |line|
|
59
|
+
next unless line[0..2] == "-> "
|
60
|
+
resp << instance_eval(line[2..-1])
|
61
|
+
end
|
62
|
+
|
63
|
+
[req, resp, bytes]
|
62
64
|
end
|
63
65
|
|
64
|
-
[req, resp, bytes]
|
65
|
-
end
|
66
66
|
|
67
|
+
##
|
68
|
+
# Instantiates helper attributes from the debug socket io.
|
67
69
|
|
68
|
-
|
69
|
-
|
70
|
+
def set_helper_attribs socket_io, socket=nil, body_read=nil
|
71
|
+
@raw = udpate_encoding read_raw_from(socket_io)[1]
|
72
|
+
|
73
|
+
@read = body_read unless body_read.nil?
|
74
|
+
@socket ||= socket
|
75
|
+
@body ||= @raw.split("\r\n\r\n",2)[1]
|
76
|
+
|
77
|
+
udpate_encoding @body
|
78
|
+
|
79
|
+
puts "#{@raw.length} - #{@body.length}" if
|
80
|
+
@raw.length == 0 && @body.length != 0
|
81
|
+
self
|
82
|
+
end
|
70
83
|
|
71
|
-
module Helpers
|
72
84
|
|
73
85
|
##
|
74
|
-
#
|
75
|
-
# if
|
86
|
+
# Returns the encoding provided in the Content-Type header or
|
87
|
+
# "binary" if charset is unavailable.
|
88
|
+
# Returns "utf-8" if no content type header is missing.
|
89
|
+
|
90
|
+
def encoding
|
91
|
+
content_types = self.to_hash["content-type"]
|
92
|
+
|
93
|
+
return "utf-8" if !content_types
|
76
94
|
|
77
|
-
|
78
|
-
|
79
|
-
value.force_encoding "binary"
|
95
|
+
content_types.each do |c_type|
|
96
|
+
return $2 if c_type =~ /(^|;\s?)charset=(.*?)\s*(;|$)/
|
80
97
|
end
|
81
98
|
|
82
|
-
|
99
|
+
"binary"
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
##
|
104
|
+
# Assigns self.encoding to the passed string if
|
105
|
+
# it responds to 'force_encoding'.
|
106
|
+
# Returns the string given with the new encoding.
|
107
|
+
|
108
|
+
def udpate_encoding str
|
109
|
+
str.force_encoding self.encoding if str.respond_to? :force_encoding
|
110
|
+
str
|
83
111
|
end
|
84
112
|
|
85
113
|
|
@@ -213,10 +241,15 @@ class Kronk
|
|
213
241
|
|
214
242
|
attr_accessor :body, :code
|
215
243
|
|
216
|
-
def initialize body
|
244
|
+
def initialize body, file_ext=nil
|
217
245
|
@body = body
|
218
246
|
@raw = body
|
219
|
-
|
247
|
+
|
248
|
+
encoding = body.encoding rescue "UTF-8"
|
249
|
+
|
250
|
+
@header = {
|
251
|
+
'Content-Type' => ["#{file_ext}; charset=#{encoding}"]
|
252
|
+
}
|
220
253
|
end
|
221
254
|
|
222
255
|
|
data/test/test_helper.rb
CHANGED
data/test/test_request.rb
CHANGED
@@ -324,7 +324,7 @@ class TestRequest < Test::Unit::TestCase
|
|
324
324
|
|
325
325
|
|
326
326
|
def test_call_ssl
|
327
|
-
expect_request "GET", "https://example.com" do |http, req, resp|
|
327
|
+
expr = expect_request "GET", "https://example.com" do |http, req, resp|
|
328
328
|
req.expects(:use_ssl=).with true
|
329
329
|
end
|
330
330
|
|
@@ -498,7 +498,8 @@ class TestRequest < Test::Unit::TestCase
|
|
498
498
|
def expect_request req_method, url, options={}
|
499
499
|
uri = URI.parse url
|
500
500
|
|
501
|
-
|
501
|
+
resp_io = StringIO.new(mock_200_response)
|
502
|
+
resp = Kronk::Response.read_new resp_io #mock 'resp'
|
502
503
|
resp.stubs(:code).returns(options[:status] || '200')
|
503
504
|
resp.stubs(:to_hash).returns Hash.new
|
504
505
|
|
@@ -524,9 +525,10 @@ class TestRequest < Test::Unit::TestCase
|
|
524
525
|
Net::HTTP.expects(:new).with(uri.host, uri.port).returns req
|
525
526
|
req.expects(:start).yields(http).returns resp
|
526
527
|
|
527
|
-
|
528
|
+
resp.expects(:read_raw_from).returns [nil, mock_200_response, nil]
|
528
529
|
|
529
530
|
yield http, req, resp if block_given?
|
531
|
+
|
530
532
|
resp
|
531
533
|
end
|
532
534
|
end
|
data/test/test_response.rb
CHANGED
@@ -33,7 +33,8 @@ class TestResponse < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
io = StringIO.new str
|
35
35
|
|
36
|
-
|
36
|
+
resp = Kronk::Response.read_new StringIO.new(mock_200_response)
|
37
|
+
req, resp, bytes = resp.read_raw_from io
|
37
38
|
|
38
39
|
assert_equal "mock debug request", req
|
39
40
|
assert_equal mock_200_response, resp
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kronk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 31
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
7
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
8
|
+
- 1
|
9
|
+
version: 1.2.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jeremie Castagna
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-21 00:00:00 -08:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 3
|
32
30
|
- 1
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 11
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 2
|
@@ -57,7 +54,6 @@ dependencies:
|
|
57
54
|
requirements:
|
58
55
|
- - ~>
|
59
56
|
- !ruby/object:Gem::Version
|
60
|
-
hash: 9
|
61
57
|
segments:
|
62
58
|
- 1
|
63
59
|
- 3
|
@@ -72,7 +68,6 @@ dependencies:
|
|
72
68
|
requirements:
|
73
69
|
- - ~>
|
74
70
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 1
|
76
71
|
segments:
|
77
72
|
- 0
|
78
73
|
- 5
|
@@ -87,7 +82,6 @@ dependencies:
|
|
87
82
|
requirements:
|
88
83
|
- - ">="
|
89
84
|
- !ruby/object:Gem::Version
|
90
|
-
hash: 15
|
91
85
|
segments:
|
92
86
|
- 2
|
93
87
|
- 0
|
@@ -103,7 +97,6 @@ dependencies:
|
|
103
97
|
requirements:
|
104
98
|
- - ~>
|
105
99
|
- !ruby/object:Gem::Version
|
106
|
-
hash: 19
|
107
100
|
segments:
|
108
101
|
- 0
|
109
102
|
- 3
|
@@ -119,7 +112,6 @@ dependencies:
|
|
119
112
|
requirements:
|
120
113
|
- - ~>
|
121
114
|
- !ruby/object:Gem::Version
|
122
|
-
hash: 15
|
123
115
|
segments:
|
124
116
|
- 1
|
125
117
|
- 0
|
@@ -134,7 +126,6 @@ dependencies:
|
|
134
126
|
requirements:
|
135
127
|
- - ">="
|
136
128
|
- !ruby/object:Gem::Version
|
137
|
-
hash: 7
|
138
129
|
segments:
|
139
130
|
- 2
|
140
131
|
- 0
|
@@ -150,7 +141,6 @@ dependencies:
|
|
150
141
|
requirements:
|
151
142
|
- - ~>
|
152
143
|
- !ruby/object:Gem::Version
|
153
|
-
hash: 47
|
154
144
|
segments:
|
155
145
|
- 0
|
156
146
|
- 9
|
@@ -166,7 +156,6 @@ dependencies:
|
|
166
156
|
requirements:
|
167
157
|
- - ">="
|
168
158
|
- !ruby/object:Gem::Version
|
169
|
-
hash: 19
|
170
159
|
segments:
|
171
160
|
- 2
|
172
161
|
- 6
|
@@ -229,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
229
218
|
requirements:
|
230
219
|
- - ">="
|
231
220
|
- !ruby/object:Gem::Version
|
232
|
-
hash:
|
221
|
+
hash: -195272185281626433
|
233
222
|
segments:
|
234
223
|
- 0
|
235
224
|
version: "0"
|
@@ -238,7 +227,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
238
227
|
requirements:
|
239
228
|
- - ">="
|
240
229
|
- !ruby/object:Gem::Version
|
241
|
-
hash: 3
|
242
230
|
segments:
|
243
231
|
- 0
|
244
232
|
version: "0"
|