Class: Aruba::Platforms::WindowsEnvironmentVariables

Inherits:
UnixEnvironmentVariables show all
Defined in:
lib/aruba/platforms/windows_environment_variables.rb

Overview

Windows is case-insensitive when it accesses its environment variables.

To work around this 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. See the following examples.

Examples:

Setting Windows environment variables using mixed case

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:

ENV["Path"] # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
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:

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

Constant Summary

Constants inherited from UnixEnvironmentVariables

UnixEnvironmentVariables::UNDEFINED

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from UnixEnvironmentVariables

#clear, #method_missing, #nest, #respond_to_missing?, #to_h

Constructor Details

#initialize(env = ENV) ⇒ WindowsEnvironmentVariables

Returns a new instance of WindowsEnvironmentVariables.



37
38
39
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 37

def initialize(env = ENV)
  super(upcase_env env)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Aruba::Platforms::UnixEnvironmentVariables

Class Method Details

.hash_from_envObject



73
74
75
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 73

def self.hash_from_env
  upcase_env(ENV)
end

.upcase_env(env) ⇒ Object



77
78
79
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 77

def self.upcase_env(env)
  env.each_with_object({}) { |(k, v), a| a[k.to_s.upcase] = v }
end

Instance Method Details

#[](name) ⇒ Object



53
54
55
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 53

def [](name)
  super(name.upcase)
end

#[]=(name, value) ⇒ Object



57
58
59
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 57

def []=(name, value)
  super(name.upcase, value)
end

#append(name, value) ⇒ Object



61
62
63
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 61

def append(name, value)
  super(name.upcase, value)
end

#delete(name) ⇒ Object



69
70
71
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 69

def delete(name)
  super(name.upcase)
end

#fetch(name, default = UnixEnvironmentVariables::UNDEFINED) ⇒ Object



45
46
47
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 45

def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
  super(name.upcase, default)
end

#key?(name) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 49

def key?(name)
  super(name.upcase)
end

#prepend(name, value) ⇒ Object



65
66
67
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 65

def prepend(name, value)
  super(name.upcase, value)
end

#update(other_env, &block) ⇒ Object



41
42
43
# File 'lib/aruba/platforms/windows_environment_variables.rb', line 41

def update(other_env, &block)
  super(upcase_env(other_env), &block)
end