5 require 'rake/rdoctask'
11 SRC_FILES = FileList["#{SRC_DIR}/*"]
12 KOAN_FILES = SRC_FILES.pathmap("#{PROB_DIR}/%f")
14 TAR_FILE = "#{DIST_DIR}/rubykoans.tgz"
15 ZIP_FILE = "#{DIST_DIR}/rubykoans.zip"
17 CLOBBER.include(DIST_DIR)
20 def Koans.remove_solution(line)
21 line = line.gsub(/\b____\([^\)]+\)/, "____")
22 line = line.gsub(/\b___\([^\)]+\)/, "___")
23 line = line.gsub(/\b__\([^\)]+\)/, "__")
24 line = line.gsub(/\b_n_\([^\)]+\)/, "_n_")
25 line = line.gsub(%r(/\#\{__\}/), "/__/")
29 def Koans.make_koan_file(infile, outfile)
30 if infile =~ /edgecase/
34 open(outfile, "w") do |outs|
37 state = :skip if line =~ /^ *#--/
40 outs.puts remove_solution(line)
44 state = :copy if line =~ /^ *#\+\+/
52 task :default => :walk_the_path
54 task :walk_the_path do
56 ruby 'path_to_enlightenment.rb'
59 Rake::RDocTask.new do |rd|
60 rd.main = "README.rdoc"
61 rd.rdoc_files.include("README.rdoc", "koans/*.rb")
67 file ZIP_FILE => KOAN_FILES + [DIST_DIR] do
68 sh "zip #{ZIP_FILE} #{PROB_DIR}/*"
71 file TAR_FILE => KOAN_FILES + [DIST_DIR] do
72 sh "tar zcvf #{TAR_FILE} #{PROB_DIR}"
75 desc "Create packaged files for distribution"
76 task :package => [TAR_FILE, ZIP_FILE]
78 desc "Upload the package files to the web server"
79 task :upload => [TAR_FILE, ZIP_FILE] do
80 sh "scp #{TAR_FILE} linode:sites/onestepback.org/download"
81 sh "scp #{ZIP_FILE} linode:sites/onestepback.org/download"
84 desc "Check that the require files match the about_* files"
86 about_files = Dir['src/about_*.rb'].size
87 about_requires = `grep require src/path_to_enlightenment.rb | wc -l`.to_i
88 puts "# of about files: #{about_files}"
89 puts "# of about requires: #{about_requires}"
92 desc "Generate the Koans from the source files from scratch."
93 task :regen => [:clobber_koans, :gen]
95 desc "Generate the Koans from the changed source files."
96 task :gen => KOAN_FILES + [PROB_DIR + "/README.rdoc"]
97 task :clobber_koans do
101 file PROB_DIR + "/README.rdoc" => "README.rdoc" do |t|
102 cp "README.rdoc", t.name
105 SRC_FILES.each do |koan_src|
106 file koan_src.pathmap("#{PROB_DIR}/%f") => [PROB_DIR, koan_src] do |t|
107 Koans.make_koan_file koan_src, t.name