mongrel2 0.38.0 → 0.39.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +6 -0
- data/Manifest.txt +5 -3
- data/Rakefile +2 -2
- data/data/mongrel2/config.sql +6 -1
- data/lib/mongrel2.rb +5 -2
- data/lib/mongrel2/config.rb +1 -0
- data/lib/mongrel2/config/server.rb +15 -0
- data/lib/mongrel2/config/xrequest.rb +45 -0
- data/lib/mongrel2/connection.rb +4 -5
- data/lib/mongrel2/control.rb +2 -2
- data/lib/mongrel2/handler.rb +1 -1
- data/spec/{lib/constants.rb → constants.rb} +0 -2
- data/spec/{lib/helpers.rb → helpers.rb} +9 -12
- data/spec/{lib/matchers.rb → matchers.rb} +2 -12
- data/spec/mongrel2/config/directory_spec.rb +16 -27
- data/spec/mongrel2/config/dsl_spec.rb +115 -98
- data/spec/mongrel2/config/filter_spec.rb +1 -12
- data/spec/mongrel2/config/handler_spec.rb +23 -33
- data/spec/mongrel2/config/host_spec.rb +1 -12
- data/spec/mongrel2/config/log_spec.rb +13 -24
- data/spec/mongrel2/config/proxy_spec.rb +1 -12
- data/spec/mongrel2/config/route_spec.rb +5 -15
- data/spec/mongrel2/config/server_spec.rb +23 -34
- data/spec/mongrel2/config/setting_spec.rb +1 -12
- data/spec/mongrel2/config/statistic_spec.rb +1 -12
- data/spec/mongrel2/config/xrequest_spec.rb +19 -0
- data/spec/mongrel2/config_spec.rb +17 -29
- data/spec/mongrel2/connection_spec.rb +41 -53
- data/spec/mongrel2/constants_spec.rb +2 -14
- data/spec/mongrel2/control_spec.rb +44 -56
- data/spec/mongrel2/handler_spec.rb +64 -76
- data/spec/mongrel2/httprequest_spec.rb +21 -31
- data/spec/mongrel2/httpresponse_spec.rb +55 -67
- data/spec/mongrel2/request_spec.rb +53 -62
- data/spec/mongrel2/response_spec.rb +15 -24
- data/spec/mongrel2/table_spec.rb +41 -53
- data/spec/mongrel2/websocket_spec.rb +95 -104
- data/spec/mongrel2_spec.rb +3 -12
- metadata +13 -11
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a891b9b342ed29169b81e8d5db135f3cd4d9e1b
|
4
|
+
data.tar.gz: 9467b6614c8df8892d0a6c027dfec33be3824843
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52c633d2fba86266d991f5f7d6cabd735b303406b6f3c96ae734f47a2dfc77e3b45a435a35de6a7abecea03ece007e2ae64e9040c9eff34b58bb60bbb27340a7
|
7
|
+
data.tar.gz: 943c432e477cccb2cde8feac08dd7f8574ee39961830f7f9f465d9b20c83f473e1b2b310854cb3ad7133da5ac1e2e139f12acc111c3a33a9d6a1a112e0eb1f9a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
data/Manifest.txt
CHANGED
@@ -38,6 +38,7 @@ lib/mongrel2/config/route.rb
|
|
38
38
|
lib/mongrel2/config/server.rb
|
39
39
|
lib/mongrel2/config/setting.rb
|
40
40
|
lib/mongrel2/config/statistic.rb
|
41
|
+
lib/mongrel2/config/xrequest.rb
|
41
42
|
lib/mongrel2/connection.rb
|
42
43
|
lib/mongrel2/constants.rb
|
43
44
|
lib/mongrel2/control.rb
|
@@ -52,9 +53,9 @@ lib/mongrel2/table.rb
|
|
52
53
|
lib/mongrel2/testing.rb
|
53
54
|
lib/mongrel2/websocket.rb
|
54
55
|
lib/mongrel2/xmlrequest.rb
|
55
|
-
spec/
|
56
|
-
spec/
|
57
|
-
spec/
|
56
|
+
spec/constants.rb
|
57
|
+
spec/helpers.rb
|
58
|
+
spec/matchers.rb
|
58
59
|
spec/mongrel2/config/directory_spec.rb
|
59
60
|
spec/mongrel2/config/dsl_spec.rb
|
60
61
|
spec/mongrel2/config/filter_spec.rb
|
@@ -66,6 +67,7 @@ spec/mongrel2/config/route_spec.rb
|
|
66
67
|
spec/mongrel2/config/server_spec.rb
|
67
68
|
spec/mongrel2/config/setting_spec.rb
|
68
69
|
spec/mongrel2/config/statistic_spec.rb
|
70
|
+
spec/mongrel2/config/xrequest_spec.rb
|
69
71
|
spec/mongrel2/config_spec.rb
|
70
72
|
spec/mongrel2/connection_spec.rb
|
71
73
|
spec/mongrel2/constants_spec.rb
|
data/Rakefile
CHANGED
@@ -28,12 +28,12 @@ hoespec = Hoe.spec 'mongrel2' do
|
|
28
28
|
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
29
29
|
|
30
30
|
self.dependency 'nokogiri', '~> 1.5'
|
31
|
-
self.dependency 'sequel', '~>
|
31
|
+
self.dependency 'sequel', '~> 4.2'
|
32
32
|
self.dependency 'tnetstring', '~> 0.3'
|
33
33
|
self.dependency 'yajl-ruby', '~> 1.0'
|
34
34
|
self.dependency 'trollop', '~> 2.0'
|
35
35
|
self.dependency 'sysexits', '~> 1.1'
|
36
|
-
self.dependency '
|
36
|
+
self.dependency 'rbczmq', '~> 1.7'
|
37
37
|
self.dependency 'loggability','~> 0.5'
|
38
38
|
self.dependency 'sqlite3', '~> 1.3'
|
39
39
|
|
data/data/mongrel2/config.sql
CHANGED
@@ -72,12 +72,17 @@ CREATE TABLE statistic (id SERIAL,
|
|
72
72
|
sd REAL,
|
73
73
|
primary key (other_type, other_id, name));
|
74
74
|
|
75
|
+
CREATE TABLE mimetype (id INTEGER PRIMARY KEY, mimetype TEXT, extension TEXT);
|
76
|
+
|
75
77
|
CREATE TABLE filter (id INTEGER PRIMARY KEY,
|
76
78
|
server_id INTEGER,
|
77
79
|
name TEXT,
|
78
80
|
settings TEXT);
|
79
81
|
|
80
|
-
CREATE TABLE
|
82
|
+
CREATE TABLE xrequest (id INTEGER PRIMARY KEY,
|
83
|
+
server_id INTEGER,
|
84
|
+
name TEXT,
|
85
|
+
settings TEXT);
|
81
86
|
|
82
87
|
CREATE TABLE IF NOT EXISTS log(id INTEGER PRIMARY KEY,
|
83
88
|
who TEXT,
|
data/lib/mongrel2.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
#encoding: utf-8
|
3
3
|
|
4
|
+
# Ensure this is used instead of 'zmq' if it's also installed
|
5
|
+
gem 'rbczmq'
|
6
|
+
|
4
7
|
require 'loggability'
|
5
8
|
require 'zmq'
|
6
9
|
|
@@ -22,10 +25,10 @@ module Mongrel2
|
|
22
25
|
abort "\n\n>>> Mongrel2 requires Ruby 1.9.2 or later. <<<\n\n" if RUBY_VERSION < '1.9.2'
|
23
26
|
|
24
27
|
# Library version constant
|
25
|
-
VERSION = '0.
|
28
|
+
VERSION = '0.39.0'
|
26
29
|
|
27
30
|
# Version-control revision constant
|
28
|
-
REVISION = %q$Revision:
|
31
|
+
REVISION = %q$Revision: 36202f7a03c9 $
|
29
32
|
|
30
33
|
|
31
34
|
require 'mongrel2/constants'
|
data/lib/mongrel2/config.rb
CHANGED
@@ -46,6 +46,11 @@ class Mongrel2::Config::Server < Mongrel2::Config( :server )
|
|
46
46
|
# The filters[rdoc-ref:Mongrel2::Config::Filter] that will be loaded by this server.
|
47
47
|
one_to_many :filters
|
48
48
|
|
49
|
+
##
|
50
|
+
# The xrequest handlers[rdoc-ref:Mongrel2::Config::XRequest] that will be loaded by this server.
|
51
|
+
one_to_many :xrequests,
|
52
|
+
:class => 'Mongrel2::Config::XRequest'
|
53
|
+
|
49
54
|
|
50
55
|
##
|
51
56
|
# :method: uuid
|
@@ -207,6 +212,16 @@ class Mongrel2::Config::Server < Mongrel2::Config( :server )
|
|
207
212
|
self.target.add_filter( name: path, settings: settings )
|
208
213
|
end
|
209
214
|
|
215
|
+
|
216
|
+
### Add a Mongrel2::Config::XRequest to the Server object with the specified
|
217
|
+
### +path+ (name) and +settings+ hash.
|
218
|
+
def xrequest( path, settings={} )
|
219
|
+
self.target.save( :validate => false )
|
220
|
+
|
221
|
+
self.log.debug "XRequest [%s]: %p" % [ path, settings ]
|
222
|
+
self.target.add_xrequest( name: path, settings: settings )
|
223
|
+
end
|
224
|
+
|
210
225
|
end # module DSLMethods
|
211
226
|
|
212
227
|
end # class Mongrel2::Config::Server
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'tnetstring'
|
4
|
+
|
5
|
+
require 'mongrel2' unless defined?( Mongrel2 )
|
6
|
+
require 'mongrel2/config' unless defined?( Mongrel2::Config )
|
7
|
+
|
8
|
+
# Mongrel2 X-Request configuration class
|
9
|
+
#
|
10
|
+
# # Using the config DSL:
|
11
|
+
# xrequest '/usr/local/lib/mongrel2/filters/watermark.so',
|
12
|
+
# extensions: ['*.jpg', '*.png'],
|
13
|
+
# src: '/usr/local/var/image/acme.png'
|
14
|
+
#
|
15
|
+
# # Which is the same as:
|
16
|
+
# Mongrel2::Config::XRequest.create(
|
17
|
+
# name: '/usr/local/lib/mongrel2/filters/sendfile.so',
|
18
|
+
# settings: {
|
19
|
+
# min_size: 1000
|
20
|
+
# }
|
21
|
+
#
|
22
|
+
# # Or:
|
23
|
+
# server.add_xrequest(
|
24
|
+
# name: '/usr/local/lib/mongrel2/filters/sendfile.so',
|
25
|
+
# settings: {
|
26
|
+
# min_size: 1000
|
27
|
+
# })
|
28
|
+
#
|
29
|
+
class Mongrel2::Config::XRequest < Mongrel2::Config( :xrequest )
|
30
|
+
|
31
|
+
### As of Mongrel2/1.8.1:
|
32
|
+
# CREATE TABLE xrequest (id INTEGER PRIMARY KEY,
|
33
|
+
# server_id INTEGER,
|
34
|
+
# name TEXT,
|
35
|
+
# settings TEXT);
|
36
|
+
#
|
37
|
+
|
38
|
+
many_to_one :server
|
39
|
+
|
40
|
+
|
41
|
+
# Serialize the settings column as TNetStrings
|
42
|
+
plugin :serialization, :tnetstring, :settings
|
43
|
+
|
44
|
+
end # class Mongrel2::Config::XRequest
|
45
|
+
|
data/lib/mongrel2/connection.rb
CHANGED
@@ -70,14 +70,13 @@ class Mongrel2::Connection
|
|
70
70
|
self.log.debug "0mq Context is: %p" % [ ctx ]
|
71
71
|
|
72
72
|
self.log.info "Connecting PULL request socket (%s)" % [ self.sub_addr ]
|
73
|
-
@request_sock = ctx.socket(
|
74
|
-
@request_sock.
|
73
|
+
@request_sock = ctx.socket( :PULL )
|
74
|
+
@request_sock.linger = 0
|
75
75
|
@request_sock.connect( self.sub_addr )
|
76
76
|
|
77
77
|
self.log.info "Connecting PUB response socket (%s)" % [ self.pub_addr ]
|
78
|
-
@response_sock = ctx.socket(
|
79
|
-
@response_sock.
|
80
|
-
@response_sock.setsockopt( ZMQ::LINGER, 0 )
|
78
|
+
@response_sock = ctx.socket( :PUB )
|
79
|
+
@response_sock.linger = 0
|
81
80
|
@response_sock.connect( self.pub_addr )
|
82
81
|
end
|
83
82
|
|
data/lib/mongrel2/control.rb
CHANGED
@@ -28,8 +28,8 @@ class Mongrel2::Control
|
|
28
28
|
def initialize( port=DEFAULT_PORT )
|
29
29
|
check_port( port )
|
30
30
|
@ctx = Mongrel2.zmq_context
|
31
|
-
@socket = @ctx.socket(
|
32
|
-
@socket.
|
31
|
+
@socket = @ctx.socket( :REQ )
|
32
|
+
@socket.linger = 0
|
33
33
|
@socket.connect( port.to_s )
|
34
34
|
end
|
35
35
|
|
data/lib/mongrel2/handler.rb
CHANGED
@@ -1,15 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent
|
7
|
-
|
8
|
-
libdir = basedir + "lib"
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
|
11
|
-
$LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
|
12
|
-
}
|
4
|
+
require_relative 'constants'
|
5
|
+
require_relative 'matchers'
|
13
6
|
|
14
7
|
# SimpleCov test coverage reporting; enable this using the :coverage rake task
|
15
8
|
if ENV['COVERAGE']
|
@@ -44,8 +37,6 @@ require 'loggability/spechelpers'
|
|
44
37
|
require 'sequel'
|
45
38
|
require 'sequel/model'
|
46
39
|
|
47
|
-
require 'spec/lib/constants'
|
48
|
-
require 'spec/lib/matchers'
|
49
40
|
|
50
41
|
|
51
42
|
### RSpec helper functions that are used to test Mongrel2 itself.
|
@@ -226,7 +217,13 @@ end
|
|
226
217
|
RSpec.configure do |c|
|
227
218
|
include Mongrel2::TestConstants
|
228
219
|
|
229
|
-
c.
|
220
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
221
|
+
c.run_all_when_everything_filtered = true
|
222
|
+
c.filter_run :focus
|
223
|
+
c.order = 'random'
|
224
|
+
c.mock_with( :rspec ) do |config|
|
225
|
+
config.syntax = :expect
|
226
|
+
end
|
230
227
|
|
231
228
|
c.extend( Mongrel2::TestConstants )
|
232
229
|
c.include( Mongrel2::TestConstants )
|
@@ -1,21 +1,11 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
|
-
|
5
|
-
require 'pathname'
|
6
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent
|
7
|
-
|
8
|
-
libdir = basedir + "lib"
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
|
11
|
-
}
|
12
|
-
|
13
|
-
require 'rspec'
|
14
|
-
require 'mongrel2'
|
4
|
+
require 'mongrel2' unless defined?( Mongrel2 )
|
15
5
|
|
16
6
|
|
17
7
|
### RSpec matchers for Mongrel2 specs
|
18
|
-
module Mongrel2::Matchers
|
8
|
+
module Mongrel2::Matchers # :nodoc:
|
19
9
|
|
20
10
|
### A matcher for unordered array contents
|
21
11
|
class EnumerableAllBeMatcher
|
@@ -1,19 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
require 'pathname'
|
5
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent.parent
|
6
|
-
|
7
|
-
libdir = basedir + "lib"
|
8
|
-
|
9
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
10
|
-
$LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
|
11
|
-
}
|
3
|
+
require_relative '../../helpers'
|
12
4
|
|
13
5
|
require 'rspec'
|
14
|
-
|
15
|
-
require 'spec/lib/helpers'
|
16
|
-
|
17
6
|
require 'mongrel2'
|
18
7
|
require 'mongrel2/config'
|
19
8
|
|
@@ -25,7 +14,7 @@ require 'mongrel2/config'
|
|
25
14
|
describe Mongrel2::Config::Directory do
|
26
15
|
|
27
16
|
before( :all ) do
|
28
|
-
setup_logging(
|
17
|
+
setup_logging()
|
29
18
|
setup_config_db()
|
30
19
|
end
|
31
20
|
|
@@ -43,48 +32,48 @@ describe Mongrel2::Config::Directory do
|
|
43
32
|
|
44
33
|
|
45
34
|
it "is valid if its base, index_file, and default_ctype are all valid" do
|
46
|
-
@dir.
|
35
|
+
expect( @dir ).to be_valid()
|
47
36
|
end
|
48
37
|
|
49
38
|
it "isn't valid if it doesn't have a base" do
|
50
39
|
@dir.base = nil
|
51
|
-
@dir.
|
52
|
-
@dir.errors.full_messages.first.
|
40
|
+
expect( @dir ).to_not be_valid()
|
41
|
+
expect( @dir.errors.full_messages.first ).to match( /missing or nil/i )
|
53
42
|
end
|
54
43
|
|
55
44
|
it "isn't valid when its base starts with '/'" do
|
56
45
|
@dir.base = '/var/www/public/'
|
57
|
-
@dir.
|
58
|
-
@dir.errors.full_messages.first.
|
46
|
+
expect( @dir ).to_not be_valid()
|
47
|
+
expect( @dir.errors.full_messages.first ).to match( %r{shouldn't start with '/'}i )
|
59
48
|
end
|
60
49
|
|
61
50
|
it "isn't valid when its base doesn't end with '/'" do
|
62
51
|
@dir.base = 'var/www/public'
|
63
|
-
@dir.
|
64
|
-
@dir.errors.full_messages.first.
|
52
|
+
expect( @dir ).to_not be_valid()
|
53
|
+
expect( @dir.errors.full_messages.first ).to match( %r{must end with '/'}i )
|
65
54
|
end
|
66
55
|
|
67
56
|
it "isn't valid if it doesn't have an index file" do
|
68
57
|
@dir.index_file = nil
|
69
|
-
@dir.
|
70
|
-
@dir.errors.full_messages.first.
|
58
|
+
expect( @dir ).to_not be_valid()
|
59
|
+
expect( @dir.errors.full_messages.first ).to match( /must not be nil/i )
|
71
60
|
end
|
72
61
|
|
73
62
|
it "isn't valid if it doesn't have a default content-type" do
|
74
63
|
@dir.default_ctype = nil
|
75
|
-
@dir.
|
76
|
-
@dir.errors.full_messages.first.
|
64
|
+
expect( @dir ).to_not be_valid()
|
65
|
+
expect( @dir.errors.full_messages.first ).to match( /must not be nil/i )
|
77
66
|
end
|
78
67
|
|
79
68
|
it "isn't valid if its cache TTL is set to a negative value" do
|
80
69
|
@dir.cache_ttl = -5
|
81
|
-
@dir.
|
82
|
-
@dir.errors.full_messages.first.
|
70
|
+
expect( @dir ).to_not be_valid()
|
71
|
+
expect( @dir.errors.full_messages.first ).to match( /not a positive integer/i )
|
83
72
|
end
|
84
73
|
|
85
74
|
it "is valid if its cache TTL is set to zero" do
|
86
75
|
@dir.cache_ttl = 0
|
87
|
-
@dir.
|
76
|
+
expect( @dir ).to be_valid()
|
88
77
|
end
|
89
78
|
|
90
79
|
end
|
@@ -1,19 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
require 'pathname'
|
5
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent.parent
|
6
|
-
|
7
|
-
libdir = basedir + "lib"
|
8
|
-
|
9
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
10
|
-
$LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
|
11
|
-
}
|
3
|
+
require_relative '../../helpers'
|
12
4
|
|
13
5
|
require 'rspec'
|
14
|
-
|
15
|
-
require 'spec/lib/helpers'
|
16
|
-
|
17
6
|
require 'mongrel2'
|
18
7
|
require 'mongrel2/config'
|
19
8
|
|
@@ -27,7 +16,7 @@ describe Mongrel2::Config::DSL do
|
|
27
16
|
include described_class
|
28
17
|
|
29
18
|
before( :all ) do
|
30
|
-
setup_logging(
|
19
|
+
setup_logging()
|
31
20
|
setup_config_db()
|
32
21
|
end
|
33
22
|
|
@@ -36,6 +25,7 @@ describe Mongrel2::Config::DSL do
|
|
36
25
|
Mongrel2::Config::Host.truncate
|
37
26
|
Mongrel2::Config::Route.truncate
|
38
27
|
Mongrel2::Config::Filter.truncate
|
28
|
+
Mongrel2::Config::XRequest.truncate
|
39
29
|
end
|
40
30
|
|
41
31
|
after( :all ) do
|
@@ -47,8 +37,8 @@ describe Mongrel2::Config::DSL do
|
|
47
37
|
it "can generate a default server config using the 'server' declarative" do
|
48
38
|
result = server '965A7196-99BC-46FA-945B-3478AE92BFB5'
|
49
39
|
|
50
|
-
result.
|
51
|
-
result.uuid.
|
40
|
+
expect( result ).to be_a( Mongrel2::Config::Server )
|
41
|
+
expect( result.uuid ).to eq( '965A7196-99BC-46FA-945B-3478AE92BFB5' )
|
52
42
|
end
|
53
43
|
|
54
44
|
|
@@ -61,13 +51,13 @@ describe Mongrel2::Config::DSL do
|
|
61
51
|
control_port '/var/run/intranet.sock'
|
62
52
|
end
|
63
53
|
|
64
|
-
result.
|
65
|
-
result.uuid.
|
66
|
-
result.name.
|
67
|
-
result.chroot.
|
68
|
-
result.access_log.
|
69
|
-
result.error_log.
|
70
|
-
result.control_port.
|
54
|
+
expect( result ).to be_a( Mongrel2::Config::Server )
|
55
|
+
expect( result.uuid ).to eq( '965A7196-99BC-46FA-945B-3478AE92BFB5' )
|
56
|
+
expect( result.name ).to eq( 'Intranet' )
|
57
|
+
expect( result.chroot ).to eq( '/service/mongrel2' )
|
58
|
+
expect( result.access_log ).to eq( '/var/log/access' )
|
59
|
+
expect( result.error_log ).to eq( '/var/log/errors' )
|
60
|
+
expect( result.control_port ).to eq( '/var/run/intranet.sock' )
|
71
61
|
end
|
72
62
|
end
|
73
63
|
|
@@ -80,12 +70,12 @@ describe Mongrel2::Config::DSL do
|
|
80
70
|
|
81
71
|
end
|
82
72
|
|
83
|
-
result.
|
84
|
-
result.hosts.
|
73
|
+
expect( result ).to be_a( Mongrel2::Config::Server )
|
74
|
+
expect( result.hosts ).to have( 1 ).member
|
85
75
|
host = result.hosts.first
|
86
76
|
|
87
|
-
host.
|
88
|
-
host.name.
|
77
|
+
expect( host ).to be_a( Mongrel2::Config::Host )
|
78
|
+
expect( host.name ).to eq( 'localhost' )
|
89
79
|
end
|
90
80
|
|
91
81
|
it "can add several elaborately-configured hosts to a server via a block" do
|
@@ -118,51 +108,51 @@ describe Mongrel2::Config::DSL do
|
|
118
108
|
|
119
109
|
end
|
120
110
|
|
121
|
-
result.
|
122
|
-
result.hosts.
|
111
|
+
expect( result ).to be_a( Mongrel2::Config::Server )
|
112
|
+
expect( result.hosts ).to have( 2 ).members
|
123
113
|
host1, host2 = result.hosts
|
124
114
|
|
125
|
-
host1.
|
126
|
-
host1.name.
|
127
|
-
host1.matching.
|
128
|
-
host1.routes.
|
129
|
-
host1.routes.
|
130
|
-
|
131
|
-
host1.routes[0].path.
|
132
|
-
host1.routes[0].target.
|
133
|
-
host1.routes[0].target.base.
|
134
|
-
|
135
|
-
host1.routes[1].path.
|
136
|
-
host1.routes[1].target.
|
137
|
-
host1.routes[1].target.base.
|
138
|
-
|
139
|
-
host1.routes[2].path.
|
140
|
-
host1.routes[2].target.
|
141
|
-
host1.routes[2].target.addr.
|
142
|
-
host1.routes[2].target.port.
|
143
|
-
|
144
|
-
host1.routes[3].path.
|
145
|
-
host1.routes[3].target.
|
146
|
-
host1.routes[3].target.send_ident.
|
147
|
-
host1.routes[3].target.send_spec.
|
148
|
-
host1.routes[3].target.recv_ident.
|
149
|
-
host1.routes[3].target.recv_spec.
|
150
|
-
|
151
|
-
host1.routes[4].path.
|
152
|
-
host1.routes[4].target.
|
153
|
-
host1.routes[4].target.send_ident.
|
154
|
-
host1.routes[4].target.send_spec.
|
155
|
-
host1.routes[4].target.recv_spec.
|
156
|
-
host1.routes[4].target.recv_ident.
|
157
|
-
host1.routes[4].target.protocol.
|
158
|
-
|
159
|
-
host1.routes[5].path.
|
160
|
-
host1.routes[5].target.
|
161
|
-
|
162
|
-
host2.
|
163
|
-
host2.name.
|
164
|
-
host2.routes.
|
165
|
-
host2.routes.first.
|
115
|
+
expect( host1 ).to be_a( Mongrel2::Config::Host )
|
116
|
+
expect( host1.name ).to eq( 'brillianttaste' )
|
117
|
+
expect( host1.matching ).to eq( '*.brillianttasteinthefoodmouth.com' )
|
118
|
+
expect( host1.routes ).to have( 6 ).members
|
119
|
+
expect( host1.routes ).to all_be_a( Mongrel2::Config::Route )
|
120
|
+
|
121
|
+
expect( host1.routes[0].path ).to eq( '/images' )
|
122
|
+
expect( host1.routes[0].target ).to be_a( Mongrel2::Config::Directory )
|
123
|
+
expect( host1.routes[0].target.base ).to eq( 'var/www/images/' )
|
124
|
+
|
125
|
+
expect( host1.routes[1].path ).to eq( '/css' )
|
126
|
+
expect( host1.routes[1].target ).to be_a( Mongrel2::Config::Directory )
|
127
|
+
expect( host1.routes[1].target.base ).to eq( 'var/www/css/' )
|
128
|
+
|
129
|
+
expect( host1.routes[2].path ).to eq( '/vote' )
|
130
|
+
expect( host1.routes[2].target ).to be_a( Mongrel2::Config::Proxy )
|
131
|
+
expect( host1.routes[2].target.addr ).to eq( 'localhost' )
|
132
|
+
expect( host1.routes[2].target.port ).to eq( 6667 )
|
133
|
+
|
134
|
+
expect( host1.routes[3].path ).to eq( '/admin' )
|
135
|
+
expect( host1.routes[3].target ).to be_a( Mongrel2::Config::Handler )
|
136
|
+
expect( host1.routes[3].target.send_ident ).to eq( 'D613E7EE-E2EB-4699-A200-5C8ECAB45D5E' )
|
137
|
+
expect( host1.routes[3].target.send_spec ).to eq( 'tcp://127.0.0.1:9998' )
|
138
|
+
expect( host1.routes[3].target.recv_ident ).to eq( '' )
|
139
|
+
expect( host1.routes[3].target.recv_spec ).to eq( 'tcp://127.0.0.1:9997' )
|
140
|
+
|
141
|
+
expect( host1.routes[4].path ).to eq( '@directory' )
|
142
|
+
expect( host1.routes[4].target ).to be_a( Mongrel2::Config::Handler )
|
143
|
+
expect( host1.routes[4].target.send_ident ).to eq( 'B7EFA46D-FEE4-432B-B80F-E8A9A2CC6FDB' )
|
144
|
+
expect( host1.routes[4].target.send_spec ).to eq( 'tcp://127.0.0.1:9996' )
|
145
|
+
expect( host1.routes[4].target.recv_spec ).to eq( 'tcp://127.0.0.1:9992' )
|
146
|
+
expect( host1.routes[4].target.recv_ident ).to eq( '' )
|
147
|
+
expect( host1.routes[4].target.protocol ).to eq( 'tnetstring' )
|
148
|
+
|
149
|
+
expect( host1.routes[5].path ).to eq( '/directory' )
|
150
|
+
expect( host1.routes[5].target ).to eq( host1.routes[4].target )
|
151
|
+
|
152
|
+
expect( host2 ).to be_a( Mongrel2::Config::Host )
|
153
|
+
expect( host2.name ).to eq( 'deveiate.org' )
|
154
|
+
expect( host2.routes ).to have( 1 ).member
|
155
|
+
expect( host2.routes.first ).to be_a( Mongrel2::Config::Route )
|
166
156
|
end
|
167
157
|
|
168
158
|
|
@@ -185,22 +175,22 @@ describe Mongrel2::Config::DSL do
|
|
185
175
|
"upload.temp_store_mode" => "0666"
|
186
176
|
)
|
187
177
|
|
188
|
-
result.
|
189
|
-
result.
|
190
|
-
result.
|
191
|
-
result[0].key.
|
192
|
-
result[0].value.
|
193
|
-
result[1].key.
|
194
|
-
result[1].value.
|
195
|
-
result[2].key.
|
196
|
-
result[2].value.
|
178
|
+
expect( result ).to be_an( Array )
|
179
|
+
expect( result ).to have( 3 ).members
|
180
|
+
expect( result ).to all_be_a( Mongrel2::Config::Setting )
|
181
|
+
expect( result[0].key ).to eq( 'zeromq.threads' )
|
182
|
+
expect( result[0].value ).to eq( '8' )
|
183
|
+
expect( result[1].key ).to eq( 'upload.temp_store' )
|
184
|
+
expect( result[1].value ).to eq( '/home/zedshaw/projects/mongrel2/tmp/upload.XXXXXX' )
|
185
|
+
expect( result[2].key ).to eq( 'upload.temp_store_mode' )
|
186
|
+
expect( result[2].value ).to eq( '0666' )
|
197
187
|
end
|
198
188
|
|
199
189
|
it "can set a single expert setting" do
|
200
190
|
result = setting "zeromq.threads", 16
|
201
|
-
result.
|
202
|
-
result.key.
|
203
|
-
result.value.
|
191
|
+
expect( result ).to be_a( Mongrel2::Config::Setting )
|
192
|
+
expect( result.key ).to eq( 'zeromq.threads' )
|
193
|
+
expect( result.value ).to eq( '16' )
|
204
194
|
end
|
205
195
|
|
206
196
|
end
|
@@ -213,20 +203,20 @@ describe Mongrel2::Config::DSL do
|
|
213
203
|
'.textile' => 'text/x-textile'
|
214
204
|
)
|
215
205
|
|
216
|
-
result.
|
217
|
-
result.
|
218
|
-
result.
|
219
|
-
result[0].extension.
|
220
|
-
result[0].mimetype.
|
221
|
-
result[1].extension.
|
222
|
-
result[1].mimetype.
|
206
|
+
expect( result ).to be_an( Array )
|
207
|
+
expect( result ).to have( 2 ).members
|
208
|
+
expect( result ).to all_be_a( Mongrel2::Config::Mimetype )
|
209
|
+
expect( result[0].extension ).to eq( '.md' )
|
210
|
+
expect( result[0].mimetype ).to eq( 'text/x-markdown' )
|
211
|
+
expect( result[1].extension ).to eq( '.textile' )
|
212
|
+
expect( result[1].mimetype ).to eq( 'text/x-textile' )
|
223
213
|
end
|
224
214
|
|
225
215
|
it "can set a single mimetype mapping" do
|
226
216
|
result = mimetype '.tmpl', 'text/x-inversion-template'
|
227
|
-
result.
|
228
|
-
result.extension.
|
229
|
-
result.mimetype.
|
217
|
+
expect( result ).to be_a( Mongrel2::Config::Mimetype )
|
218
|
+
expect( result.extension ).to eq( '.tmpl' )
|
219
|
+
expect( result.mimetype ).to eq( 'text/x-inversion-template' )
|
230
220
|
end
|
231
221
|
|
232
222
|
end
|
@@ -238,9 +228,9 @@ describe Mongrel2::Config::DSL do
|
|
238
228
|
filter '/usr/lib/mongrel2/null.so'
|
239
229
|
end
|
240
230
|
|
241
|
-
result.filters.
|
242
|
-
result.filters.first.
|
243
|
-
result.filters.first.settings.
|
231
|
+
expect( result.filters ).to have( 1 ).member
|
232
|
+
expect( result.filters.first ).to be_a( Mongrel2::Config::Filter )
|
233
|
+
expect( result.filters.first.settings ).to eq( {} )
|
244
234
|
end
|
245
235
|
|
246
236
|
it "can add a filter with settings to a server" do
|
@@ -250,10 +240,37 @@ describe Mongrel2::Config::DSL do
|
|
250
240
|
min_size: 1000
|
251
241
|
end
|
252
242
|
|
253
|
-
result.filters.
|
254
|
-
result.filters.first.
|
255
|
-
result.filters.first.settings.
|
256
|
-
{ 'extensions' => ["*.html", "*.txt"], 'min_size' => 1000 }
|
243
|
+
expect( result.filters ).to have( 1 ).member
|
244
|
+
expect( result.filters.first ).to be_a( Mongrel2::Config::Filter )
|
245
|
+
expect( result.filters.first.settings ).
|
246
|
+
to eq({ 'extensions' => ["*.html", "*.txt"], 'min_size' => 1000 })
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
describe 'xrequests' do
|
252
|
+
|
253
|
+
it "can add an xrequest to a server" do
|
254
|
+
result = server '965A7196-99BC-46FA-945B-3478AE92BFB5' do
|
255
|
+
xrequest '/usr/lib/mongrel2/null.so'
|
256
|
+
end
|
257
|
+
|
258
|
+
expect( result.xrequests ).to have( 1 ).member
|
259
|
+
expect( result.xrequests.first ).to be_a( Mongrel2::Config::XRequest )
|
260
|
+
expect( result.xrequests.first.settings ).to eq( {} )
|
261
|
+
end
|
262
|
+
|
263
|
+
it "can add a filter with settings to a server" do
|
264
|
+
result = server '965A7196-99BC-46FA-945B-3478AE92BFB5' do
|
265
|
+
xrequest '/usr/lib/mongrel2/null.so',
|
266
|
+
extensions: ["*.html", "*.txt"],
|
267
|
+
min_size: 1000
|
268
|
+
end
|
269
|
+
|
270
|
+
expect( result.xrequests ).to have( 1 ).member
|
271
|
+
expect( result.xrequests.first ).to be_a( Mongrel2::Config::XRequest )
|
272
|
+
expect( result.xrequests.first.settings ).
|
273
|
+
to eq({ 'extensions' => ["*.html", "*.txt"], 'min_size' => 1000 })
|
257
274
|
end
|
258
275
|
|
259
276
|
end
|