# frozen_string_literal: true require 'bundler/gem_tasks' require 'rake/testtask' require 'erb' # require 'rspec' require 'rubocop' require 'yaml' # begin # require 'rspec/core/rake_task' # RSpec::Core::RakeTask.new(:spec) # rescue LoadError # puts 'RSpec is required to run some tests.' # end Rake::TestTask.new(:test) do |task| task.libs << 'test' task.libs << 'lib' task.test_files = FileList['test/**/*_test.rb'] end require 'rubocop/rake_task' require_relative 'lib/cli' require_relative 'lib/markdown_exec/version' require_relative 'lib/shared' require_relative 'lib/tap' include CLI include Tap tap_config envvar: MarkdownExec::TAP_DEBUG RuboCop::RakeTask.new do |task| task.requires << 'rubocop-minitest' task.requires << 'rubocop-rspec' end desc 'named task because minitest not included in rubocop tests' task :rubocopminitest do `rubocop --require rubocop-minitest` end # desc 'rspec' # task :rspec do # puts "in rspec" # `pwd && rspec` # end task default: %i[test reek rubocop rubocopminitest] # task default: %i[rspec test reek rubocop rubocopminitest] # task :default => :build desc 'gem build' task :build do Rake::Task['update_menu_yml'].execute Rake::Task['update_tab_completion'].execute # after updated menu is readable system "gem build #{MarkdownExec::GEM_NAME}.gemspec" end desc 'gem install' task install: :build do system "gem install #{MarkdownExec::GEM_NAME}-#{MarkdownExec::VERSION}.gem" end desc 'gem publish' task publish: :build do system "gem push #{MarkdownExec::GEM_NAME}-#{MarkdownExec::VERSION}.gem" end desc 'gem uninstall' task uninstall: :build do system "gem uninstall #{MarkdownExec::GEM_NAME}" end desc 'gem build clean' task :clean do system 'rm *.gem' end desc 'reek' task :reek do `reek --config .reek .` end private # write menu.yml # desc 'update menu.yml' task :update_menu_yml do menu_options = [ ## priority options # { arg_name: 'NAME', compreply: false, description: 'Name of block', env_var: 'MDE_BLOCK_NAME', long_name: 'block-name', opt_name: 'block_name', short_name: 'b', procname: 'val_as_str' }, { arg_name: 'PATH', default: '.', description: 'Read configuration file', long_name: 'config', procname: 'path' }, { arg_name: 'BOOL', default: false, description: 'Debug output', env_var: MarkdownExec::TAP_DEBUG, long_name: 'debug', short_name: 'd', procname: 'debug' }, { arg_name: 'RELATIVE_PATH', compreply: '.', description: 'Name of document', env_var: 'MDE_FILENAME', long_name: 'filename', opt_name: 'filename', short_name: 'f', procname: 'val_as_str' }, { description: 'App help', long_name: 'help', short_name: 'h', procname: 'help' }, { arg_name: 'RELATIVE_PATH', default: '.', description: 'Path to documents', env_var: 'MDE_PATH', long_name: 'path', opt_name: 'path', short_name: 'p', procname: 'val_as_str' }, { arg_name: 'BOOL', default: true, description: 'Pause for user to approve script', env_var: 'MDE_USER_MUST_APPROVE', long_name: 'user-must-approve', opt_name: 'user_must_approve', short_name: 'q', procname: 'val_as_bool' }, { description: "Print the gem's version", long_name: 'version', short_name: 'v', procname: 'version' }, { description: 'Exit app', long_name: 'exit', short_name: 'x', procname: 'exit' # ->(_) { exit } }, { description: 'Show current configuration values', short_name: '0', procname: 'show_config' }, ## commands # { description: 'List blocks', long_name: 'list-blocks', opt_name: 'list_blocks', procname: 'val_as_bool' }, { description: 'List default configuration as environment variables', long_name: 'list-default-env', opt_name: 'list_default_env' }, { description: 'List default configuration as YAML', long_name: 'list-default-yaml', opt_name: 'list_default_yaml' }, { description: 'List docs in current folder', long_name: 'list-docs', opt_name: 'list_docs', procname: 'val_as_bool' }, { description: 'List recent saved output', long_name: 'list-recent-output', opt_name: 'list_recent_output', procname: 'val_as_bool' }, { description: 'List recent saved scripts', long_name: 'list-recent-scripts', opt_name: 'list_recent_scripts', procname: 'val_as_bool' }, { description: 'Select and execute a recently saved output', long_name: 'select-recent-output', opt_name: 'select_recent_output', procname: 'val_as_bool' }, { description: 'Select and execute a recently saved script', long_name: 'select-recent-script', opt_name: 'select_recent_script', procname: 'val_as_bool' }, { description: 'List tab completions', long_name: 'tab-completions', opt_name: 'tab_completions', procname: 'val_as_bool' }, { description: 'Run most recently saved script', long_name: 'run-last-script', opt_name: 'run_last_script', procname: 'val_as_bool' }, { description: 'Gem home folder', long_name: 'pwd', opt_name: 'pwd', procname: 'val_as_bool' }, ## secondary options # { arg_name: "INT.#{DISPLAY_LEVEL_BASE}-#{DISPLAY_LEVEL_MAX}", default: DISPLAY_LEVEL_DEFAULT, description: "Output display level (#{DISPLAY_LEVEL_BASE} to #{DISPLAY_LEVEL_MAX} [data, +context, +info])", env_var: 'MDE_DISPLAY_LEVEL', long_name: 'display-level', opt_name: 'display_level', procname: 'val_as_int' }, { arg_name: 'INT.1-', default: 32, description: 'Max. items to return in list', env_var: 'MDE_LIST_COUNT', long_name: 'list-count', opt_name: 'list_count', procname: 'val_as_int' }, { arg_name: 'PREFIX', default: MarkdownExec::BIN_NAME, description: 'Name prefix for stdout files', env_var: 'MDE_LOGGED_STDOUT_FILENAME_PREFIX', # long_name: 'logged-stdout-filename-prefix', opt_name: 'logged_stdout_filename_prefix', procname: 'val_as_str' }, { arg_name: 'BOOL', default: false, description: 'Display document name in block selection menu', env_var: 'MDE_MENU_BLOCKS_WITH_DOCNAME', # long_name: 'menu-blocks-with-docname', opt_name: 'menu_blocks_with_docname', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: false, description: 'Display headings (levels 1,2,3) in block selection menu', env_var: 'MDE_MENU_BLOCKS_WITH_HEADINGS', # long_name: 'menu-blocks-with-headings', opt_name: 'menu_blocks_with_headings', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: false, description: 'Display summary for execution', env_var: 'MDE_OUTPUT_EXECUTION_SUMMARY', long_name: 'output-execution-summary', opt_name: 'output_execution_summary', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: false, description: 'Display script prior to execution', env_var: 'MDE_OUTPUT_SCRIPT', long_name: 'output-script', opt_name: 'output_script', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: true, description: 'Display standard output from execution', env_var: 'MDE_OUTPUT_STDOUT', long_name: 'output-stdout', opt_name: 'output_stdout', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: false, description: 'Save executed script', env_var: 'MDE_SAVE_EXECUTED_SCRIPT', long_name: 'save-executed-script', opt_name: 'save_executed_script', procname: 'val_as_bool' }, { arg_name: 'BOOL', default: false, description: 'Save standard output of the executed script', env_var: 'MDE_SAVE_EXECUTION_OUTPUT', long_name: 'save-execution-output', opt_name: 'save_execution_output', procname: 'val_as_bool' }, { arg_name: 'INT', default: 0o755, description: 'chmod for saved scripts', env_var: 'MDE_SAVED_SCRIPT_CHMOD', # long_name: 'saved-script-chmod', opt_name: 'saved_script_chmod', procname: 'val_as_int' }, { arg_name: 'PREFIX', default: MarkdownExec::BIN_NAME, description: 'Name prefix for saved scripts', env_var: 'MDE_SAVED_SCRIPT_FILENAME_PREFIX', # long_name: 'saved-script-filename-prefix', opt_name: 'saved_script_filename_prefix', procname: 'val_as_str' }, { arg_name: 'RELATIVE_PATH', default: 'logs', description: 'Saved script folder', env_var: 'MDE_SAVED_SCRIPT_FOLDER', long_name: 'saved-script-folder', opt_name: 'saved_script_folder', procname: 'val_as_str' }, { arg_name: 'GLOB', default: 'mde_*.sh', description: 'Glob matching saved scripts', env_var: 'MDE_SAVED_SCRIPT_GLOB', # long_name: 'saved-script-glob', opt_name: 'saved_script_glob', procname: 'val_as_str' }, { arg_name: 'RELATIVE_PATH', default: 'logs', description: 'Saved stdout folder', env_var: 'MDE_SAVED_STDOUT_FOLDER', long_name: 'saved-stdout-folder', opt_name: 'saved_stdout_folder', procname: 'val_as_str' }, { arg_name: 'GLOB', default: 'mde_*.out.txt', description: 'Glob matching saved outputs', env_var: 'MDE_SAVED_STDOUT_GLOB', # long_name: 'saved-stdout-glob', opt_name: 'saved_stdout_glob', procname: 'val_as_str' }, { default: '^[\(\[].*[\)\]]$', description: 'Pattern for blocks to hide from user-selection', env_var: 'MDE_BLOCK_NAME_HIDDEN_MATCH', opt_name: 'block_name_hidden_match', procname: 'val_as_str' }, { default: ':(?