44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
require 'fileutils'
 | 
						|
require 'open3'
 | 
						|
 | 
						|
module Glfm
 | 
						|
  module Shared
 | 
						|
    def write_file(file_path, file_content_string)
 | 
						|
      FileUtils.mkdir_p(File.dirname(file_path))
 | 
						|
      # NOTE: We don't use the block form of File.open because we want to be able to easily
 | 
						|
      # mock it for testing.
 | 
						|
      io = File.open(file_path, 'w')
 | 
						|
      io.binmode
 | 
						|
      io.write(file_content_string)
 | 
						|
      # NOTE: We are using #fsync + #close_write instead of just #close`, in order to unit test
 | 
						|
      # with a real StringIO and not just a mock object.
 | 
						|
      io.fsync
 | 
						|
      io.close_write
 | 
						|
    end
 | 
						|
 | 
						|
    # All script output goes through this method. This makes it easy to mock in order to prevent
 | 
						|
    # output from being printed to the console during tests. We don't want to directly mock
 | 
						|
    # Kernel#puts, because that could interfere or cause spurious test failures when #puts is used
 | 
						|
    # for debugging. And for some reason RuboCop says `rubocop:disable Rails/Output` would be
 | 
						|
    # redundant here, so not including it.
 | 
						|
    def output(string)
 | 
						|
      puts string
 | 
						|
    end
 | 
						|
 | 
						|
    def run_external_cmd(cmd)
 | 
						|
      # noinspection RubyMismatchedArgumentType
 | 
						|
      rails_root = File.expand_path('../../../', __dir__)
 | 
						|
 | 
						|
      # See https://stackoverflow.com/a/20001569/25192
 | 
						|
      stdout_and_stderr_str, status = Open3.capture2e(cmd, chdir: rails_root)
 | 
						|
 | 
						|
      return stdout_and_stderr_str if status.success?
 | 
						|
 | 
						|
      warn("Error running command `#{cmd}`\n")
 | 
						|
      warn(stdout_and_stderr_str)
 | 
						|
      raise
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |