Sha256: 10fe2d6ba1b26afb0e74ecc0f2107fbc62d4c5f5563c2350658da4c4eaecbb52

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

require 'ogre'

module Ogre
  # wrapper to assist aruba in single process execution
  class Runner
    def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
      @argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
    end

    # rubocop:disable MethodLength
    def execute!
      exit_code = begin
        $stderr = @stderr
        $stdin = @stdin
        $stdout = @stdout

        Ogre::CLI.start(@argv)

        # Thor::Base#start does not have a return value
        # assume success if no exception is raised.
        0
      rescue StandardError => err
        # The ruby interpreter would pipe this to STDERR and
        # exit 1 in the case of an unhandled exception
        b = err.backtrace
        b.unshift("#{b.shift}: #{err.message} (#{err.class})")
        @stderr.puts(b.map { |s| "\tfrom #{s}" }.join("\n"))
        1
      ensure
        # put them back.
        $stderr = STDERR
        $stdin = STDIN
        $stdout = STDOUT
      end
      # Proxy exit code back to the injected kernel.
      @kernel.exit(exit_code)
    end
    # rubocop:enable MethodLength
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ogre-0.1.3 lib/ogre/runner.rb
ogre-0.1.2 lib/ogre/runner.rb
ogre-0.1.1 lib/ogre/runner.rb
ogre-0.1.0 lib/ogre/runner.rb