m2config 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 +7 -0
- data/.travis.yml +4 -0
- data/README.md +22 -1
- data/Rakefile +5 -0
- data/lib/m2config/dir.rb +4 -0
- data/lib/m2config/handler.rb +1 -0
- data/lib/m2config/host.rb +15 -7
- data/lib/m2config/schema.sql +4 -0
- data/lib/m2config/version.rb +1 -1
- data/m2config.gemspec +1 -0
- data/sample/full.rb +6 -6
- data/spec/dir_spec.rb +22 -3
- data/spec/handler_spec.rb +9 -0
- data/spec/host_spec.rb +11 -5
- data/spec/m2config_spec.rb +1 -1
- data/spec/route_spec.rb +3 -3
- data/spec/server_spec.rb +1 -1
- metadata +17 -34
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8af32f60790056db4c869961bf53572607910579
|
4
|
+
data.tar.gz: 94bece67112686d6f40e58a5f57647b869dbb8d0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a85f7fc5d80cb047a69494d85a433cf598b5dc22703c5bc509056b9027f93ebb7410b7b3646160fe02d730447abd2b86f877356787ed8ce1b98405637d4b5074
|
7
|
+
data.tar.gz: d5b4d69be4e351300217f8c5ae0414fbb4926d388d6ddab722a7e54da1e50aee5fb80c187d25ff770102ce9123e773c634fe0e1f3d051e10bf641ec1c10d31b0
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -48,6 +48,25 @@ exComHost.add_route pubRoute
|
|
48
48
|
server.add_host exComHost
|
49
49
|
```
|
50
50
|
|
51
|
+
Keep in mind that these lines will create their corresponding database
|
52
|
+
records every time the script is run. For simplicity there is no check
|
53
|
+
for duplicates. This has the benefit of complete flexibility and
|
54
|
+
control but *you* must ensure that the DB ends up looking the way you
|
55
|
+
want.
|
56
|
+
|
57
|
+
You can swiftly dump your config using:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require "pp"
|
61
|
+
|
62
|
+
pp Server.all
|
63
|
+
pp Host.all
|
64
|
+
pp Handler.all
|
65
|
+
pp Dir.all
|
66
|
+
pp Route.all
|
67
|
+
|
68
|
+
```
|
69
|
+
|
51
70
|
### This is Sequel
|
52
71
|
|
53
72
|
The classes mapping the configuration are
|
@@ -61,7 +80,9 @@ A few features that you may miss if your needs go beyond mine:
|
|
61
80
|
|
62
81
|
- MIME types are not handled (trivial to add, just ask)
|
63
82
|
- Multiple DBs in same process
|
64
|
-
- A DSL-like syntax (
|
83
|
+
- A DSL-like syntax (likely to improve readability in complex setups)
|
84
|
+
- Declare proper associations
|
85
|
+
- Cleanup / consolidate DB (delete unreferenced entries)
|
65
86
|
|
66
87
|
|
67
88
|
|
data/Rakefile
CHANGED
data/lib/m2config/dir.rb
CHANGED
@@ -5,6 +5,10 @@ module M2Config
|
|
5
5
|
def initialize( fields )
|
6
6
|
fields[:default_ctype] ||= "application/octet-stream"
|
7
7
|
fields[:index_file] ||= "index.html"
|
8
|
+
raise ArgumentError, "Base directories are relative to chroot and must not start with a slash (as in your <#{fields[:base]}>)" if
|
9
|
+
fields[:base] =~ /^\/.+/
|
10
|
+
raise ArgumentError, "Base directories must end with a slash (your <#{fields[:base]}> does not)" if
|
11
|
+
!(fields[:base] =~ /\/$/)
|
8
12
|
super(fields, false)
|
9
13
|
save
|
10
14
|
end
|
data/lib/m2config/handler.rb
CHANGED
data/lib/m2config/host.rb
CHANGED
@@ -3,6 +3,20 @@ module M2Config
|
|
3
3
|
plugin :validation_helpers
|
4
4
|
|
5
5
|
def initialize( fields )
|
6
|
+
s = resolveServer fields
|
7
|
+
fields[:server_id] = s.id if s
|
8
|
+
raise ArgumentError, "Name can not be nil" if fields[:name].nil?
|
9
|
+
super fields, false
|
10
|
+
save
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_route( route )
|
14
|
+
route.host = id
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def resolveServer( fields )
|
6
20
|
if fields[:srv]
|
7
21
|
s=fields[:srv]
|
8
22
|
fields.delete :srv
|
@@ -12,13 +26,7 @@ module M2Config
|
|
12
26
|
fields.delete :srvUuid
|
13
27
|
end
|
14
28
|
end
|
15
|
-
|
16
|
-
super(fields, false)
|
17
|
-
save
|
18
|
-
end
|
19
|
-
|
20
|
-
def add_route( route )
|
21
|
-
route.host = id
|
29
|
+
s
|
22
30
|
end
|
23
31
|
|
24
32
|
|
data/lib/m2config/schema.sql
CHANGED
data/lib/m2config/version.rb
CHANGED
data/m2config.gemspec
CHANGED
data/sample/full.rb
CHANGED
@@ -3,14 +3,14 @@ require "m2config"
|
|
3
3
|
include M2Config
|
4
4
|
|
5
5
|
cfg = M2Config::Config.new
|
6
|
-
server = Server.new
|
7
|
-
exComHost = Host.new({matching:"example.com"})
|
8
|
-
pubDir = Dir.new({base:"/
|
9
|
-
pubRoute = Route.new( {path:"/", target:pubDir} )
|
10
|
-
appHand = Handler.new({ send_spec:"tcp://10.0.0.1:8989",
|
6
|
+
server = M2Config::Server.new
|
7
|
+
exComHost = M2Config::Host.new({matching:"example.com", name:"ex"})
|
8
|
+
pubDir = M2Config::Dir.new({base:"public/"})
|
9
|
+
pubRoute = M2Config::Route.new( {path:"/", target:pubDir} )
|
10
|
+
appHand = M2Config::Handler.new({ send_spec:"tcp://10.0.0.1:8989",
|
11
11
|
recv_spec:"tcp://10.0.0.1:9898",
|
12
12
|
send_ident: "dev.example.com ID" })
|
13
|
-
appRoute = Route.new( {path:"/blog", target:appHand} )
|
13
|
+
appRoute = M2Config::Route.new( {path:"/blog", target:appHand} )
|
14
14
|
|
15
15
|
exComHost.add_route appRoute
|
16
16
|
exComHost.add_route pubRoute
|
data/spec/dir_spec.rb
CHANGED
@@ -16,13 +16,13 @@ describe M2Config::Dir do
|
|
16
16
|
|
17
17
|
describe "::new" do
|
18
18
|
it "needs to know the base path to handle" do
|
19
|
-
M2Config::Dir.new({base:"/
|
19
|
+
M2Config::Dir.new({base:"images/"})
|
20
20
|
res= @db.get_first_row("SELECT * FROM directory;")
|
21
|
-
res["base"].should eq("/
|
21
|
+
res["base"].should eq("images/")
|
22
22
|
end
|
23
23
|
|
24
24
|
it "defaults to application/octet-stream for the default content type" do
|
25
|
-
M2Config::Dir.new({base:"/
|
25
|
+
M2Config::Dir.new({base:"images/"})
|
26
26
|
res= @db.get_first_row("SELECT * FROM directory;")
|
27
27
|
res["default_ctype"].should eq("application/octet-stream")
|
28
28
|
end
|
@@ -32,6 +32,25 @@ describe M2Config::Dir do
|
|
32
32
|
res= @db.get_first_row("SELECT * FROM directory;")
|
33
33
|
res["index_file"].should eq("index.html")
|
34
34
|
end
|
35
|
+
|
36
|
+
describe "helps you spot common mistakes" do
|
37
|
+
it "yells when the path contains a leading slash" do
|
38
|
+
expect {
|
39
|
+
M2Config::Dir.new({base:"/public"})
|
40
|
+
}.to raise_exception(ArgumentError, /base directories are relative to chroot and must not start with a slash/i)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "yells when the path does not end with a slash" do
|
44
|
+
expect {
|
45
|
+
M2Config::Dir.new({base:"public"})
|
46
|
+
}.to raise_exception(ArgumentError, /base directories must end with a slash/i)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "keeps calm with slashes inside the path" do
|
50
|
+
expect { M2Config::Dir.new({base:"public/assets/"}) }.to_not raise_exception
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
35
54
|
end
|
36
55
|
|
37
56
|
describe '#type' do
|
data/spec/handler_spec.rb
CHANGED
@@ -25,6 +25,14 @@ describe M2Config::Handler do
|
|
25
25
|
res["recv_spec"].should eq("tcp://10.0.0.1:9898")
|
26
26
|
res["send_ident"].should eq("dev.example.com ID")
|
27
27
|
end
|
28
|
+
|
29
|
+
it "turns nil into empty string when recv_ident is not set" do
|
30
|
+
M2Config::Handler.new({ send_spec:"tcp://10.0.0.1:8989",
|
31
|
+
recv_spec:"tcp://10.0.0.1:9898",
|
32
|
+
send_ident: "dev.example.com ID"})
|
33
|
+
res = @db.get_first_row("SELECT * FROM handler;")
|
34
|
+
res["recv_ident"].should be_empty
|
35
|
+
end
|
28
36
|
|
29
37
|
describe "helps you spot common mistakes" do
|
30
38
|
it "yells when the addresses are the same" do
|
@@ -32,6 +40,7 @@ describe M2Config::Handler do
|
|
32
40
|
M2Config::Handler.new({send_spec:"tcp://10.0.0.1:8989", recv_spec:"tcp://10.0.0.1:8989", send_ident: "dev.example.com ID"})
|
33
41
|
end.to raise_exception(ArgumentError, /send and receive endpoints can not be the same/i)
|
34
42
|
end
|
43
|
+
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
data/spec/host_spec.rb
CHANGED
@@ -17,30 +17,36 @@ describe M2Config::Host do
|
|
17
17
|
|
18
18
|
describe "::new" do
|
19
19
|
it "needs to know the domain name served" do
|
20
|
-
M2Config::Host.new({matching:"example.com"})
|
20
|
+
M2Config::Host.new({matching:"example.com", name: "ex"})
|
21
21
|
res = @db.get_first_row("SELECT * FROM host;")
|
22
22
|
res["matching"].should eq("example.com")
|
23
23
|
end
|
24
24
|
|
25
25
|
it "can use the uuid of a server" do
|
26
|
-
host = M2Config::Host.new({matching:"example.com", srvUuid: @srv.uuid})
|
26
|
+
host = M2Config::Host.new({matching:"example.com", name: "ex", srvUuid: @srv.uuid})
|
27
27
|
res = @db.get_first_row("SELECT * FROM host WHERE id=?;", host.id)
|
28
28
|
res["server_id"].should eq(@srv.id)
|
29
29
|
res["matching"].should eq("example.com")
|
30
30
|
end
|
31
31
|
|
32
32
|
it "can use a server instance" do
|
33
|
-
host = M2Config::Host.new({matching:"example.com", srv: @srv})
|
33
|
+
host = M2Config::Host.new({matching:"example.com", name: "ex", srv: @srv})
|
34
34
|
res = @db.get_first_row("SELECT * FROM host WHERE id=?;", host.id)
|
35
35
|
res["server_id"].should eq(@srv.id)
|
36
36
|
res["matching"].should eq("example.com")
|
37
37
|
end
|
38
|
+
|
39
|
+
it "enforces mongrel2 constraint about nil name" do
|
40
|
+
expect {
|
41
|
+
M2Config::Host.new({matching:"example.com"})
|
42
|
+
}.to raise_exception(ArgumentError, /name can not be nil/i)
|
43
|
+
end
|
38
44
|
end
|
39
45
|
|
40
46
|
describe "#add_route" do
|
41
47
|
it "activates a route (can be done using Route#host= too)" do
|
42
|
-
host = M2Config::Host.new({matching:"example.com"})
|
43
|
-
dirH = M2Config::Dir.new({base: "/
|
48
|
+
host = M2Config::Host.new({matching:"example.com", name: "ex"})
|
49
|
+
dirH = M2Config::Dir.new({base: "static/"})
|
44
50
|
dirR = M2Config::Route.new({path:"/blog", target: dirH})
|
45
51
|
host.add_route dirR
|
46
52
|
res = @db.get_first_row("SELECT * FROM route;")
|
data/spec/m2config_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "env"
|
2
2
|
|
3
|
-
TABLES = %w(directory handler host log mimetype proxy route server setting statistic)
|
3
|
+
TABLES = %w(directory handler host log mimetype proxy route server setting statistic filter)
|
4
4
|
|
5
5
|
File.delete EXISTING_DB_NAME rescue nil
|
6
6
|
emptyDB = SQLite3::Database.new EXISTING_DB_NAME
|
data/spec/route_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe M2Config::Route do
|
|
6
6
|
before(:each) do
|
7
7
|
File.delete DEFAULT_DB_NAME rescue nil
|
8
8
|
@cfg = M2Config::Config.new
|
9
|
-
@dirH = M2Config::Dir.new({base: "/
|
9
|
+
@dirH = M2Config::Dir.new({base: "static/"})
|
10
10
|
@db = SQLite3::Database.new DEFAULT_DB_NAME
|
11
11
|
@db.results_as_hash = true
|
12
12
|
end
|
@@ -28,7 +28,7 @@ describe M2Config::Route do
|
|
28
28
|
|
29
29
|
describe "#host=" do
|
30
30
|
it "can be used if the host is not known at creation" do
|
31
|
-
host = M2Config::Host.new({matching:"example.com"})
|
31
|
+
host = M2Config::Host.new({matching:"example.com", name: "ex"})
|
32
32
|
r = M2Config::Route.new({path:"/blog", target: @dirH})
|
33
33
|
r.host = host.id
|
34
34
|
res = @db.get_first_row("SELECT * FROM route;")
|
@@ -36,7 +36,7 @@ describe M2Config::Route do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "can take a Host instance" do
|
39
|
-
host = M2Config::Host.new({matching:"example.com"})
|
39
|
+
host = M2Config::Host.new({matching:"example.com", name: "ex"})
|
40
40
|
r = M2Config::Route.new({path:"/blog", target: @dirH})
|
41
41
|
r.host = host
|
42
42
|
res = @db.get_first_row("SELECT * FROM route;")
|
data/spec/server_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe M2Config::Server do
|
|
9
9
|
@db = SQLite3::Database.new DEFAULT_DB_NAME
|
10
10
|
@db.results_as_hash = true
|
11
11
|
@srv = M2Config::Server.new
|
12
|
-
@host = M2Config::Host.new({matching:"example.com"})
|
12
|
+
@host = M2Config::Host.new({matching:"example.com", name: "ex"})
|
13
13
|
end
|
14
14
|
|
15
15
|
after(:each) do
|
metadata
CHANGED
@@ -1,68 +1,60 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: m2config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Arnaud Meuret
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sqlite3
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: sequel
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: uuid
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bundler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,17 +69,15 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rake
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
description: A library to easily manage a Mongrel2 configuration database
|
@@ -99,6 +88,7 @@ extensions: []
|
|
99
88
|
extra_rdoc_files: []
|
100
89
|
files:
|
101
90
|
- .gitignore
|
91
|
+
- .travis.yml
|
102
92
|
- Gemfile
|
103
93
|
- Guardfile
|
104
94
|
- LICENSE
|
@@ -128,33 +118,26 @@ files:
|
|
128
118
|
homepage: https://github.com/ameuret/m2config
|
129
119
|
licenses:
|
130
120
|
- MIT
|
121
|
+
metadata: {}
|
131
122
|
post_install_message:
|
132
123
|
rdoc_options: []
|
133
124
|
require_paths:
|
134
125
|
- lib
|
135
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
127
|
requirements:
|
138
|
-
- -
|
128
|
+
- - '>='
|
139
129
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
hash: -327752419
|
130
|
+
version: 1.9.0
|
144
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
132
|
requirements:
|
147
|
-
- -
|
133
|
+
- - '>='
|
148
134
|
- !ruby/object:Gem::Version
|
149
135
|
version: '0'
|
150
|
-
segments:
|
151
|
-
- 0
|
152
|
-
hash: -327752419
|
153
136
|
requirements: []
|
154
137
|
rubyforge_project:
|
155
|
-
rubygems_version:
|
138
|
+
rubygems_version: 2.0.3
|
156
139
|
signing_key:
|
157
|
-
specification_version:
|
140
|
+
specification_version: 4
|
158
141
|
summary: Manage your Mongrel2 configuration database using handy model classes that
|
159
142
|
map Servers, Hosts, Routes, Directories, Proxies, Handlers and Settings
|
160
143
|
test_files:
|