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.
# 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
# File lib/aruba/platforms/windows_environment_variables.rb, line 68 def [](name) super(name.upcase) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 72 def []=(name, value) super(name.upcase, value) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 76 def append(name, value) super(name.upcase, value) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 84 def delete(name, value) super(name.upcase, value) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 60 def fetch(name, default = UnixEnvironmentVariables::UNDEFINED) super(name.upcase, default) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 64 def key?(name) super(name.upcase) end
# File lib/aruba/platforms/windows_environment_variables.rb, line 80 def prepend(name, value) super(name.upcase, value) end
# 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