import “../tools/BasicCommand.my”
BasicCommand {
banner: "Usage: myco inoculate [options]" # TODO: move this out of here shell: |*a,&b| Kernel.instance_method(:system).bind(self).call(*a,&b) run: |*argv| { destinations = options_parse(*argv) destinations.size == 1 |? show_help ?? destinations.each |dest| { config.dest = dest run_operation(:copy, files(config.source, '*.md')) run_operation(:copy, files(config.source, 'LICENSE')) run_operation(:copy, files(config.source, 'bin/*')) run_operation(:copy, files(config.source, 'lib/**/*.rb')) run_operation(:copy, files(config.source, 'lib/**/*.my')) run_operation(:myrb, files(config.dest, 'lib/**/*.my')) if(config.verbose) { prog = Rubinius::Globals[:"$PROGRAM_NAME"] puts("DONE "prog" "ARGV.join(" ")"") } } } run_operation: |opcode, source_list| { source_list.each |source| { dest = transforms.send(opcode, source) unless(operation_is_unnecessary(source, dest)) { if(config.verbose) { puts(""opcode.upcase" "source"") puts(" => "dest"") } operations.send(opcode, source, dest) } } } operation_is_unnecessary: |source, dest| File.file?(dest) && File.mtime(dest) >= File.mtime(source) files: |prefix, glob| Dir.glob(prefix &? File.join(prefix, glob) ?? glob) [operations] copy: |source, dest| shell("mkdir -p "File.dirname(dest)" && cp "source" "dest"") myrb: |source, dest| Myco::CodeLoader::MycoLoader.new(source).emit_rb! [transforms] copy: |filename| File.join(config.dest, filename) myrb: |filename| ""filename".rb" [config] var source var dest var verbose [options] "-d": Option { description: "The destination directory to clone material into." long_form: "--dest" argument: "STRING" do: |arg| parent.config.dest = arg } "-v": Option { description: "Show details about material cloning operations." long_form: "--verbose" do: |arg| parent.config.verbose = true }
}