module PrototypeClassGeneratorHelper def add_test_to_suite(class_file_name, class_name) sentinel = '' test_suite_file = 'public/javascripts/test/unit/index.html' existing_match = File.read(test_suite_file).match(Regexp.escape(class_file_name)) log_message = "entry for #{class_name} class in JS unit test suite" unless existing_match logger.create log_message gsub_file test_suite_file, /(#{Regexp.escape(sentinel)})/mi do |match| "
  • #{class_name} test
  • \n #{match}" end else logger.found log_message end end end Rails::Generator::Commands::Create.send :include, PrototypeClassGeneratorHelper class PrototypeClassGenerator < Rails::Generator::Base attr_accessor :class_name, :class_file_name def manifest @class_name = ARGV[0].camelize @class_file_name = ARGV[0].underscore record do |m| # js class m.template "javascripts/class.js", "public/javascripts/#{class_file_name}.js" # create testing prerequisites m.directory "public/javascripts/test/lib" m.directory "public/javascripts/test/unit" m.file "javascripts/test/lib/test.css", "public/javascripts/test/lib/test.css" m.file "javascripts/test/lib/unittest.js", "public/javascripts/test/lib/unittest.js" m.file "javascripts/test/run_unit_tests.html", "public/javascripts/test/run_unit_tests.html" # test harness m.template "javascripts/test/unit/class_test.html", "public/javascripts/test/unit/#{class_file_name}_test.html" m.file "javascripts/test/unit/index.html", "public/javascripts/test/unit/index.html", :collision => :skip m.add_test_to_suite class_file_name, class_name end end end