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