segregate 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ebb52ffc2a9364921143e72be4e33c036fe241b
4
- data.tar.gz: 4dd0ee7bd05e7718fb57918f5ae416783a2266d5
3
+ metadata.gz: 7421d31435304199cb1032dbe326420d13a75a69
4
+ data.tar.gz: eea29b9926c873d0c66a2bbf6a9106aa847b2e5c
5
5
  SHA512:
6
- metadata.gz: 92bf21b2a568e476884189262dd195ab31487d4e3451104f492b4d0e8a8b62dc9897e85a718c812086c85edb5cf2d9574a4ca05b973407ad45c5665395d6b6e6
7
- data.tar.gz: 65eb168efe658013e9dfd428814792d3a4369c94c14b3ea52ae03f965a4492ec354381f505b61880fc6343f3411a7dc95c13e91cc85e19e7dbee04f489065f04
6
+ metadata.gz: 6d52b0c763d8705420c29d53722c70b74f84549fb5fafc426a4fb303b6057cd39b71b96904e413485027d226cf8d93840e0bde29469a8699efe609684576eb41
7
+ data.tar.gz: bdc263d1000ecaca777f3a808fb4c3e0ee6cbd3d93d87f3f2a0692611ba4a2e5312d2faf7336b3a7c5ff9ff0a092199602c54085f9573294b9661cc7b0cbac95
@@ -1,4 +1,4 @@
1
1
  class Segregate
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  DATE = "2014-02-03".freeze
4
4
  end
data/lib/segregate.rb CHANGED
@@ -18,7 +18,9 @@ class Segregate
18
18
  @uri.respond_to?(meth, include_private) || super
19
19
  end
20
20
 
21
- def initialize
21
+ def initialize callback = nil
22
+ @callback = callback
23
+
22
24
  @uri = nil
23
25
  @request_method = nil
24
26
  @status_code = nil
@@ -94,6 +96,7 @@ class Segregate
94
96
  end
95
97
 
96
98
  def read_first_line data
99
+ @callback.on_message_begin self if @callback.respond_to?(:on_message_begin)
97
100
  line = read data
98
101
 
99
102
  if line =~ REQUEST_LINE
@@ -114,6 +117,8 @@ class Segregate
114
117
  @request_method, url, @http_version[0], @http_version[1] = line.scan(REQUEST_LINE).flatten
115
118
  @http_version.map! {|v| v.to_i}
116
119
  @uri = URI.parse url
120
+
121
+ @callback.on_request_line self if @callback.respond_to?(:on_request_line)
117
122
  end
118
123
 
119
124
  def parse_status_line line
@@ -121,6 +126,8 @@ class Segregate
121
126
  @http_version[0], @http_version[1], code, @status_phrase = line.scan(STATUS_LINE).flatten
122
127
  @http_version.map! {|v| v.to_i}
123
128
  @status_code = code.to_i
129
+
130
+ @callback.on_status_line self if @callback.respond_to?(:on_status_line)
124
131
  end
125
132
 
126
133
  def read_headers data
@@ -134,6 +141,8 @@ class Segregate
134
141
  @header_order << key.downcase
135
142
  end
136
143
  end
144
+
145
+ @callback.on_headers_complete self if @callback.respond_to?(:on_headers_complete) && @headers_complete
137
146
  end
138
147
 
139
148
  def read_body data
@@ -142,6 +151,8 @@ class Segregate
142
151
  elsif headers['content-encoding'] == 'chunked'
143
152
  parse_chunked_data data
144
153
  end
154
+
155
+ @callback.on_body_complete self if @callback.respond_to?(:on_body_complete) && @body_complete
145
156
  end
146
157
 
147
158
  def parse_body data
@@ -396,4 +396,49 @@ describe Segregate do
396
396
  end
397
397
  end
398
398
  end
399
+
400
+ context 'a new parser has been created with a callback object' do
401
+ before(:each) do
402
+ @callback_object = double
403
+ @parser = Segregate.new @callback_object
404
+ end
405
+
406
+ describe 'on_message_begin' do
407
+ it 'calls the callback object' do
408
+ @callback_object.should_receive(:on_message_begin).with(@parser)
409
+ @parser.parse "GET /endpoint HTTP/1.1\r\n"
410
+ end
411
+ end
412
+
413
+ describe 'on_request' do
414
+ it 'calls the callback object' do
415
+ @callback_object.should_receive(:on_request_line).with(@parser)
416
+ @parser.parse "GET /endpoint HTTP/1.1\r\n"
417
+ end
418
+ end
419
+
420
+ describe 'on_response' do
421
+ it 'calls the callback object' do
422
+ @callback_object.should_receive(:on_status_line).with(@parser)
423
+ @parser.parse "HTTP/1.1 200 OK\r\n"
424
+ end
425
+ end
426
+
427
+ describe 'on_headers_complete' do
428
+ it 'calls the callback object' do
429
+ @callback_object.should_receive(:on_headers_complete).with(@parser)
430
+ @parser.parse "GET /endpoint HTTP/1.1\r\n"
431
+ @parser.parse "Host: www.google.com\r\n\r\n"
432
+ end
433
+ end
434
+
435
+ describe 'on_body_complete' do
436
+ it 'calls the callback object' do
437
+ @callback_object.should_receive(:on_body_complete).with(@parser)
438
+ @parser.parse "GET /endpoint HTTP/1.1\r\n"
439
+ @parser.parse "Content-Length: 8\r\n\r\n"
440
+ @parser.parse "TestData\r\n\r\n"
441
+ end
442
+ end
443
+ end
399
444
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: segregate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Slaughter