lib/polytrix/challenge_runner.rb in polytrix-0.1.2 vs lib/polytrix/challenge_runner.rb in polytrix-0.1.3
- old
+ new
@@ -1,45 +1,55 @@
require 'polytrix'
require 'rbconfig'
module Polytrix
- module Runners
- autoload :LinuxChallengeRunner, 'polytrix/runners/linux_challenge_runner'
- autoload :WindowsChallengeRunner, 'polytrix/runners/windows_challenge_runner'
+ module Executors
+ autoload :LinuxChallengeRunner, 'polytrix/executors/linux_challenge_executor'
+ autoload :WindowsChallengeRunner, 'polytrix/executors/windows_challenge_executor'
end
class ChallengeRunner < Thor::Shell::Color
- include Polytrix::Core::FileSystemHelper
- include Polytrix::Runners::Executor
+ include Polytrix::Util::FileSystem
+ include Executor
- attr_accessor :env
-
def self.create_runner
case RbConfig::CONFIG['host_os']
when /mswin(\d+)|mingw/i
- Runners::WindowsChallengeRunner.new
+ # TODO: Display warning that Windows support is experimental
+ Executors::WindowsChallengeRunner.new
else
- Runners::LinuxChallengeRunner.new
+ Executors::LinuxChallengeRunner.new
end
end
- def run_command(command)
+ def run_command(command, opts = { cwd: Dir.pwd })
if Polytrix.configuration.dry_run
- puts "Would have run #{command}"
+ puts "Would have run #{command} with #{opts.inspect}"
else
say_status 'polytrix:execute', command
- execute command
+ execute(command, opts)
end
end
- def run_challenge(challenge)
- middleware.call(challenge)
- challenge.result
+ def run_challenge(challenge, spies = Polytrix::Spies)
+ source_file = challenge[:source_file].to_s
+ basedir = challenge[:basedir].to_s
+ command = challenge_command(source_file, basedir)
+ spies.observe(challenge) do
+ execution_result = run_command(command, cwd: basedir, env: environment_variables(challenge[:vars]))
+ challenge[:result] = Result.new(execution_result: execution_result, source_file: source_file)
+ end
+ challenge[:result]
end
- private
+ protected
- def middleware
- Polytrix.configuration.middleware
+ def environment_variables(test_vars)
+ global_vars = begin
+ Polytrix.manifest[:global_env].dup
+ rescue
+ {}
+ end
+ global_vars.merge(test_vars.dup)
end
end
end