class Duct::Runner
Public Class Methods
new(config)
click to toggle source
# File lib/duct/runner.rb, line 7 def initialize(config) @config = config end
Public Instance Methods
data()
click to toggle source
# File lib/duct/runner.rb, line 19 def data @data ||= file_content.last end
file_content()
click to toggle source
# File lib/duct/runner.rb, line 11 def file_content @file_content ||= File.read(@config.filename).split(/^__END__$/, 2) end
preamble()
click to toggle source
# File lib/duct/runner.rb, line 23 def preamble @preamble ||= data.split(/^@@\s*(.*\S)\s*$/, 2).first end
run()
click to toggle source
# File lib/duct/runner.rb, line 27 def run copy_embedded_files system "BUNDLE_GEMFILE=#{tempdir}/Gemfile bundle #{@config.command}" update_embedded_files exec script_command unless @config.command end
script()
click to toggle source
# File lib/duct/runner.rb, line 15 def script @script ||= file_content.first end
script_command()
click to toggle source
# File lib/duct/runner.rb, line 34 def script_command filename = @config.filename.shellescape params = @config.params.join(' ') "BUNDLE_GEMFILE=#{tempdir}/Gemfile bundle exec ruby #{filename} #{params}; rm -rf #{tempdir}" end
Private Instance Methods
copy_embedded_files()
click to toggle source
# File lib/duct/runner.rb, line 42 def copy_embedded_files embedded_files.each do |file, contents| IO.write("#{tempdir}/#{file}", contents) end end
embedded_files()
click to toggle source
# File lib/duct/runner.rb, line 62 def embedded_files @embedded_files ||= {}.tap do |files| file = nil data.each_line do |line| if line =~ /^@@\s*(.*\S)\s*$/ file = '' files[$1.to_sym] = file elsif file file << line end end end end
tempdir()
click to toggle source
# File lib/duct/runner.rb, line 76 def tempdir @tempdir ||= Dir.mktmpdir end
update_embedded_files()
click to toggle source
# File lib/duct/runner.rb, line 48 def update_embedded_files contents = script.dup contents << "__END__" contents << preamble Dir.glob("#{tempdir}/*") do |filename| contents << "@@ #{File.basename(filename)}\n" contents << File.read(filename) end IO.write(@config.filename, contents) end