class Aruba::Platforms::WindowsEnvironmentVariables

Windows is case-insensitive when it accesses its environment variables. That means that at the Windows command line:

C:>set Path
C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
C:>set PATH
C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;

If you access environment variables through ENV, you can access values no matter the case of the key:

irb: > ENV["Path"]
=> ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
irb: > ENV["Path"]
=> ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"

But if you copy the ENV to a hash, Ruby treats the keys as case sensitive:

irb: > env_copy = ENV.to_hash
=> {"ALLUSERSPROFILE"=>"C:\\ProgramData", "ANSICON"=>"119x1000 (119x58)", "ANSICON_DEF"=>"7",  APPDATA"=>"C:\\Users\\blorf\\AppData\\Roaming", ....}
irb: > env["Path"]
=> ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
irb: > env["PATH"]
=> nil

Thus we turn all of the environment variable keys to upper case so that aruba is ensured that accessing environment variables with upper case keys will always work.

Public Class Methods

new(env = ENV.to_hash) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 36
def initialize(env = ENV.to_hash)
  @actions = []

  @env = if RUBY_VERSION <= '1.9.3'
           # rubocop:disable Style/EachWithObject
           env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
         # rubocop:enable Style/EachWithObject
         else
           env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
         end
end

Public Instance Methods

[](name) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 68
def [](name)
  super(name.upcase)
end
[]=(name, value) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 72
def []=(name, value)
  super(name.upcase, value)
end
append(name, value) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 76
def append(name, value)
  super(name.upcase, value)
end
delete(name, value) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 84
def delete(name, value)
  super(name.upcase, value)
end
fetch(name, default = UnixEnvironmentVariables::UNDEFINED) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 60
def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
  super(name.upcase, default)
end
key?(name) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 64
def key?(name)
  super(name.upcase)
end
prepend(name, value) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 80
def prepend(name, value)
  super(name.upcase, value)
end
update(other_env, &block) click to toggle source
# File lib/aruba/platforms/windows_environment_variables.rb, line 48
def update(other_env, &block)
  other_env = if RUBY_VERSION <= '1.9.3'
                # rubocop:disable Style/EachWithObject
                other_env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
              # rubocop:enable Style/EachWithObject
              else
                other_env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
              end

  super(other_env, &block)
end