require_relative 'include_files/include_use_case' require_relative '../../lib/string_helper' namespace :build do def camelize(snake_case_string) snake_case_string.split('_').collect(&:capitalize).join end desc 'Build use case markdown' task :use_cases do # Page that links to use cases. File.open('use_cases.md', 'w') do |use_case_file| use_case_file.puts(<<EOT # Use Cases EOT ) dir_path = File.dirname(__FILE__) Dir.chdir(dir_path) do IncludeUseCase.write_interface_file use_case_dirs = { :include_files => %w/ reuse_text nest_inclusions include_markdown include_code_block include_highlighted_code include_page_toc include_text_as_comment include_text_as_pre include_generated_text include_with_added_comments diagnose_missing_includee diagnose_circular_includes /, # include_page_toc # :tables_of_contents => %w/ # create_and_include_page_toc # /, } use_case_dirs.each_pair do |section, dir_names| # Header for section, if any dirs therein. title = StringHelper.to_title(section.to_s).sub(/ toc$/i, ' TOC') use_case_file.puts(<<EOT ## #{title} EOT ) unless dir_names.empty? # Be careful with use case that has a backtrace. backtrace_cases = %w/ diagnose_missing_includee diagnose_circular_includes / # Each use case is in a separate directory. dir_names.each do |dir_name| Dir.chdir("#{section}/#{dir_name}") do # There should be a conventionally-named ruby file to build the use case. fail dir_name unless File.exist?(UseCase::BUILDER_FILE_NAME) # There should be a conventionally-named use-case template. fail dir_name unless File.exist?(UseCase::TEMPLATE_FILE_NAME) class_name = camelize(dir_name) command = "ruby -I . -r #{UseCase::BUILDER_FILE_NAME} -e #{class_name}.build" if backtrace_cases.include?(dir_name) command += " 2> #{dir_name}.err" begin system(command) rescue # end else system(command) end title_line = File.open(UseCase::TEMPLATE_FILE_NAME).grep(/^#/).first.chomp title = title_line.split(/\s/, 2).pop use_case_file_name = File.basename(UseCase::USE_CASE_FILE_NAME) use_case_anchor = dir_name.gsub('_', '-') use_case_relative_url = File.join( section.to_s, dir_name, use_case_file_name + '#' + use_case_anchor, ) use_case_file.puts("* [#{title}](#{use_case_relative_url})") end end end end end end end