module Conductor
Main Conductor
class
Constants
- VERSION
Attributes
original_input[RW]
stdin[W]
Public Class Methods
conduct(tracks, res = nil, condition = nil)
click to toggle source
Main function to parse conditions and
execute actions. Executes recursively for sub-tracks.
@param tracks The tracks to process @param res The current result @param condition The current condition
@return [Array] result, matched condition(s)
# File bin/conductor, line 56 def conduct(tracks, res = nil, condition = nil) tracks.each do |track| cond = Condition.new(track[:condition]) next unless cond.true? # Build "matched condition" message title = track[:title] || track[:condition] condition ||= [""] condition << title condition.push(track.key?(:continue) ? " -> " : ", ") res = execute_track(track) if track[:tracks] ts = track[:tracks] res, condition = conduct(ts, res, condition) next if res.nil? end break unless track[:continue] end if res == Conductor.original_input [nil, "No change in output"] else [res, condition] end end
execute_track(track)
click to toggle source
Execute commands/scripts in the track
@param track The track
@return Resulting STDOUT output
# File bin/conductor, line 17 def execute_track(track) if track[:sequence] track[:sequence].each do |cmd| if cmd[:script] script = Script.new(cmd[:script]) res = script.run elsif cmd[:command] command = Command.new(cmd[:command]) res = command.run end Conductor.stdin = res unless res.nil? end elsif track[:script] script = Script.new(track[:script]) Conductor.stdin = script.run elsif track[:command] command = Command.new(track[:command]) Conductor.stdin = command.run end Conductor.stdin end
stdin()
click to toggle source
# File lib/conductor.rb, line 26 def stdin warn "input on STDIN required" unless $stdin.stat.size.positive? || $stdin.fcntl(Fcntl::F_GETFL, 0).zero? @stdin ||= $stdin.read.strip.force_encoding("utf-8") end
Public Instance Methods
create_config(config_file)
click to toggle source
# File lib/conductor/config.rb, line 19 def create_config(config_file) config_dir = File.dirname(config_file) scripts_dir = File.dirname(File.join(config_dir, "scripts")) FileUtils.mkdir_p(config_dir) unless File.directory?(config_dir) FileUtils.mkdir_p(scripts_dir) unless File.directory?(scripts_dir) File.open(config_file, "w") { |f| f.puts sample_config } puts "Sample config created at #{config_file}" Process.exit 0 end
sample_config()
click to toggle source
# File lib/conductor/config.rb, line 30 def sample_config <<~EOCONFIG tracks: - condition: phase is pre tracks: - condition: tree contains .obsidian tracks: - condition: extension is md script: obsidian-md-filter - condition: extension is md command: rdiscount $file - condition: yaml includes comments script: blog-processor - condition: any command: echo 'NOCUSTOM' EOCONFIG end