Sha256: c76b3e297657c41b7b6285d9879c6e8bff4e30bbbf6d4d294430d1be83aac7ad

Contents?: true

Size: 827 Bytes

Versions: 2

Compression:

Stored size: 827 Bytes

Contents

require 'json'
require 'open3'

module SimCtl
  class Executor
    class << self
      def execute(command)
        command = command.flatten.join(' ')
        Open3.popen3(command) do |stdin, stdout, stderr, result|
          output = stdout.read
          raise StandardError.new(output) if result.value.to_i > 0
          return unless block_given?
          begin
            if looks_like_json?(output)
              yield JSON.parse(output)
            else
              yield output.chomp
            end
          rescue StandardError => e
            raise StandardError.new("Failed to execute '#{command}' (output: '#{output.chomp}'): #{e}")
          end
        end
      end

      private

      def looks_like_json?(output)
        output.start_with?('[') || output.start_with?('{')
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
simctl-1.2.3 lib/simctl/executor.rb
simctl-1.2.2 lib/simctl/executor.rb