Sha256: 70da48c17bbdfb7dfe6a7066498b17f59c65c0a11e97769e813e25ec39e1f301

Contents?: true

Size: 1.87 KB

Versions: 15

Compression:

Stored size: 1.87 KB

Contents

# frozen_string_literal: true

require 'English'
require 'open3'
require 'shellwords'

module Geet
  module Helpers
    module OsHelper
      def open_file_with_default_application(file_or_url)
        open_command = `uname`.strip == 'Darwin' ? "open": "xdg-open"

        command = "#{open_command} #{file_or_url.shellescape}"

        system(command, exception: true)
      end

      # Executes the command.
      #
      # If the command doesn't execute successfully, it will raise an error.
      #
      # On non-interactive runs, the stdout content is returned, stripped of the surrounding
      # whitespaces.
      #
      # description:   optional string, to make the error clearer.
      # interactive:   set when required; in this case, a different API will be used (`system()`
      #                instead of `popen3`).
      # silent_stderr: don't print the stderr output
      # allow_error:   don't raise error on failure
      #
      def execute_command(command, description: nil, interactive: false, silent_stderr: false, allow_error: false)
        description_message = " on #{description}" if description

        if interactive
          system(command)

          if !$CHILD_STATUS.success? && !allow_error
            raise "Error#{description_message} (exit status: #{$CHILD_STATUS.exitstatus})"
          end
        else
          Open3.popen3(command) do |_, stdout, stderr, wait_thread|
            stdout_content = stdout.read
            stderr_content = stderr.read

            puts stderr_content if stderr_content != '' && !silent_stderr

            if !wait_thread.value.success? && !allow_error
              error_message = stderr_content.lines.first&.strip || "Error running command #{command.inspect}"
              raise "Error#{description_message}: #{error_message}"
            end

            stdout_content.strip
          end
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
geet-0.22.0 lib/geet/helpers/os_helper.rb
geet-0.21.0 lib/geet/helpers/os_helper.rb
geet-0.19.0 lib/geet/helpers/os_helper.rb
geet-0.18.0 lib/geet/helpers/os_helper.rb
geet-0.17.0 lib/geet/helpers/os_helper.rb
geet-0.16.0 lib/geet/helpers/os_helper.rb
geet-0.15.0 lib/geet/helpers/os_helper.rb
geet-0.14.0 lib/geet/helpers/os_helper.rb
geet-0.13.0 lib/geet/helpers/os_helper.rb
geet-0.12.0 lib/geet/helpers/os_helper.rb
geet-0.11.0 lib/geet/helpers/os_helper.rb
geet-0.10.0 lib/geet/helpers/os_helper.rb
geet-0.9.0 lib/geet/helpers/os_helper.rb
geet-0.8.0 lib/geet/helpers/os_helper.rb
geet-0.7.0 lib/geet/helpers/os_helper.rb