#!/usr/bin/env ruby at_exit { exit } command = ARGV.shift if %w(generate destroy update).include?(ARGV[0]) %w(rubygems merb-core).each do |file| require file end # start merb Merb.start :environment => 'development', :log_level => 'error' # remove dependency module Kernel undef dependency if defined?(Kernel.dependency) end %w(rubigen rubigen/scripts/generate rubigen/scripts/destroy rubigen/scripts/update fileutils find merb-gen).each do |file| require file end app_help = <<-EOF Application Generators: To generate an application use one of the following merb-gen app app_name (for a standard application) merb-gen app app_name --flat (for a flattened application) merb-gen app app_name --very-flat (for a single file application) merb-gen frozen-merb (script to run from frozen gems/framework) merb-gen plugin plugin_name (creates a plugin gem skeleton) Other Generators: merb-gen generators with no args will display all availble generators for the current configuration. EOF # merb-gen || merb-gen help || merb-gen help app || merb-gen app if ARGV.empty? || (ARGV[0] == "help" && ARGV.length == 1) || (ARGV[0] == "help" && ARGV[1] == "app") || (ARGV[0] == "app" && ARGV.length == 1) puts app_help # merb-gen generators elsif ARGV[0] == "generators" # List all the Available Generators RubiGen::Base.use_component_sources! Merb.generator_scope RubiGen::Scripts::Generate.new.run([]) # merb-gen help foo elsif ARGV[0] && ARGV[0] == "help" begin RubiGen::Base.use_component_sources! Merb.generator_scope RubiGen::Base.lookup(ARGV[1]) Merb::ComponentGenerator.run ARGV[1], ARGV[2..-1], ARGV[1], command || "generate" rescue RubiGen::GeneratorError # List all the Available Generators RubiGen::Base.use_component_sources! Merb.generator_scope RubiGen::Scripts::Generate.new.run([]) rescue => e puts e.message end # merb-gen app myapp elsif ARGV[0] && ARGV[0] == "app" && ARGV[1] && ARGV[1] !~ /^-/ app_type = case ARGV[2] when "--flat" "merb_flat" when "--very-flat" "merb_very_flat" else "merb" end Merb::ApplicationGenerator.run ARGV[1], ARGV[3..-1], app_type, command || "generate" # merb-gen plugin foo elsif ARGV[0] && ARGV[0] == "plugin" Merb::ApplicationGenerator.run ARGV[1], ARGV[2..-1], "merb_plugin", command || "generate" # merb-gen frozen-merb elsif ARGV[0] && ARGV[0] == "frozen-merb" Merb::ComponentGenerator.run "frozen-merb", ["frozen-merb"], "freezer", command || "generate" # merb-gen controller foo # merb-gen resource foo --test elsif ARGV[1] && ARGV[1] !~ /^-/ Merb::ComponentGenerator.run ARGV[1], ARGV[1..-1], ARGV.first, command || "generate" # catch all merb-gen -??? and display help instead of creating application in -??? elsif ARGV[0] && ARGV[0] =~ /^-/ puts app_help else begin # May be a generator that takes no arguments. RubiGen::Base.use_component_sources! Merb.generator_scope RubiGen::Base.lookup(ARGV[0]) Merb::ComponentGenerator.run ARGV[0], ARGV[1..-1], ARGV.first, command || "generate" rescue RubiGen::GeneratorError puts app_help rescue => e puts e.message end end