landlord 0.1.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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "handlebar"
4
+
5
+ group :development do
6
+ gem "bundler"
7
+ gem "jeweler"
8
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Scott Tadman
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,14 @@
1
+ = landlord
2
+
3
+ Landlord is a tool for managing tenant applications.
4
+
5
+ Examples:
6
+
7
+ landlord add example.com --redirect=www.example.com
8
+ landlord list
9
+ landlord show example.com
10
+
11
+ == Copyright
12
+
13
+ Copyright (c) 2012 Scott Tadman, The Working Group Inc. See LICENSE.txt for
14
+ further details.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+
6
+ begin
7
+ Bundler.setup(:default, :development)
8
+ rescue Bundler::BundlerError => e
9
+ $stderr.puts e.message
10
+ $stderr.puts "Run `bundle install` to install missing gems"
11
+ exit e.status_code
12
+ end
13
+
14
+ require 'rake'
15
+ require 'jeweler'
16
+
17
+ Jeweler::Tasks.new do |gem|
18
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
19
+ gem.name = "landlord"
20
+ gem.homepage = "http://github.com/twg/landlord"
21
+ gem.license = "MIT"
22
+ gem.summary = %Q{Web server virtual-host tenant management tool}
23
+ gem.description = %Q{A command-line tool for managing multiple virtual-host configurations on a web server}
24
+ gem.email = "github@tadman.ca"
25
+ gem.authors = ["Scott Tadman"]
26
+ # dependencies defined in Gemfile
27
+ end
28
+
29
+ Jeweler::RubygemsDotOrgTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bin/landlord ADDED
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ $LOAD_PATH << File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
6
+
7
+ require 'landlord'
8
+
9
+ def show_version
10
+ puts "landlord #{Landlord::VERSION}"
11
+ end
12
+
13
+ # == Main ===================================================================
14
+
15
+ action = nil
16
+
17
+ options = {
18
+ :redirects => [ ],
19
+ :aliases => [ ]
20
+ }
21
+
22
+ OptionParser.new do |parser|
23
+ parser.banner = "Usage: landlord [options] command hostname [hostname [...]]"
24
+
25
+ parser.separator ""
26
+ parser.separator "Specific commands:"
27
+
28
+ parser.separator " %-32s %s" % [ 'add', 'Add a virtual host and configuration file' ]
29
+ parser.separator " %-32s %s" % [ 'remove', 'Remove a virtual host configuration file' ]
30
+ parser.separator " %-32s %s" % [ 'enable', 'Enable a virtual host configuration file' ]
31
+ parser.separator " %-32s %s" % [ 'disable', 'Disable a virtual host configuration file' ]
32
+
33
+ parser.separator ""
34
+ parser.separator "Specific options:"
35
+
36
+ parser.on('-a', '--alias=s', 'Create an alias for this virtual host') do |s|
37
+ options[:aliases] << s
38
+ end
39
+ parser.on('-r', '--redirect=s', 'Create a redirect for this virtual host') do |s|
40
+ options[:redirects] << s
41
+ end
42
+ parser.on('-f', '--config=s', 'Specify an alternate configuration file') do |s|
43
+ options[:config] = s
44
+ end
45
+ parser.on('--verbose', 'Verbose mode') do
46
+ options[:verbose] = true
47
+ end
48
+ parser.on('-v', '--version', 'Display version number') do
49
+ show_version
50
+ exit(0)
51
+ end
52
+ parser.on('-h', '--help', 'Show this help') do
53
+ puts parser
54
+ exit(0)
55
+ end
56
+ end.parse!.each do |arg|
57
+ case (arg)
58
+ when /\./
59
+ virtual_host = Landlord::VirtualHost.new(arg)
60
+
61
+ if (action)
62
+ virtual_host.send(:"#{action}!")
63
+ else
64
+ puts "landlord: No command specified"
65
+ exit(-1)
66
+ end
67
+ when 'list'
68
+ Landlord::VirtualHost.each do |config|
69
+ puts config[:server_name]
70
+ if (aliases = config[:aliases])
71
+ aliases.each do |as_alias|
72
+ puts "\t+ #{as_alias} (Alias)"
73
+ end
74
+ end
75
+ if (redirects = config[:redirects])
76
+ redirects.each do |as_redirect|
77
+ puts "\t+ #{as_redirect} (Redirect)"
78
+ end
79
+ end
80
+ end
81
+ when 'add', 'remove', 'enable', 'disable'
82
+ action = arg.to_sym
83
+ end
84
+ end
data/landlord.gemspec ADDED
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "landlord"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Scott Tadman"]
12
+ s.date = "2012-01-27"
13
+ s.description = "A command-line tool for managing multiple virtual-host configurations on a web server"
14
+ s.email = "github@tadman.ca"
15
+ s.executables = ["landlord"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/landlord",
28
+ "landlord.gemspec",
29
+ "lib/landlord.rb",
30
+ "lib/landlord/config.rb",
31
+ "lib/landlord/virtual_host.rb",
32
+ "templates/virtual_host.apache.conf",
33
+ "test/expected_results/example_virtual_host.conf",
34
+ "test/expected_results/example_virtual_host_with_aliases.conf",
35
+ "test/expected_results/example_virtual_host_with_redirects.conf",
36
+ "test/helper.rb",
37
+ "test/test_landlord.rb",
38
+ "test/test_landlord_config.rb",
39
+ "test/test_landlord_virtual_host.rb"
40
+ ]
41
+ s.homepage = "http://github.com/twg/landlord"
42
+ s.licenses = ["MIT"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = "1.8.11"
45
+ s.summary = "Web server virtual-host tenant management tool"
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<handlebar>, [">= 0"])
52
+ s.add_development_dependency(%q<bundler>, [">= 0"])
53
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
54
+ else
55
+ s.add_dependency(%q<handlebar>, [">= 0"])
56
+ s.add_dependency(%q<bundler>, [">= 0"])
57
+ s.add_dependency(%q<jeweler>, [">= 0"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<handlebar>, [">= 0"])
61
+ s.add_dependency(%q<bundler>, [">= 0"])
62
+ s.add_dependency(%q<jeweler>, [">= 0"])
63
+ end
64
+ end
65
+
data/lib/landlord.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'yaml'
2
+
3
+ module Landlord
4
+ # == Constants ============================================================
5
+
6
+ VERSION = File.read(File.expand_path(File.join('..', 'VERSION'), File.dirname(__FILE__))).chomp.freeze
7
+
8
+ DEFAULT_CONFIG_PATH = '/etc/landlord.conf'.freeze
9
+
10
+ # == Submodules ===========================================================
11
+
12
+ autoload(:Config, 'landlord/config')
13
+ autoload(:VirtualHost, 'landlord/virtual_host')
14
+
15
+ # == Module Methods =======================================================
16
+
17
+ def self.config_path=(path)
18
+ @config_path = path
19
+ end
20
+
21
+ def self.config_path
22
+ @config_path || DEFAULT_CONFIG_PATH
23
+ end
24
+
25
+ def self.config
26
+ @config ||= Config.new(self.config_path)
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ require 'ostruct'
2
+
3
+ class Landlord::Config < OpenStruct
4
+ # == Constants ============================================================
5
+
6
+ DEFAULTS = {
7
+ :config_file => '/etc/landlord.conf'.freeze,
8
+ :template_dir => '/etc/landlord'.freeze,
9
+ :virtual_host_base_dir => '/web'.freeze,
10
+ :virtual_host_config_dir => '/etc/httpd/vhosts.d'.freeze,
11
+ :server_type => :apache,
12
+ :virtual_host_subdirs => %w[ . shared shared/log shared/config releases ]
13
+ }.freeze
14
+
15
+ # == Class Methods ========================================================
16
+
17
+ # == Instance Methods =====================================================
18
+
19
+ def initialize(config_file = nil)
20
+ config = DEFAULTS
21
+
22
+ if (config_file and File.exist?(config_file))
23
+ config = DEFAULTS.merge(YAML.load(File.read(config_file)))
24
+ end
25
+
26
+ super(config)
27
+
28
+ self.disabled_virtual_host_config_dir ||= File.expand_path(
29
+ 'disabled',
30
+ self.virtual_host_config_dir
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,169 @@
1
+ require 'handlebar'
2
+ require 'fileutils'
3
+
4
+ class Landlord::VirtualHost
5
+ # == Constants ============================================================
6
+
7
+ # == Class Methods ========================================================
8
+
9
+ def self.each
10
+ Dir.glob(File.expand_path("*.conf", Landlord.config.virtual_host_config_dir)).each do |path|
11
+ config = {
12
+ :server_name => File.basename(path).sub(/\.conf$/, ''),
13
+ :aliases => [ ],
14
+ :redirects => [ ]
15
+ }
16
+
17
+ File.open(path).readlines.each do |line|
18
+ line.chomp!
19
+
20
+ if (line.match(/\# VirtualHost (.*)/))
21
+ aliases = $1.split(/\s+/)
22
+
23
+ server_name = aliases.shift
24
+
25
+ config[:aliases] += aliases
26
+ elsif (line.match(/\# VirtualHost:Redirect (.*)/))
27
+ redirects = $1.split(/\s+/)
28
+
29
+ server_name = redirects.shift
30
+
31
+ config[:redirects] += redirects
32
+ end
33
+ end
34
+
35
+ yield(config)
36
+ end
37
+ end
38
+
39
+ # == Instance Methods =====================================================
40
+
41
+ def initialize(server_name, options = nil)
42
+ @options = {
43
+ :server_name => server_name.freeze
44
+ }
45
+
46
+ if (options)
47
+ @options.merge!(options)
48
+ end
49
+
50
+ @options[:virtual_host_path] ||= File.expand_path(
51
+ @options[:server_name],
52
+ Landlord.config.virtual_host_base_dir
53
+ )
54
+ end
55
+
56
+ def server_name
57
+ @options[:server_name]
58
+ end
59
+
60
+ def config_file_path(group = nil)
61
+ File.expand_path(
62
+ "#{@options[:server_name]}.conf",
63
+ case (group)
64
+ when :disabled
65
+ Landlord.config.disabled_virtual_host_config_dir
66
+ else
67
+ Landlord.config.virtual_host_config_dir
68
+ end
69
+ )
70
+ end
71
+
72
+ def config_template_path(type = nil)
73
+ conf_file = [
74
+ 'virtual_host',
75
+ type || Landlord.config.server_type,
76
+ 'conf'
77
+ ].join('.')
78
+
79
+ Landlord.config.virtual_host_template or
80
+ [
81
+ File.expand_path(
82
+ conf_file,
83
+ Landlord.config.template_dir
84
+ ),
85
+ File.expand_path(
86
+ File.join(
87
+ '..',
88
+ '..',
89
+ 'templates',
90
+ conf_file
91
+ ),
92
+ File.dirname(__FILE__)
93
+ )
94
+ ].find do |path|
95
+ File.exist?(path)
96
+ end
97
+ end
98
+
99
+ def config_file(type = nil)
100
+ Handlebar::Template.new(
101
+ File.read(self.config_template_path(type))
102
+ ).render(
103
+ :server_name => @options[:server_name],
104
+ :virtual_host_path => @options[:virtual_host_path],
105
+ :server_aliases => @options[:aliases] && @options[:aliases].join(' '),
106
+ :server_redirects => @options[:redirects] && @options[:redirects].collect do |redirect|
107
+ {
108
+ :server_name => @options[:server_name],
109
+ :redirect => redirect
110
+ }
111
+ end,
112
+ :rack_env => @options[:rack_env],
113
+ :rails_env => @options[:rails_env]
114
+ ).sub(/\n+\Z/, "\n")
115
+ end
116
+
117
+ def enable!
118
+ _config_file_path = self.config_file_path
119
+
120
+ if (File.exist?(_config_file_path))
121
+ # File already exists?!
122
+ else
123
+ File.rename(self.config_file_path(:disabled), _config_file_path)
124
+ end
125
+ end
126
+
127
+ def disable!
128
+ _config_file_path = self.config_file_path
129
+
130
+ if (File.exist?(_config_file_path))
131
+ File.rename(_config_file_path, self.config_file_path(:disabled))
132
+ end
133
+ end
134
+
135
+ def add!
136
+ File.open(self.config_file_path, 'w') do |f|
137
+ f.write(self.config_file)
138
+ end
139
+
140
+ _virtual_host_path = @options[:virtual_host_path]
141
+
142
+ Landlord.config.virtual_host_subdirs.each do |dir|
143
+ _path = File.expand_path(
144
+ dir,
145
+ _virtual_host_path
146
+ )
147
+
148
+ unless (File.exist?(_path))
149
+ FileUtils.mkdir_p(_path)
150
+
151
+ if (Landlord.config.chown_user and Landlord.config.chown_group)
152
+ FileUtils.chown_R(
153
+ Landlord.config.chown_user,
154
+ Landlord.config.chown_group,
155
+ _path
156
+ )
157
+ end
158
+ end
159
+ end
160
+ end
161
+
162
+ def remove!
163
+ _config_file_path = self.config_file_path
164
+
165
+ if (File.exist?(_config_file_path))
166
+ File.unlink(_config_file_path)
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,21 @@
1
+ # VirtualHost {{server_name}} {{server_aliases}}
2
+ <VirtualHost *:80>
3
+ ServerName {{server_name}}{{?server_aliases}}
4
+ ServerAlias {{server_aliases}}{{/}}{{?rack_env}}
5
+
6
+ RackEnv {{rack_env}}{{/}}
7
+
8
+ DocumentRoot {{virtual_host_path}}/current/public
9
+
10
+ CustomLog {{virtual_host_path}}/shared/log/access.log combined
11
+ ErrorLog {{virtual_host_path}}/shared/log/error.log
12
+ </VirtualHost>
13
+
14
+ {{?server_redirects}}{{:server_redirects}}# VirtualHost:Redirect {{server_name}} {{redirect}}
15
+ <VirtualHost *:80>
16
+ ServerName {{redirect}}
17
+
18
+ RedirectMatch permanent /(.*) http://{{server_name}}/$1
19
+ </VirtualHost>
20
+
21
+ {{/}}{{/}}
@@ -0,0 +1,9 @@
1
+ # VirtualHost example.com
2
+ <VirtualHost *:80>
3
+ ServerName example.com
4
+
5
+ DocumentRoot /web/example.com/current/public
6
+
7
+ CustomLog /web/example.com/shared/log/access.log combined
8
+ ErrorLog /web/example.com/shared/log/error.log
9
+ </VirtualHost>
@@ -0,0 +1,10 @@
1
+ # VirtualHost example.com example.net example.org
2
+ <VirtualHost *:80>
3
+ ServerName example.com
4
+ ServerAlias example.net example.org
5
+
6
+ DocumentRoot /web/example.com/current/public
7
+
8
+ CustomLog /web/example.com/shared/log/access.log combined
9
+ ErrorLog /web/example.com/shared/log/error.log
10
+ </VirtualHost>
@@ -0,0 +1,23 @@
1
+ # VirtualHost example.com
2
+ <VirtualHost *:80>
3
+ ServerName example.com
4
+
5
+ DocumentRoot /web/example.com/current/public
6
+
7
+ CustomLog /web/example.com/shared/log/access.log combined
8
+ ErrorLog /web/example.com/shared/log/error.log
9
+ </VirtualHost>
10
+
11
+ # VirtualHost:Redirect example.com example.net
12
+ <VirtualHost *:80>
13
+ ServerName example.net
14
+
15
+ RedirectMatch permanent /(.*) http://example.com/$1
16
+ </VirtualHost>
17
+
18
+ # VirtualHost:Redirect example.com example.org
19
+ <VirtualHost *:80>
20
+ ServerName example.org
21
+
22
+ RedirectMatch permanent /(.*) http://example.com/$1
23
+ </VirtualHost>
data/test/helper.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+
12
+ require 'test/unit'
13
+
14
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
16
+
17
+ require 'landlord'
18
+
19
+ class Test::Unit::TestCase
20
+ def expected_result(name)
21
+ File.read(
22
+ File.expand_path(
23
+ File.join('expected_results', name),
24
+ File.dirname(__FILE__)
25
+ )
26
+ )
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class TestLandlord < Test::Unit::TestCase
4
+ def test_module
5
+ assert Landlord
6
+
7
+ assert Landlord::VERSION
8
+ assert !Landlord::VERSION.empty?
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestLandlordConfig < Test::Unit::TestCase
4
+ def test_module
5
+ config = Landlord::Config.new
6
+
7
+ assert_equal :apache, config.server_type
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ require 'helper'
2
+
3
+ class TestLandlordVirtualHost < Test::Unit::TestCase
4
+ def setup
5
+ Landlord.config.template_dir = File.expand_path(
6
+ File.join('..', 'templates'),
7
+ File.dirname(__FILE__)
8
+ )
9
+ end
10
+
11
+ def test_simple_config
12
+ virtual_host = Landlord::VirtualHost.new('example.com')
13
+
14
+ assert virtual_host
15
+
16
+ assert_equal 'example.com', virtual_host.server_name
17
+
18
+ expected_conf = expected_result('example_virtual_host.conf')
19
+
20
+ assert_equal expected_conf, virtual_host.config_file
21
+ end
22
+
23
+ def test_config_with_aliases
24
+ virtual_host = Landlord::VirtualHost.new('example.com', :aliases => %w[ example.net example.org ])
25
+
26
+ expected_conf = expected_result('example_virtual_host_with_aliases.conf')
27
+
28
+ assert_equal expected_conf, virtual_host.config_file
29
+ end
30
+
31
+ def test_config_with_redirects
32
+ virtual_host = Landlord::VirtualHost.new('example.com', :redirects => %w[ example.net example.org ])
33
+
34
+ expected_conf = expected_result('example_virtual_host_with_redirects.conf')
35
+
36
+ assert_equal expected_conf, virtual_host.config_file
37
+ end
38
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: landlord
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Scott Tadman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: handlebar
16
+ requirement: &2158107120 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2158107120
25
+ - !ruby/object:Gem::Dependency
26
+ name: bundler
27
+ requirement: &2158106540 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2158106540
36
+ - !ruby/object:Gem::Dependency
37
+ name: jeweler
38
+ requirement: &2158105700 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2158105700
47
+ description: A command-line tool for managing multiple virtual-host configurations
48
+ on a web server
49
+ email: github@tadman.ca
50
+ executables:
51
+ - landlord
52
+ extensions: []
53
+ extra_rdoc_files:
54
+ - LICENSE.txt
55
+ - README.rdoc
56
+ files:
57
+ - .document
58
+ - Gemfile
59
+ - LICENSE.txt
60
+ - README.rdoc
61
+ - Rakefile
62
+ - VERSION
63
+ - bin/landlord
64
+ - landlord.gemspec
65
+ - lib/landlord.rb
66
+ - lib/landlord/config.rb
67
+ - lib/landlord/virtual_host.rb
68
+ - templates/virtual_host.apache.conf
69
+ - test/expected_results/example_virtual_host.conf
70
+ - test/expected_results/example_virtual_host_with_aliases.conf
71
+ - test/expected_results/example_virtual_host_with_redirects.conf
72
+ - test/helper.rb
73
+ - test/test_landlord.rb
74
+ - test/test_landlord_config.rb
75
+ - test/test_landlord_virtual_host.rb
76
+ homepage: http://github.com/twg/landlord
77
+ licenses:
78
+ - MIT
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 1.8.11
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Web server virtual-host tenant management tool
101
+ test_files: []