module Compass::CommandLineHelper
def assert_action_performed(action, path)
def assert_action_performed(action, path) actions_found = [] @last_result.split("\n").each do |line| line = line.split return if line.first == action.to_s && line.last == path actions_found << line.first if line.last == path end message = "Action #{action.inspect} was not performed on: #{path}." message += "The following actions were performed: #{actions_found.map{|a|a.inspect}.join(", ")}" if actions_found.any? puts @last_result fail message end
def compass(*arguments)
def compass(*arguments) options = arguments.last.is_a?(Hash) ? arguments.pop : {} options[:wait] = 0.25 if block_given? responder = Responder.new yield responder IO.popen("-", "w+") do |io| if io #parent process output = "" eof_at = nil while !eof_at || (Time.now - eof_at < options[:wait]) if io.eof? eof_at ||= Time.now sleep 0.1 else eof_at = nil timeout(1) do partial_output = io.readpartial(1024) # puts "))))#{partial_output}(((((" output << partial_output end prompt = output.split("\n").last.strip if response = responder.response_for(prompt) io.puts response end end end responder.assert_required_responses! @last_result = decolorize(output) else #child process execute *arguments end end else @last_error = capture_warning do @last_result = decolorize(capture_output do @last_exit_code = execute *arguments end) end end rescue Timeout::Error fail "Read from child process timed out" end
def decolorize(str)
def decolorize(str) str.gsub(/\e\[\d+m/,'') end
def execute(*arguments)
def execute(*arguments) command_line_class = Compass::Exec::Helpers.select_appropriate_command_line_ui(arguments) command_line_class.new(arguments).run! end
def within_tmp_directory(dir = "tmp")
def within_tmp_directory(dir = "tmp") d = absolutize(dir) FileUtils.mkdir_p(d) Dir.chdir(d) do yield end ensure FileUtils.rm_rf(d) end