Sha256: e5a9ade1fe303a60944dd8b63cd588a49c02b84b983de5f3dd636f2d1fe5c22c

Contents?: true

Size: 573 Bytes

Versions: 1

Compression:

Stored size: 573 Bytes

Contents

require "thread"
require "forwardable"

module ClimateControl
  class Environment
    extend Forwardable

    def initialize
      @semaphore = Mutex.new
      @owner = nil
    end

    def_delegators :env, :[]=, :to_hash, :[], :delete

    def synchronize
      if @owner == Thread.current
        return yield if block_given?
      end

      @semaphore.synchronize do
        begin
          @owner = Thread.current
          yield if block_given?
        ensure
          @owner = nil
        end
      end
    end

    private

    def env
      ENV
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
climate_control-0.2.0 lib/climate_control/environment.rb