tccbuilder 0.2.1

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
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Jamie Winsor
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,19 @@
1
+ = TCCBuilder
2
+
3
+ == Synopsis
4
+ Manipulates an existing Tomcat server.xml file to assist in automated
5
+ deployments and configurations.
6
+
7
+ == Note on Patches/Pull Requests
8
+
9
+ * Fork the project.
10
+ * Make your feature addition or bug fix.
11
+ * Add tests for it. This is important so I don't break it in a
12
+ future version unintentionally.
13
+ * Commit, do not mess with rakefile, version, or history.
14
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
15
+ * Send me a pull request. Bonus points for topic branches.
16
+
17
+ == Copyright
18
+
19
+ Copyright (c) 2010 Jamie Winsor. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "tccbuilder"
8
+ gem.summary = %Q{Utilities to assist in configuring Tomcat via Ruby or the command line}
9
+ gem.description = %Q{Utilities to assist in configuring Tomcat via Ruby or the command line}
10
+ gem.email = "resetexistence@gmail.com"
11
+ gem.homepage = "http://github.com/resetexistence/tccbuilder"
12
+ gem.authors = ["Jamie Winsor"]
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
17
+ end
18
+
19
+ require 'rake/testtask'
20
+ Rake::TestTask.new(:test) do |test|
21
+ test.libs << 'lib' << 'test'
22
+ test.pattern = 'test/**/test_*.rb'
23
+ test.verbose = true
24
+ end
25
+
26
+ begin
27
+ require 'rcov/rcovtask'
28
+ Rcov::RcovTask.new do |test|
29
+ test.libs << 'test'
30
+ test.pattern = 'test/**/test_*.rb'
31
+ test.verbose = true
32
+ end
33
+ rescue LoadError
34
+ task :rcov do
35
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
36
+ end
37
+ end
38
+
39
+ task :test => :check_dependencies
40
+
41
+ task :default => :test
42
+
43
+ require 'rake/rdoctask'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "tccbuilder #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.1
data/bin/tc6confbldr ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+ require 'tccbuilder'
4
+
5
+ exit TCCBuilder::Cmdlet.run!(__FILE__, 6, *ARGV)
data/lib/tccbuilder.rb ADDED
@@ -0,0 +1,50 @@
1
+ class TCCBuilder
2
+ require 'ostruct'
3
+ require 'rexml/document'
4
+ require 'tccbuilder/errors'
5
+ require 'tccbuilder/cmdlet'
6
+
7
+ attr_reader :options
8
+ attr_reader :version
9
+ attr_reader :server_xml
10
+ FORMATTER = REXML::Formatters::Pretty.new
11
+
12
+ def initialize(version, options)
13
+ @options = options
14
+ @version = version
15
+ klass = case @version
16
+ when 6
17
+ require 'tccbuilder/tomcat6'
18
+ Tomcat6::ServerXML
19
+ else
20
+ raise UnsupportedTomcatVersion, "Unsupported Tomcat version: #{@version}"
21
+ end
22
+ @server_xml = klass.new(@options.config_file)
23
+ end
24
+
25
+ def add_virtual_host
26
+ raise VirtualHostAlreadyExists if self.server_xml.virtual_host_exists?(self.options.name, self.options.service)
27
+ self.server_xml.add_virtual_host(self.options.name, self.options.service, self.options)
28
+ self.save
29
+ end
30
+
31
+ def rm_virtual_host
32
+ raise VirtualHostNotFound unless self.server_xml.virtual_host_exists?(self.options.name, self.options.service)
33
+ self.server_xml.remove_virtual_host(self.options.name, self.options.service)
34
+ self.save
35
+ end
36
+
37
+ def update_virtual_host
38
+ # Stub
39
+ # self.server_xml.update_virtual_host(self.options.name, self.options.service)
40
+ # self.save
41
+ end
42
+
43
+ protected
44
+
45
+ def save
46
+ File.open(self.server_xml.file, "w+") do |f|
47
+ FORMATTER.write(self.server_xml.xml, f)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,69 @@
1
+ class TCCBuilder
2
+ class Cmdlet
3
+ require 'tccbuilder/options'
4
+
5
+ class << self
6
+ def run!(bin_name, version, *arguments)
7
+ @options = Options.new(bin_name, arguments)
8
+
9
+ if @options.invalid_command
10
+ em_puts "Invalid command: #{@options.invalid_command}"
11
+ @options.show_help = true
12
+ end
13
+
14
+ if @options.missing_options && !@options.invalid_command
15
+ em_puts "Missing options: #{@options.missing_options.join(', ')}"
16
+ @options.show_help = true
17
+ end
18
+
19
+ if @options.invalid_option
20
+ em_puts @options.invalid_option
21
+ @options.show_help = true
22
+ end
23
+
24
+ if @options.show_help
25
+ puts @options.opts
26
+ Kernel.abort
27
+ end
28
+
29
+ tccbuilder = TCCBuilder.new(version, @options)
30
+
31
+ begin
32
+ case @options.command
33
+ when "add_vhost"
34
+ tccbuilder.add_virtual_host
35
+ em_puts "VirtualHost successfully added! [#{@options.name}]"
36
+ when "rm_vhost"
37
+ tccbuilder.rm_virtual_host
38
+ em_puts "VirtualHost successfully deleted! [#{@options.name}]"
39
+ end
40
+ return 0
41
+ rescue VirtualHostAlreadyExists
42
+ em_puts "Virtual Host already exists."
43
+ exit 0
44
+ rescue VirtualHostNotFound
45
+ em_puts "Virtual Host not found."
46
+ exit 0
47
+ rescue ElementNotFound, Errno::ENOENT => err
48
+ em_abort err
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def em_abort(str)
55
+ Kernel.abort console_format(str)
56
+ end
57
+
58
+ def em_puts(str)
59
+ puts console_format(str)
60
+ end
61
+
62
+ private
63
+
64
+ def console_format(str)
65
+ "[Tomcat Config Helper] #{str}"
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,8 @@
1
+ class TCCBuilder
2
+ class TCCBuilderError < StandardError; end
3
+ class UnsupportedTomcatVersion < TCCBuilderError; end
4
+ class VirtualHostNotFound < TCCBuilderError; end
5
+ class VirtualHostAlreadyExists < TCCBuilderError; end
6
+ class XMLError < TCCBuilderError; end
7
+ class ElementNotFound < XMLError; end
8
+ end
@@ -0,0 +1,111 @@
1
+ require 'ostruct'
2
+
3
+ class TCCBuilder
4
+ class Options < OpenStruct
5
+ require 'optparse'
6
+
7
+ attr_reader :opts
8
+ attr_reader :command
9
+ attr_reader :orig_args
10
+
11
+ HELP_FLAG = "-h"
12
+ VALID_COMMANDS = ['add_vhost', 'rm_vhost']
13
+
14
+ def initialize(bin_name, args)
15
+ super()
16
+
17
+ # First argument should be a valid command or help_flag
18
+ self.command = args.slice!(0)
19
+
20
+ # Setup default options
21
+ self.service = "Catalina"
22
+
23
+ @opts = OptionParser.new do |opt|
24
+ opt.banner = "Usage: #{bin_name} [command] [options]"
25
+ opt.separator ""
26
+ opt.separator "Commands:\n"
27
+ VALID_COMMANDS.each do |cmd|
28
+ opt.separator "\t#{cmd}\n"
29
+ end
30
+ opt.separator ""
31
+ opt.separator "Specific options:"
32
+
33
+ opt.on("-c", "--config CONFIG", String, "Path to Tomcat server.xml config file.") do |f|
34
+ self.config_file = f
35
+ end
36
+ opt.on("-n", "--hostname HOSTNAME", String, "Hostname of the target Virtual Host.") do |f|
37
+ self.name = f
38
+ end
39
+ opt.on("-s", "--service [SERVICE]", String, "Service to place Virtual Host under. (Default: Catalina)") do |f|
40
+ self.service = f
41
+ end
42
+ opt.on("-a", "--app-base APP_BASE", String, "Application base of Virtual Host.") do |f|
43
+ self.app_base = f
44
+ end
45
+ opt.on("-p", "--path [PATH]", String, "Path of the Virtual Host's context.") do |f|
46
+ self.path = f
47
+ end
48
+ opt.on("-d", "--doc-base [DOC_BASE]", String, "Document base of the Virtual Host's context.") do |f|
49
+ self.doc_base = f
50
+ end
51
+ opt.on("--debug-level [LEVEL]", Integer, "Debug level of Virtual Host's context.") do |f|
52
+ self.debug = f
53
+ end
54
+ opt.on("--aliases ALIAS_1,ALIAS_2", Array, "Optional list of aliases for Virtual Host.") do |list|
55
+ self.aliases = list
56
+ end
57
+ opt.on("-C", "--class-name [CLASS_NAME]", String, "Java class name of the implementation to use.") do |f|
58
+ self.class_name = f
59
+ end
60
+ opt.on("--disable-unpack-wars", "Enable unpack wars.") do
61
+ self.unpack_wars = false
62
+ end
63
+ opt.on("--reloadable", "Enable reloadable flag.") do
64
+ self.reloadable = true
65
+ end
66
+ opt.on("--disable-auto-deploy", "Disables periodic checks for new or updated web applications while running.") do
67
+ self.auto_deploy = false
68
+ end
69
+ opt.on("--background-processor-delay", "Sets the delay in seconds between invocation of backgroundProcess method on host and child containers.") do |f|
70
+ self.background_processor_delay = f
71
+ end
72
+ opt.on("--disable-deploy-on-startup", "Indicates if web applications from this host should be automatically deployed when Tomcat starts.") do
73
+ self.deploy_on_startup = false
74
+ end
75
+ opt.on_tail(HELP_FLAG, "--help", "Show this message.") do
76
+ self.show_help = true
77
+ end
78
+ end
79
+
80
+ begin
81
+ @opts.parse!(args)
82
+ rescue OptionParser::InvalidOption => e
83
+ self.invalid_option = e
84
+ end
85
+
86
+ if self.command == HELP_FLAG
87
+ self.show_help = true
88
+ else
89
+ mandatory_flags = [:config_file, :name]
90
+ missing_required_opts = mandatory_flags.select { |param| self.send(param).nil? }
91
+ unless missing_required_opts.empty?
92
+ self.missing_options = missing_required_opts
93
+ end
94
+ end
95
+ end
96
+
97
+ private
98
+
99
+ def command=(command)
100
+ if Options.valid_command?(command)
101
+ @command = command
102
+ else
103
+ self.invalid_command = command
104
+ end
105
+ end
106
+
107
+ def self.valid_command?(command)
108
+ VALID_COMMANDS.any? { |cmd| cmd == command } || command == HELP_FLAG
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,6 @@
1
+ class TCCBuilder
2
+ module Tomcat6
3
+ autoload :VirtualHost, 'tccbuilder/tomcat6/virtual_host'
4
+ autoload :ServerXML, 'tccbuilder/tomcat6/server_xml'
5
+ end
6
+ end
@@ -0,0 +1,84 @@
1
+ class TCCBuilder
2
+ module Tomcat6
3
+ class ServerXML
4
+ require 'ostruct'
5
+ require 'rexml/document'
6
+
7
+ attr_reader :xml
8
+ attr_reader :file
9
+ FORMATTER = REXML::Formatters::Pretty.new
10
+
11
+ def initialize(file)
12
+ raw = File.read(file)
13
+ @file = file
14
+ @xml = REXML::Document.new(raw, :raw => :all).root
15
+ end
16
+
17
+ def add_virtual_host(name, service, params)
18
+ host = VirtualHost.new(name, service)
19
+
20
+ # All implementations of Host support the following attribute:
21
+ host.app_base = params.app_base if params.respond_to?(:app_base)
22
+ host.auto_deploy = params.auto_deploy if params.respond_to?(:auto_deploy)
23
+ host.background_processor_delay = params.background_processor_delay if params.respond_to?(:background_processor_delay)
24
+ host.class_name = params.class_name if params.respond_to?(:class_name)
25
+ host.deploy_on_startup = params.deploy_on_startup if params.respond_to?(:deploy_on_startup)
26
+ # The standard implementation of Host is org.apache.catalina.core.StandardHost. It supports the following additional attributes:
27
+ host.unpack_wars = params.unpack_wars if params.respond_to?(:unpack_wars)
28
+
29
+ # All implementations of Context support the following attributes:
30
+ host.path = params.path if params.respond_to?(:path)
31
+ host.doc_base = params.doc_base if params.respond_to?(:doc_base)
32
+ host.debug = params.debug if params.respond_to?(:debug)
33
+ host.reloadable = params.reloadable if params.respond_to?(:reloadable)
34
+
35
+ if params.aliases
36
+ params.aliases.each do |al|
37
+ host.add_alias(al)
38
+ end
39
+ end
40
+
41
+ # TODO: Make valves configurable
42
+ host.add_valve "org.apache.catalina.valves.AccessLogValve", :directory => "logs",
43
+ :prefix => "#{name}_access_log.",
44
+ :suffix => ".log",
45
+ :pattern => "common"
46
+
47
+ engine_element = get_engine_element(service)
48
+ engine_element.add_element(host.to_rexml)
49
+ end
50
+
51
+ def remove_virtual_host(name, service)
52
+ @xml.delete_element("Service[@name='#{service}']/Engine/Host[@name='#{name}']")
53
+ end
54
+
55
+ def update_virtual_host(name, service, params)
56
+ host = @xml.elements["Server[@name='#{service}']/Engine/Host[@name='#{name}']"]
57
+ end
58
+
59
+ def virtual_host_exists?(name, service)
60
+ host = @xml.elements["Service[@name='#{service}']/Engine/Host[@name='#{name}']"]
61
+ host.nil? ? false : true
62
+ end
63
+
64
+ protected
65
+
66
+ def get_engine_element(service)
67
+ service_element = get_service_element(service)
68
+ engine_element = service_element.elements["Engine"]
69
+ if engine_element.nil?
70
+ raise ElementNotFound, "Engine element not found for Service: '#{service}'."
71
+ end
72
+ return engine_element
73
+ end
74
+
75
+ def get_service_element(service)
76
+ service_element = @xml.elements["Service[@name='#{service}']"]
77
+ if service_element.nil?
78
+ raise ElementNotFound, "Service element with name '#{service}' was not found."
79
+ end
80
+ return service_element
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,111 @@
1
+ class TCCBuilder
2
+ module Tomcat6
3
+ class VirtualHost
4
+ attr_reader :service
5
+
6
+ attr_reader :app_base
7
+ attr_reader :auto_deploy
8
+ attr_reader :background_processor_delay
9
+ attr_reader :class_name
10
+ attr_reader :deploy_on_startup
11
+ attr_reader :name
12
+ attr_reader :unpack_wars
13
+
14
+ attr_reader :path
15
+ attr_reader :doc_base
16
+ attr_reader :debug
17
+ attr_reader :reloadable
18
+
19
+ attr_reader :aliases
20
+
21
+ def initialize(name, service)
22
+ @host_element = REXML::Element.new("Host")
23
+ @context_element = nil
24
+ @service = service
25
+ self.name = name
26
+ end
27
+
28
+ def app_base=(value)
29
+ add_host_attribute("appBase", value)
30
+ end
31
+
32
+ def auto_deploy=(value)
33
+ add_host_attribute("autoDeploy", value)
34
+ end
35
+
36
+ def background_processor_delay=(value)
37
+ add_host_attribute("backgroundProcessorDelay", value)
38
+ end
39
+
40
+ def class_name=(value)
41
+ add_host_attribute("className", value)
42
+ end
43
+
44
+ def deploy_on_startup=(value)
45
+ add_host_attribute("deployOnStartup", value)
46
+ end
47
+
48
+ def name
49
+ get_host_attribute("name")
50
+ end
51
+
52
+ def name=(value)
53
+ add_host_attribute("name", value)
54
+ end
55
+
56
+ def unpack_wars=(value)
57
+ add_host_attribute("unpackWars", value)
58
+ end
59
+
60
+ def path=(value)
61
+ add_context_attribute("path", value)
62
+ end
63
+
64
+ def doc_base=(value)
65
+ add_context_attribute("docBase", value)
66
+ end
67
+
68
+ def debug=(value)
69
+ add_context_attribute("debug", value)
70
+ end
71
+
72
+ def reloadable=(value)
73
+ add_context_attribute("reloadable", value)
74
+ end
75
+
76
+ def add_alias(text)
77
+ al = @host_element.add_element("Alias")
78
+ al.text = text
79
+ return al
80
+ end
81
+
82
+ def add_valve(class_name, options = {})
83
+ valve = @host_element.add_element("Valve")
84
+ valve.attributes["className"] = class_name
85
+ options.each do |key, value|
86
+ valve.attributes[key.to_s] = value
87
+ end
88
+ return valve
89
+ end
90
+
91
+ def to_rexml
92
+ @host_element
93
+ end
94
+
95
+ private
96
+
97
+ def add_host_attribute(name, value)
98
+ @host_element.attributes[name] = value
99
+ end
100
+
101
+ def get_host_attribute(name)
102
+ @host_element.attributes[name]
103
+ end
104
+
105
+ def add_context_attribute(name, value)
106
+ @context_element = host.add_element("Context") if @context_element.nil?
107
+ @context_element.attributes[name] = value
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,60 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{tccbuilder}
8
+ s.version = "0.2.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jamie Winsor"]
12
+ s.date = %q{2010-09-19}
13
+ s.default_executable = %q{tc6confbldr}
14
+ s.description = %q{Utilities to assist in configuring Tomcat via Ruby or the command line}
15
+ s.email = %q{resetexistence@gmail.com}
16
+ s.executables = ["tc6confbldr"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/tc6confbldr",
29
+ "lib/tccbuilder.rb",
30
+ "lib/tccbuilder/cmdlet.rb",
31
+ "lib/tccbuilder/errors.rb",
32
+ "lib/tccbuilder/options.rb",
33
+ "lib/tccbuilder/tomcat6.rb",
34
+ "lib/tccbuilder/tomcat6/server_xml.rb",
35
+ "lib/tccbuilder/tomcat6/virtual_host.rb",
36
+ "tccbuilder.gemspec",
37
+ "test/helper.rb",
38
+ "test/test_tccbuilder.rb"
39
+ ]
40
+ s.homepage = %q{http://github.com/resetexistence/tccbuilder}
41
+ s.rdoc_options = ["--charset=UTF-8"]
42
+ s.require_paths = ["lib"]
43
+ s.rubygems_version = %q{1.3.7}
44
+ s.summary = %q{Utilities to assist in configuring Tomcat via Ruby or the command line}
45
+ s.test_files = [
46
+ "test/helper.rb",
47
+ "test/test_tccbuilder.rb"
48
+ ]
49
+
50
+ if s.respond_to? :specification_version then
51
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
52
+ s.specification_version = 3
53
+
54
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
+ else
56
+ end
57
+ else
58
+ end
59
+ end
60
+
data/test/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'tcchelper'
7
+
8
+ class Test::Unit::TestCase
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'helper'
2
+
3
+ class TestTCCBuilder < Test::Unit::TestCase
4
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tccbuilder
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
11
+ platform: ruby
12
+ authors:
13
+ - Jamie Winsor
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-19 00:00:00 -07:00
19
+ default_executable: tc6confbldr
20
+ dependencies: []
21
+
22
+ description: Utilities to assist in configuring Tomcat via Ruby or the command line
23
+ email: resetexistence@gmail.com
24
+ executables:
25
+ - tc6confbldr
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - LICENSE
30
+ - README.rdoc
31
+ files:
32
+ - .document
33
+ - .gitignore
34
+ - LICENSE
35
+ - README.rdoc
36
+ - Rakefile
37
+ - VERSION
38
+ - bin/tc6confbldr
39
+ - lib/tccbuilder.rb
40
+ - lib/tccbuilder/cmdlet.rb
41
+ - lib/tccbuilder/errors.rb
42
+ - lib/tccbuilder/options.rb
43
+ - lib/tccbuilder/tomcat6.rb
44
+ - lib/tccbuilder/tomcat6/server_xml.rb
45
+ - lib/tccbuilder/tomcat6/virtual_host.rb
46
+ - tccbuilder.gemspec
47
+ - test/helper.rb
48
+ - test/test_tccbuilder.rb
49
+ has_rdoc: true
50
+ homepage: http://github.com/resetexistence/tccbuilder
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options:
55
+ - --charset=UTF-8
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ hash: 3
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project:
79
+ rubygems_version: 1.3.7
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Utilities to assist in configuring Tomcat via Ruby or the command line
83
+ test_files:
84
+ - test/helper.rb
85
+ - test/test_tccbuilder.rb