reel 0.4.0 → 0.5.0.pre
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.
Potentially problematic release.
This version of reel might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +5 -2
- data/Gemfile +6 -0
- data/README.md +26 -16
- data/benchmarks/hello_reel.rb +1 -1
- data/benchmarks/reel_pool.rb +27 -0
- data/examples/hello_world.rb +2 -2
- data/examples/{ssl_hello_world.rb → https_hello_world.rb} +1 -1
- data/examples/roundtrip.rb +1 -1
- data/examples/server_sent_events.rb +22 -18
- data/examples/spy_hello_world.rb +22 -0
- data/examples/websockets.rb +3 -3
- data/lib/reel.rb +6 -9
- data/lib/reel/connection.rb +40 -42
- data/lib/reel/mixins.rb +3 -1
- data/lib/reel/request.rb +40 -9
- data/lib/reel/request/body.rb +65 -0
- data/lib/reel/request/info.rb +21 -0
- data/lib/reel/{request_parser.rb → request/parser.rb} +2 -2
- data/lib/reel/request/state_machine.rb +26 -0
- data/lib/reel/response.rb +4 -11
- data/lib/reel/response/writer.rb +59 -0
- data/lib/reel/server.rb +30 -6
- data/lib/reel/server/http.rb +20 -0
- data/lib/reel/server/https.rb +63 -0
- data/lib/reel/spy.rb +71 -0
- data/lib/reel/stream.rb +2 -2
- data/lib/reel/version.rb +2 -2
- data/lib/reel/websocket.rb +1 -1
- data/reel.gemspec +3 -3
- data/spec/fixtures/ca.crt +27 -0
- data/spec/fixtures/ca.key +27 -0
- data/spec/fixtures/client.crt +81 -20
- data/spec/fixtures/client.unsigned.crt +22 -0
- data/spec/fixtures/server.crt +80 -20
- data/spec/reel/connection_spec.rb +50 -11
- data/spec/reel/{server_spec.rb → http_server_spec.rb} +1 -1
- data/spec/reel/https_server_spec.rb +119 -0
- data/spec/reel/{response_writer_spec.rb → response/writer_spec.rb} +10 -2
- data/spec/reel/websocket_spec.rb +2 -2
- data/spec/spec_helper.rb +3 -34
- data/spec/support/example_request.rb +34 -0
- metadata +56 -43
- data/examples/chunked.rb +0 -25
- data/lib/reel/request_body.rb +0 -56
- data/lib/reel/request_info.rb +0 -19
- data/lib/reel/response_writer.rb +0 -76
- data/lib/reel/ssl_server.rb +0 -41
- data/spec/reel/ssl_server_spec.rb +0 -54
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
describe Reel::Server::HTTPS do
|
5
|
+
let(:example_https_port) { example_port + 1 }
|
6
|
+
let(:example_url) { "https://#{example_addr}:#{example_https_port}#{example_path}" }
|
7
|
+
let(:endpoint) { URI(example_url) }
|
8
|
+
let(:response_body) { "ohai thar" }
|
9
|
+
|
10
|
+
let(:ca_file) { fixture_dir.join('ca.crt').to_s }
|
11
|
+
|
12
|
+
let(:server_cert) { fixture_dir.join("server.crt") .read }
|
13
|
+
let(:server_key) { fixture_dir.join("server.key") .read }
|
14
|
+
let(:client_cert) { fixture_dir.join("client.crt") .read }
|
15
|
+
let(:client_cert_unsigned) { fixture_dir.join("client.unsigned.crt").read }
|
16
|
+
let(:client_key) { fixture_dir.join("client.key") .read }
|
17
|
+
|
18
|
+
it "receives HTTP requests and sends responses" do
|
19
|
+
ex = nil
|
20
|
+
|
21
|
+
handler = proc do |connection|
|
22
|
+
begin
|
23
|
+
request = connection.request
|
24
|
+
request.method.should eq 'GET'
|
25
|
+
request.version.should eq "1.1"
|
26
|
+
request.url.should eq example_path
|
27
|
+
|
28
|
+
connection.respond :ok, response_body
|
29
|
+
rescue => ex
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
with_reel_https_server(handler) do
|
34
|
+
http = Net::HTTP.new(endpoint.host, endpoint.port)
|
35
|
+
http.use_ssl = true
|
36
|
+
http.ca_file = self.ca_file
|
37
|
+
|
38
|
+
request = Net::HTTP::Get.new(endpoint.path)
|
39
|
+
response = http.request(request)
|
40
|
+
|
41
|
+
response.body.should eq response_body
|
42
|
+
end
|
43
|
+
|
44
|
+
raise ex if ex
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'verifies client SSL certs when provided with a CA' do
|
48
|
+
ex = nil
|
49
|
+
|
50
|
+
handler = proc do |connection|
|
51
|
+
begin
|
52
|
+
request = connection.request
|
53
|
+
request.method.should eq 'GET'
|
54
|
+
request.version.should eq '1.1'
|
55
|
+
request.url.should eq example_path
|
56
|
+
|
57
|
+
connection.respond :ok, response_body
|
58
|
+
rescue => ex
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
with_reel_https_server(handler, :ca_file => self.ca_file) do
|
63
|
+
http = Net::HTTP.new(endpoint.host, endpoint.port)
|
64
|
+
http.use_ssl = true
|
65
|
+
http.ca_file = self.ca_file
|
66
|
+
http.cert = OpenSSL::X509::Certificate.new self.client_cert
|
67
|
+
http.key = OpenSSL::PKey::RSA.new self.client_key
|
68
|
+
|
69
|
+
request = Net::HTTP::Get.new(endpoint.path)
|
70
|
+
response = http.request(request)
|
71
|
+
|
72
|
+
response.body.should eq response_body
|
73
|
+
end
|
74
|
+
|
75
|
+
raise ex if ex
|
76
|
+
end
|
77
|
+
|
78
|
+
it %{fails to verify client certificates that aren't signed} do
|
79
|
+
ex = nil
|
80
|
+
|
81
|
+
handler = proc do |connection|
|
82
|
+
begin
|
83
|
+
request = connection.request
|
84
|
+
request.method.should eq 'GET'
|
85
|
+
request.version.should eq '1.1'
|
86
|
+
request.url.should eq example_path
|
87
|
+
|
88
|
+
connection.respond :ok, response_body
|
89
|
+
rescue => ex
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
with_reel_https_server(handler, :ca_file => self.ca_file) do
|
94
|
+
http = Net::HTTP.new(endpoint.host, endpoint.port)
|
95
|
+
http.use_ssl = true
|
96
|
+
http.ca_file = self.ca_file
|
97
|
+
http.cert = OpenSSL::X509::Certificate.new self.client_cert_unsigned
|
98
|
+
http.key = OpenSSL::PKey::RSA.new self.client_key
|
99
|
+
|
100
|
+
request = Net::HTTP::Get.new(endpoint.path)
|
101
|
+
|
102
|
+
proc { http.request(request) }.should raise_error(OpenSSL::SSL::SSLError)
|
103
|
+
end
|
104
|
+
|
105
|
+
raise ex if ex
|
106
|
+
end
|
107
|
+
|
108
|
+
def with_reel_https_server(handler, options = {})
|
109
|
+
options = {
|
110
|
+
:cert => server_cert,
|
111
|
+
:key => server_key
|
112
|
+
}.merge(options)
|
113
|
+
|
114
|
+
server = described_class.new(example_addr, example_https_port, options, &handler)
|
115
|
+
yield server
|
116
|
+
ensure
|
117
|
+
server.terminate if server && server.alive?
|
118
|
+
end
|
119
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Reel::Response::Writer do
|
4
|
-
let(:fixture_path) { File.expand_path("
|
4
|
+
let(:fixture_path) { File.expand_path("../../../fixtures/example.txt", __FILE__) }
|
5
5
|
let(:expected_response) { "HTTP/1.1 200 OK\r\nContent-Length: 56\r\n\r\n#{File.read(fixture_path)}" }
|
6
|
+
|
6
7
|
it "streams static files" do
|
7
8
|
with_socket_pair do |socket, peer|
|
8
9
|
writer = described_class.new(socket)
|
@@ -12,7 +13,14 @@ describe Reel::Response::Writer do
|
|
12
13
|
writer.handle_response(response)
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
+
buf = ""
|
17
|
+
begin
|
18
|
+
buf << peer.read(95)
|
19
|
+
rescue IOError
|
20
|
+
# End of body!
|
21
|
+
end
|
22
|
+
|
23
|
+
expect(buf).to eq expected_response
|
16
24
|
end
|
17
25
|
end
|
18
26
|
end
|
data/spec/reel/websocket_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe Reel::WebSocket do
|
|
28
28
|
|
29
29
|
websocket = connection.request.websocket
|
30
30
|
websocket.should be_a Reel::WebSocket
|
31
|
-
expect { connection.close }.to raise_error(Reel::
|
31
|
+
expect { connection.close }.to raise_error(Reel::StateError)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -89,7 +89,7 @@ describe Reel::WebSocket do
|
|
89
89
|
websocket = request.websocket
|
90
90
|
websocket.should be_a Reel::WebSocket
|
91
91
|
|
92
|
-
expect { connection.remote_host }.to raise_error(Reel::
|
92
|
+
expect { connection.remote_host }.to raise_error(Reel::StateError)
|
93
93
|
websocket.remote_host.should == remote_host
|
94
94
|
end
|
95
95
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,8 @@ require 'bundler/setup'
|
|
5
5
|
require 'reel'
|
6
6
|
require 'pry'
|
7
7
|
|
8
|
+
require 'support/example_request'
|
9
|
+
|
8
10
|
logfile = File.open(File.expand_path("../../log/test.log", __FILE__), 'a')
|
9
11
|
Celluloid.logger = Logger.new(logfile)
|
10
12
|
|
@@ -18,7 +20,7 @@ def example_path; "/example"; end
|
|
18
20
|
def example_url; "http://#{example_addr}:#{example_port}#{example_path}"; end
|
19
21
|
|
20
22
|
def with_reel(handler)
|
21
|
-
server = Reel::Server.new(example_addr, example_port, &handler)
|
23
|
+
server = Reel::Server::HTTP.new(example_addr, example_port, &handler)
|
22
24
|
yield server
|
23
25
|
ensure
|
24
26
|
server.terminate if server && server.alive?
|
@@ -41,39 +43,6 @@ def with_socket_pair
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
44
|
-
class ExampleRequest
|
45
|
-
extend Forwardable
|
46
|
-
def_delegators :@headers, :[], :[]=
|
47
|
-
attr_accessor :method, :path, :version, :body
|
48
|
-
|
49
|
-
def initialize(method = :get, path = "/", version = "1.1", headers = {}, body = nil)
|
50
|
-
@method = method.to_s.upcase
|
51
|
-
@path = path
|
52
|
-
@version = "1.1"
|
53
|
-
@headers = {
|
54
|
-
'Host' => 'www.example.com',
|
55
|
-
'Connection' => 'keep-alive',
|
56
|
-
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 S',
|
57
|
-
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
58
|
-
'Accept-Encoding' => 'gzip,deflate,sdch',
|
59
|
-
'Accept-Language' => 'en-US,en;q=0.8',
|
60
|
-
'Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
|
61
|
-
}.merge(headers)
|
62
|
-
|
63
|
-
@body = nil
|
64
|
-
end
|
65
|
-
|
66
|
-
def to_s
|
67
|
-
if @body && !@headers['Content-Length']
|
68
|
-
@headers['Content-Length'] = @body.length
|
69
|
-
end
|
70
|
-
|
71
|
-
"#{@method} #{@path} HTTP/#{@version}\r\n" <<
|
72
|
-
@headers.map { |k, v| "#{k}: #{v}" }.join("\r\n") << "\r\n\r\n" <<
|
73
|
-
(@body ? @body : '')
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
46
|
module WebSocketHelpers
|
78
47
|
def self.included(spec)
|
79
48
|
spec.instance_eval do
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
class ExampleRequest
|
4
|
+
extend Forwardable
|
5
|
+
def_delegators :@headers, :[], :[]=
|
6
|
+
attr_accessor :method, :path, :version, :body
|
7
|
+
|
8
|
+
def initialize(method = :get, path = "/", version = "1.1", headers = {}, body = nil)
|
9
|
+
@method = method.to_s.upcase
|
10
|
+
@path = path
|
11
|
+
@version = "1.1"
|
12
|
+
@headers = {
|
13
|
+
'Host' => 'www.example.com',
|
14
|
+
'Connection' => 'keep-alive',
|
15
|
+
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 S',
|
16
|
+
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
17
|
+
'Accept-Encoding' => 'gzip,deflate,sdch',
|
18
|
+
'Accept-Language' => 'en-US,en;q=0.8',
|
19
|
+
'Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
|
20
|
+
}.merge(headers)
|
21
|
+
|
22
|
+
@body = body
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
if @body && !@headers['Content-Length']
|
27
|
+
@headers['Content-Length'] = @body.length
|
28
|
+
end
|
29
|
+
|
30
|
+
"#{@method} #{@path} HTTP/#{@version}\r\n" <<
|
31
|
+
@headers.map { |k, v| "#{k}: #{v}" }.join("\r\n") << "\r\n\r\n" <<
|
32
|
+
(@body ? @body : '')
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,113 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.15.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.15.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: celluloid-io
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.15.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.15.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: http
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.5.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: http_parser.rb
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.6.0
|
61
|
+
version: 0.6.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.6.0
|
68
|
+
version: 0.6.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: websocket_parser
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1.
|
75
|
+
version: 0.1.6
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.1.
|
82
|
+
version: 0.1.6
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 2.11.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 2.11.0
|
111
111
|
description: A Celluloid::IO-powered HTTP server
|
112
112
|
email:
|
113
113
|
- tony.arcieri@gmail.com
|
@@ -115,10 +115,10 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- .coveralls.yml
|
119
|
-
- .gitignore
|
120
|
-
- .rspec
|
121
|
-
- .travis.yml
|
118
|
+
- ".coveralls.yml"
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- ".travis.yml"
|
122
122
|
- CHANGES.md
|
123
123
|
- Gemfile
|
124
124
|
- Guardfile
|
@@ -128,42 +128,50 @@ files:
|
|
128
128
|
- benchmarks/hello_goliath.rb
|
129
129
|
- benchmarks/hello_node.js
|
130
130
|
- benchmarks/hello_reel.rb
|
131
|
-
-
|
131
|
+
- benchmarks/reel_pool.rb
|
132
132
|
- examples/hello_world.rb
|
133
|
+
- examples/https_hello_world.rb
|
133
134
|
- examples/roundtrip.rb
|
134
135
|
- examples/server_sent_events.rb
|
135
|
-
- examples/
|
136
|
+
- examples/spy_hello_world.rb
|
136
137
|
- examples/websockets.rb
|
137
138
|
- lib/reel.rb
|
138
139
|
- lib/reel/connection.rb
|
139
140
|
- lib/reel/logger.rb
|
140
141
|
- lib/reel/mixins.rb
|
141
142
|
- lib/reel/request.rb
|
142
|
-
- lib/reel/
|
143
|
-
- lib/reel/
|
144
|
-
- lib/reel/
|
143
|
+
- lib/reel/request/body.rb
|
144
|
+
- lib/reel/request/info.rb
|
145
|
+
- lib/reel/request/parser.rb
|
146
|
+
- lib/reel/request/state_machine.rb
|
145
147
|
- lib/reel/response.rb
|
146
|
-
- lib/reel/
|
148
|
+
- lib/reel/response/writer.rb
|
147
149
|
- lib/reel/server.rb
|
148
|
-
- lib/reel/
|
150
|
+
- lib/reel/server/http.rb
|
151
|
+
- lib/reel/server/https.rb
|
152
|
+
- lib/reel/spy.rb
|
149
153
|
- lib/reel/stream.rb
|
150
154
|
- lib/reel/version.rb
|
151
155
|
- lib/reel/websocket.rb
|
152
156
|
- log/.gitignore
|
153
157
|
- logo.png
|
154
158
|
- reel.gemspec
|
159
|
+
- spec/fixtures/ca.crt
|
160
|
+
- spec/fixtures/ca.key
|
155
161
|
- spec/fixtures/client.crt
|
156
162
|
- spec/fixtures/client.key
|
163
|
+
- spec/fixtures/client.unsigned.crt
|
157
164
|
- spec/fixtures/example.txt
|
158
165
|
- spec/fixtures/server.crt
|
159
166
|
- spec/fixtures/server.key
|
160
167
|
- spec/reel/connection_spec.rb
|
168
|
+
- spec/reel/http_server_spec.rb
|
169
|
+
- spec/reel/https_server_spec.rb
|
170
|
+
- spec/reel/response/writer_spec.rb
|
161
171
|
- spec/reel/response_spec.rb
|
162
|
-
- spec/reel/response_writer_spec.rb
|
163
|
-
- spec/reel/server_spec.rb
|
164
|
-
- spec/reel/ssl_server_spec.rb
|
165
172
|
- spec/reel/websocket_spec.rb
|
166
173
|
- spec/spec_helper.rb
|
174
|
+
- spec/support/example_request.rb
|
167
175
|
- tasks/rspec.rake
|
168
176
|
homepage: https://github.com/celluloid/reel
|
169
177
|
licenses: []
|
@@ -174,30 +182,35 @@ require_paths:
|
|
174
182
|
- lib
|
175
183
|
required_ruby_version: !ruby/object:Gem::Requirement
|
176
184
|
requirements:
|
177
|
-
- -
|
185
|
+
- - ">="
|
178
186
|
- !ruby/object:Gem::Version
|
179
187
|
version: '0'
|
180
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
189
|
requirements:
|
182
|
-
- -
|
190
|
+
- - ">"
|
183
191
|
- !ruby/object:Gem::Version
|
184
|
-
version:
|
192
|
+
version: 1.3.1
|
185
193
|
requirements: []
|
186
194
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.0
|
195
|
+
rubygems_version: 2.2.0
|
188
196
|
signing_key:
|
189
197
|
specification_version: 4
|
190
198
|
summary: A Reel good HTTP server
|
191
199
|
test_files:
|
200
|
+
- spec/fixtures/ca.crt
|
201
|
+
- spec/fixtures/ca.key
|
192
202
|
- spec/fixtures/client.crt
|
193
203
|
- spec/fixtures/client.key
|
204
|
+
- spec/fixtures/client.unsigned.crt
|
194
205
|
- spec/fixtures/example.txt
|
195
206
|
- spec/fixtures/server.crt
|
196
207
|
- spec/fixtures/server.key
|
197
208
|
- spec/reel/connection_spec.rb
|
209
|
+
- spec/reel/http_server_spec.rb
|
210
|
+
- spec/reel/https_server_spec.rb
|
211
|
+
- spec/reel/response/writer_spec.rb
|
198
212
|
- spec/reel/response_spec.rb
|
199
|
-
- spec/reel/response_writer_spec.rb
|
200
|
-
- spec/reel/server_spec.rb
|
201
|
-
- spec/reel/ssl_server_spec.rb
|
202
213
|
- spec/reel/websocket_spec.rb
|
203
214
|
- spec/spec_helper.rb
|
215
|
+
- spec/support/example_request.rb
|
216
|
+
has_rdoc:
|