Sha256: ec5da09d704ae45bfcd6846c2f45d0eedebb696c731b22762fe1aafdb11aff38

Contents?: true

Size: 1.36 KB

Versions: 10

Compression:

Stored size: 1.36 KB

Contents

module Fasten
  class StdThreadProxy
    def initialize(original)
      @original = original
    end

    def respond_to?(name, include_private = false)
      target = Thread.current[:FASTEN_STD_THREAD_PROXY] || @original
      target.send :respond_to?, name, include_private
    end

    private

    def respond_to_missing?(name, include_private = false)
      target = Thread.current[:FASTEN_STD_THREAD_PROXY] || @original
      target.send :respond_to_missing?, name, include_private
    end

    def method_missing(method, *args, &block) # rubocop:disable MethodMissingSuper
      target = Thread.current[:FASTEN_STD_THREAD_PROXY] || @original
      target.send method, *args, &block
    end

    class << self
      def install
        return if @installed

        oldverbose = $VERBOSE
        $VERBOSE = nil

        Object.const_set :STDOUT, StdThreadProxy.new(STDOUT)
        Object.const_set :STDERR, StdThreadProxy.new(STDERR)
        $stdout = StdThreadProxy.new $stdout
        $stderr = StdThreadProxy.new $stderr

        @installed = true
      ensure
        $VERBOSE = oldverbose
      end

      def thread_io=(io)
        Thread.current[:FASTEN_STD_THREAD_PROXY] = io
      end

      def thread_io
        Thread.current[:FASTEN_STD_THREAD_PROXY]
      end

      def uninstall
        return unless @installed

        @installed = nil
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
fasten-0.10.0 lib/fasten/std_thread_proxy.rb
fasten-0.8.8 lib/fasten/std_thread_proxy.rb
fasten-0.8.6 lib/fasten/std_thread_proxy.rb
fasten-0.8.4 lib/fasten/std_thread_proxy.rb
fasten-0.8.0 lib/fasten/std_thread_proxy.rb
fasten-0.7.6 lib/fasten/std_thread_proxy.rb
fasten-0.7.4 lib/fasten/std_thread_proxy.rb
fasten-0.7.2 lib/fasten/std_thread_proxy.rb
fasten-0.7.0 lib/fasten/std_thread_proxy.rb
fasten-0.6.0 lib/fasten/std_thread_proxy.rb