Class: CLI
- Inherits:
-
Object
- Object
- CLI
- Defined in:
- lib/modulation/modules/cli.rb
Overview
Command line interface functionality
Constant Summary collapse
- FILENAME_AND_METHOD_RE =
/^([^\:]+)\:(.+)$/.freeze
- BACKTRACE_RE =
/^(#{Modulation::DIR})|(bin\/mdl)/.freeze
Instance Method Summary collapse
- #cleanup_backtrace(error) ⇒ Object
- #collect_deps(path, array) ⇒ Object
- #deps ⇒ Object
- #filename_and_method_from_arg(arg) ⇒ Object
-
#initialize(argv) ⇒ CLI
constructor
A new instance of CLI.
- #pack ⇒ Object
- #process ⇒ Object
- #run ⇒ Object
- #run_file(arg) ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize(argv) ⇒ CLI
Returns a new instance of CLI.
7 8 9 10 11 |
# File 'lib/modulation/modules/cli.rb', line 7 def initialize(argv) @argv = argv process end |
Instance Method Details
#cleanup_backtrace(error) ⇒ Object
49 50 51 52 |
# File 'lib/modulation/modules/cli.rb', line 49 def cleanup_backtrace(error) backtrace = error.backtrace.reject { |l| l =~ BACKTRACE_RE } error.set_backtrace(backtrace) end |
#collect_deps(path, array) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/modulation/modules/cli.rb', line 54 def collect_deps(path, array) if File.directory?(path) Dir["#{path}/**/*.rb"].each { |fn| collect_deps(fn, array) } else array << File.(path) mod = import(File.(path)) if mod.respond_to?(:__traverse_dependencies) mod.__traverse_dependencies { |m| array << m.__module_info[:location] } end end end |
#deps ⇒ Object
66 67 68 69 70 |
# File 'lib/modulation/modules/cli.rb', line 66 def deps paths = [] @argv.each { |arg| collect_deps(arg, paths) } puts(*paths) end |
#filename_and_method_from_arg(arg) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/modulation/modules/cli.rb', line 38 def filename_and_method_from_arg(arg) if arg =~ FILENAME_AND_METHOD_RE match = Regexp.last_match [match[1], match[2].to_sym] else [arg, :main] end end |
#pack ⇒ Object
72 73 74 |
# File 'lib/modulation/modules/cli.rb', line 72 def pack STDOUT << import('@modulation/packer').pack(@argv, hide_filenames: true) end |
#process ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'lib/modulation/modules/cli.rb', line 13 def process cmd = ARGV.shift if respond_to? cmd.to_sym send cmd else ARGV.unshift cmd run end end |
#run ⇒ Object
23 24 25 26 27 28 |
# File 'lib/modulation/modules/cli.rb', line 23 def run @argv.each { |arg| run_file arg } rescue StandardError => e cleanup_backtrace(e) raise e end |
#run_file(arg) ⇒ Object
30 31 32 33 34 |
# File 'lib/modulation/modules/cli.rb', line 30 def run_file(arg) fn, method = filename_and_method_from_arg(arg) mod = import(File.(fn)) mod.send(method) if method end |
#version ⇒ Object
76 77 78 |
# File 'lib/modulation/modules/cli.rb', line 76 def version puts "Modulation version #{Modulation::VERSION}" end |