Sha256: 814ab70d4c9d9560e547fe997bafd89ce68d355fe16ea647e94ad4bee8635038

Contents?: true

Size: 1.73 KB

Versions: 29

Compression:

Stored size: 1.73 KB

Contents

require 'open3'
require 'rake/file_utils'
require 'shellwords'

module RSpec
  module Support
    module ShellOut
      def with_env(vars)
        original = ENV.to_hash
        vars.each { |k, v| ENV[k] = v }

        begin
          yield
        ensure
          ENV.replace(original)
        end
      end

      if Open3.respond_to?(:capture3) # 1.9+
        def shell_out(*command)
          stdout, stderr, status = Open3.capture3(*command)
          return stdout, filter(stderr), status
        end
      else # 1.8.7
        def shell_out(*command)
          stdout = stderr = nil

          Open3.popen3(*command) do |_in, out, err|
            stdout = out.read
            stderr = err.read
          end

          # popen3 doesn't provide the exit status so we fake it out.
          status = instance_double(Process::Status, :exitstatus => 0)
          return stdout, filter(stderr), status
        end
      end

      def run_ruby_with_current_load_path(ruby_command, *flags)
        command = [
          FileUtils::RUBY,
          "-I#{$LOAD_PATH.map(&:shellescape).join(File::PATH_SEPARATOR)}",
          "-e", ruby_command, *flags
        ]

        # Unset these env vars because `ruby -w` will issue warnings whenever
        # they are set to non-default values.
        with_env 'RUBY_GC_HEAP_FREE_SLOTS' => nil, 'RUBY_GC_MALLOC_LIMIT' => nil,
                 'RUBY_FREE_MIN' => nil do
          shell_out(*command)
        end
      end

    private

      if Ruby.jruby?
        def filter(output)
          output.each_line.reject do |line|
            line.include?("lib/ruby/shared/rubygems/defaults/jruby")
          end.join($/)
        end
      else
        def filter(output)
          output
        end
      end
    end
  end
end

Version data entries

29 entries across 28 versions & 8 rubygems

Version Path
opal-rspec-0.8.0 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.8.0.alpha3 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.8.0.alpha2 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.8.0.alpha1 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.7.1 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.7.0 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.6.2 rspec-support/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.7.0.rc.2 rspec-support/upstream/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.6.1 rspec-support/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.6.0 rspec-support/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.6.0.beta1 rspec-support/lib/rspec/support/spec/shell_out.rb
opal-connect-rspec-0.5.0 rspec-support/lib/rspec/support/spec/shell_out.rb
able-neo4j-1.0.0 vendor/bundle/jruby/1.9/gems/rspec-support-3.1.2/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.5.0 rspec-support/lib/rspec/support/spec/shell_out.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/logstash-codec-json-2.0.3/vendor/gems/rspec-support-3.1.2/lib/rspec/support/spec/shell_out.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/rspec-support-3.1.2/lib/rspec/support/spec/shell_out.rb
logstash-codec-json-2.0.3 vendor/gems/rspec-support-3.1.2/lib/rspec/support/spec/shell_out.rb
suzuko-0.1.8 vendor/bundle/ruby/2.0.0/gems/rspec-support-3.2.2/lib/rspec/support/spec/shell_out.rb
suzuko-0.1.7 vendor/bundle/ruby/2.0.0/gems/rspec-support-3.2.2/lib/rspec/support/spec/shell_out.rb
opal-rspec-0.5.0.beta3 rspec-support/lib/rspec/support/spec/shell_out.rb