diff --git a/Manifest.txt b/Manifest.txt
index 96fb52e..9728226 100644
--- a/Manifest.txt
+++ b/Manifest.txt
@@ -17,5 +17,11 @@ conf/templates/standard/Mediator.tpl
conf/templates/standard/Proxy.tpl
conf/templates/standard/SimpleCommand.tpl
lib/pure_m_v_c_gen.rb
+lib/pure_m_v_c_gen/ant_checker.rb
+lib/pure_m_v_c_gen/commands/check_command.rb
+lib/pure_m_v_c_gen/commands/command_extensions.rb
+lib/pure_m_v_c_gen/commands/initialize_command.rb
+lib/pure_m_v_c_gen/commands/new_command.rb
lib/pure_m_v_c_gen/version.rb
+puremvc-gen.gemspec
test/test_pure_m_v_c_gen.rb
diff --git a/Rakefile b/Rakefile
index 386d6df..ee2bb52 100644
--- a/Rakefile
+++ b/Rakefile
@@ -25,6 +25,7 @@ Hoe.new(PKG_NAME, PKG_VERSION) do |p|
p.summary = p.description # More details later??
p.remote_rdoc_dir = PKG_NAME # Release to /PKG_NAME
# p.changes = p.paragraphs_of('CHANGELOG', 0..1).join("\n\n")
+ p.extra_deps << ["cmdparse", ">= 2.0.2"]
p.need_zip = true
p.need_tar = false
end
diff --git a/bin/puremvc-gen b/bin/puremvc-gen
index e2b613e..fe83d84 100644
--- a/bin/puremvc-gen
+++ b/bin/puremvc-gen
@@ -2,45 +2,44 @@
require 'rubygems'
require 'cmdparse'
-BUILDFILE = File.join(File.dirname(__FILE__), '..', 'conf', 'build.xml')
+PMVC_GEN_LIB = File.join(File.dirname(__FILE__), '..', 'lib', 'pure_m_v_c_gen')
+require File.join(PMVC_GEN_LIB, 'ant_checker')
+
+unless PureMVCGen::AntChecker.has_ant_installed?
+ err = <<-EOL
+ You must have ANT installed to run puremvc-gen.
+ Install it! ==> http://ant.apache.org
+ If you have it installed, ensure it is on your path.
+ EOL
+ puts err
+ exit 1
+end
+
+CMD_PATH = File.join(PMVC_GEN_LIB, 'commands')
+
+require File.join(CMD_PATH, 'command_extensions')
+require File.join(CMD_PATH, 'check_command')
+require File.join(CMD_PATH, 'initialize_command')
+require File.join(CMD_PATH, 'new_command')
+
+include PureMVCGen::Commands
+
+PMVC_GEN_HOME = File.join(File.dirname(__FILE__), '..', 'conf')
+BUILDFILE = File.join(PMVC_GEN_HOME, 'build.xml')
def call_ant(args='')
- system "ant -f #{BUILDFILE} -Dbasedir=#{Dir.pwd} #{args}"
-end
-
-class CheckCommand < CmdParse::Command
-
- def initialize
- super('check', false)
- self.short_desc = "Validates that all required property settings are current detected"
- end
-
- def execute(args)
- call_ant "validate-properties"
- end
-end
-
-class InitializeCommand < CmdParse::Command
-
- def initialize
- super('init', false)
- self.short_desc = "Initializes the current working directory with a new PureMVC project"
- end
-
- def execute(args)
- call_ant "new-pmvc"
- end
-
+ system "ant -f #{BUILDFILE} -Dpmvcgen.dir=#{PMVC_GEN_HOME} -Dbasedir=#{Dir.pwd} #{args}"
end
cmd = CmdParse::CommandParser.new(true, true)
-cmd.program_name = "puremvc-gen"
-cmd.version = [0, 0, 1]
+cmd.program_name = "puremvc-gen "
+cmd.program_version = [0, 0, 1]
cmd.add_command(CmdParse::HelpCommand.new)
cmd.add_command(CmdParse::VersionCommand.new)
cmd.add_command(CheckCommand.new)
cmd.add_command(InitializeCommand.new)
+cmd.add_command(NewCommand.new)
cmd.parse
diff --git a/conf/build.xml b/conf/build.xml
index 5feff05..160186d 100644
--- a/conf/build.xml
+++ b/conf/build.xml
@@ -233,7 +233,7 @@
-
${log.gen.macro.command}
-
${log.gen.simple.command}
+
+
+
-
+
diff --git a/lib/pure_m_v_c_gen/ant_checker.rb b/lib/pure_m_v_c_gen/ant_checker.rb
new file mode 100644
index 0000000..9861001
--- /dev/null
+++ b/lib/pure_m_v_c_gen/ant_checker.rb
@@ -0,0 +1,34 @@
+module PureMVCGen
+ class AntChecker
+
+ # Determines if ANT is installed on the system
+ def self.has_ant_installed?
+ AntChecker.find_in_path("ant")
+ end
+
+ # Searches the path, looking for the given utility. If an executable
+ # file is found that matches the parameter, this returns true.
+ def self.find_in_path(utility)
+ path = (ENV['PATH'] || "").split(File::PATH_SEPARATOR)
+ suffixes = self.on_windows? ? self.windows_executable_extensions : [""]
+
+ path.each do |dir|
+ suffixes.each do |sfx|
+ file = File.join(dir, utility + sfx)
+ return true if File.executable?(file)
+ end
+ end
+
+ false
+ end
+
+ def self.on_windows?
+ RUBY_PLATFORM =~ /mswin|mingw/
+ end
+
+ def self.windows_executable_extensions
+ %w(.exe .bat .com .cmd)
+ end
+
+ end
+end
\ No newline at end of file
diff --git a/lib/pure_m_v_c_gen/commands/check_command.rb b/lib/pure_m_v_c_gen/commands/check_command.rb
new file mode 100644
index 0000000..ebe27f8
--- /dev/null
+++ b/lib/pure_m_v_c_gen/commands/check_command.rb
@@ -0,0 +1,16 @@
+module PureMVCGen
+ module Commands
+ class CheckCommand < CmdParse::Command
+
+ def initialize
+ super('check', false)
+ self.short_desc = "Validates that all required property settings are current detected"
+ end
+
+ def execute(args)
+ call_ant "validate-properties"
+ end
+
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/pure_m_v_c_gen/commands/command_extensions.rb b/lib/pure_m_v_c_gen/commands/command_extensions.rb
new file mode 100644
index 0000000..998ef7b
--- /dev/null
+++ b/lib/pure_m_v_c_gen/commands/command_extensions.rb
@@ -0,0 +1,14 @@
+module CmdParse
+ class Command
+ # injects our common options
+ def default_options(&block)
+ CmdParse::OptionParserWrapper.new do |opt|
+ opt.on("-h", "--help") do
+ self.show_help
+ exit
+ end
+ yield(opt)
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/pure_m_v_c_gen/commands/initialize_command.rb b/lib/pure_m_v_c_gen/commands/initialize_command.rb
new file mode 100644
index 0000000..8767ced
--- /dev/null
+++ b/lib/pure_m_v_c_gen/commands/initialize_command.rb
@@ -0,0 +1,16 @@
+module PureMVCGen
+ module Commands
+ class InitializeCommand < CmdParse::Command
+
+ def initialize
+ super('init', false)
+ self.short_desc = "Initializes the current working directory with a new PureMVC project"
+ end
+
+ def execute(args)
+ call_ant "new-pmvc"
+ end
+
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/pure_m_v_c_gen/commands/new_command.rb b/lib/pure_m_v_c_gen/commands/new_command.rb
new file mode 100644
index 0000000..b0ea661
--- /dev/null
+++ b/lib/pure_m_v_c_gen/commands/new_command.rb
@@ -0,0 +1,86 @@
+module PureMVCGen
+ module Commands
+ class NewCommand < CmdParse::Command
+
+ def initialize
+ super('new', true)
+ self.short_desc = "Command to generate PureMVC classes"
+
+ # add sub commands
+ self.add_command(CreateCommand.new)
+ self.add_command(CreateMediator.new)
+ self.add_command(CreateProxy.new)
+ end
+
+ class CreateCommand < CmdParse::Command
+
+ def initialize
+ super('command', false)
+ @type = :simple
+ self.short_desc = "Creates a simple or macro command (defaults to simple)."
+ self.description = <<-EOL
+ Generates a simple or macro command.
+ Generating a simple command is the default behavior, unless the macro switch is passed:
+ -m or --macro
+
+ If no other switches are passed, the ANT script will prompt for a command name and constant,
+ however these may be passed on the command line with the -n (or --name) and -c (or --const) switches.
+ EOL
+ self.options = default_options do |opt|
+ opt.on("-m", "--macro", "Specifies the command is a MacroCommand") { @type = :macro }
+ opt.on("-n", "--name COMMAND_NAME", "Specifies the name for the command") { |name| @command_name = name }
+ opt.on("-c", "--const COMMAND_CONSTANT", "Specifies the constant to use for the command") { |const| @command_const = const }
+ end
+ end
+
+ def execute(args)
+ cmd = ""
+ cmd << "-Dcmd.name=#{@command_name} " unless @command_name.nil?
+ cmd << "-Dcmd.const=#{@command_const} " unless @command_const.nil?
+ cmd << "#{@type == :simple ? "create-simple-command" : "create-macro-command"}"
+ call_ant cmd
+ end
+
+ end
+
+ class CreateMediator < CmdParse::Command
+
+ def initialize
+ super('mediator', false)
+ self.short_desc = "Creates a new mediator."
+ self.options = default_options do |opt|
+ opt.on("-n", "--name MEDIATOR_NAME", "Specifies the name for the mediator") { |name| @mediator_name = name }
+ end
+ end
+
+ def execute(args)
+ cmd = ""
+ cmd << "-Dmediator.name=#{@mediator_name} " unless @mediator_name.nil?
+ cmd << "create-mediator"
+ call_ant cmd
+ end
+
+ end
+
+ class CreateProxy < CmdParse::Command
+
+ def initialize
+ super('proxy', false)
+ self.short_desc = "Creates a new proxy."
+ self.options = default_options do |opt|
+ opt.on("-n", "--name PROXY_NAME", "Specifies the name for the proxy") { |name| @proxy_name = name }
+ end
+ end
+
+ def execute(args)
+ cmd = ""
+ cmd << "-Dproxy.name=#{@proxy_name} " unless @proxy_name.nil?
+ cmd << "create-proxy"
+ call_ant cmd
+ end
+
+ end
+
+ end
+ end
+end
\ No newline at end of file
diff --git a/puremvc-gen.gemspec b/puremvc-gen.gemspec
index 174c411..45fb460 100644
--- a/puremvc-gen.gemspec
+++ b/puremvc-gen.gemspec
@@ -6,13 +6,13 @@ Gem::Specification.new do |s|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Greg Jastrab"]
- s.date = %q{2008-12-02}
+ s.date = %q{2008-12-05}
s.default_executable = %q{puremvc-gen}
s.description = %q{An ANT-based PureMVC generator.}
s.email = %q{gjastrab.dev@gmail.com}
s.executables = ["puremvc-gen"]
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
- s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/puremvc-gen", "conf/build.xml", "conf/config/pmvcgen.log.properties", "conf/config/pmvcgen.properties", "conf/example/author.properties", "conf/example/proj.properties", "conf/templates/.DS_Store", "conf/templates/Event.tpl", "conf/templates/standard/Application.tpl", "conf/templates/standard/Facade.tpl", "conf/templates/standard/MacroCommand.tpl", "conf/templates/standard/Mediator.tpl", "conf/templates/standard/Proxy.tpl", "conf/templates/standard/SimpleCommand.tpl", "lib/pure_m_v_c_gen.rb", "lib/pure_m_v_c_gen/version.rb", "test/test_pure_m_v_c_gen.rb"]
+ s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/puremvc-gen", "conf/build.xml", "conf/config/pmvcgen.log.properties", "conf/config/pmvcgen.properties", "conf/example/author.properties", "conf/example/proj.properties", "conf/templates/.DS_Store", "conf/templates/Event.tpl", "conf/templates/standard/Application.tpl", "conf/templates/standard/Facade.tpl", "conf/templates/standard/MacroCommand.tpl", "conf/templates/standard/Mediator.tpl", "conf/templates/standard/Proxy.tpl", "conf/templates/standard/SimpleCommand.tpl", "lib/pure_m_v_c_gen.rb", "lib/pure_m_v_c_gen/ant_checker.rb", "lib/pure_m_v_c_gen/commands/check_command.rb", "lib/pure_m_v_c_gen/commands/command_extensions.rb", "lib/pure_m_v_c_gen/commands/initialize_command.rb", "lib/pure_m_v_c_gen/commands/new_command.rb", "lib/pure_m_v_c_gen/version.rb", "puremvc-gen.gemspec", "test/test_pure_m_v_c_gen.rb"]
s.has_rdoc = true
s.homepage = %q{FIX (url)}
s.rdoc_options = ["--main", "README.txt"]
@@ -27,11 +27,14 @@ Gem::Specification.new do |s|
s.specification_version = 2
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
+ s.add_runtime_dependency(%q, [">= 2.0.2"])
s.add_development_dependency(%q, [">= 1.8.2"])
else
+ s.add_dependency(%q, [">= 2.0.2"])
s.add_dependency(%q, [">= 1.8.2"])
end
else
+ s.add_dependency(%q, [">= 2.0.2"])
s.add_dependency(%q, [">= 1.8.2"])
end
end