diff options
Diffstat (limited to 'scripts/lib/glfm/shared.rb')
-rw-r--r-- | scripts/lib/glfm/shared.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/lib/glfm/shared.rb b/scripts/lib/glfm/shared.rb new file mode 100644 index 00000000000..f11c66eb8be --- /dev/null +++ b/scripts/lib/glfm/shared.rb @@ -0,0 +1,43 @@ +# 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 |