mongrel2 0.38.0 → 0.39.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 +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
|