lib/org-converge/command.rb in org-converge-0.0.5 vs lib/org-converge/command.rb in org-converge-0.0.6

- old
+ new

@@ -6,19 +6,22 @@ attr_reader :engine def initialize(options) @options = options @dotorg = options['<org_file>'] - @logger = Logger.new(options['--log'] || STDOUT) @root_dir = options['--root-dir'] @run_dir = if @root_dir File.expand_path(File.join(@root_dir, 'run')) else File.expand_path('run') end @ob = Orgmode::Parser.new(File.read(dotorg)).babelize @babel = nil + @logger = Logger.new(options['--log'] || STDOUT) + logger.formatter = proc do |severity, datetime, progname, msg| + "[#{datetime.strftime('%Y-%m-%dT%H:%M:%S %z')}] #{msg}\n" + end end def execute! case when @options['--showfiles'] @@ -35,12 +38,15 @@ false end def converge! tangle! - if @options['--runmode'] + case + when @options['--runmode'] dispatch_runmode(@options['--runmode']) + when @options['--name'] + run_matching_blocks! else # Try to find one in the buffer runmode = ob.in_buffer_settings['RUNMODE'] dispatch_runmode(runmode) end @@ -104,9 +110,25 @@ display_name = script[:header][:name] @engine.register display_name, cmd, { :cwd => @root_dir, :logger => logger } end logger.info "Running code blocks now! (#{babel.ob.scripts.count} runnable blocks found in total)" + @engine.start + logger.info "Run has completed successfully.".fg 'green' + end + + def run_matching_blocks! + @engine = OrgConverge::Engine.new(:logger => @logger, :babel => @babel) + babel.tangle_runnable_blocks!(@run_dir, :filter => @options['--name']) + scripts = babel.ob.scripts.select {|k, h| h[:header][:name] =~ Regexp.new(@options['--name']) } + scripts.each do |key, script| + file = File.expand_path("#{@run_dir}/#{key}") + cmd = "#{script[:lang]} #{file}" + display_name = script[:header][:name] + @engine.register display_name, cmd, { :cwd => @root_dir, :logger => logger } + end + + logger.info "Running code blocks now! (#{scripts.count} runnable blocks found in total)" @engine.start logger.info "Run has completed successfully.".fg 'green' end def with_running_engine