class Xcodeproj::XCScheme::EnvironmentVariables
This class wraps the EnvironmentVariables
node of a .xcscheme XML file. This is just a container of EnvironmentVariable
objects. It can either appear on a LaunchAction
or TestAction
scheme group.
Public Class Methods
@param [nil,REXML::Element,Array<EnvironmentVariable>,Array<Hash{Symbol => String,Bool}>] node_or_variables
The 'EnvironmentVariables' XML node, or list of environment variables, that this object represents. - If nil, an empty 'EnvironmentVariables' XML node will be created - If an REXML::Element, it must be named 'EnvironmentVariables' - If an Array of objects or Hashes, they'll each be passed to {#assign_variable}
# File lib/xcodeproj/scheme/environment_variables.rb, line 19 def initialize(node_or_variables = nil) create_xml_element_with_fallback(node_or_variables, VARIABLES_NODE) do @all_variables = [] node_or_variables.each { |var| assign_variable(var) } unless node_or_variables.nil? end end
Public Instance Methods
@param [String] key
The key to lookup
@return [EnvironmentVariable] variable
Returns the matching environment variable for a specified key
# File lib/xcodeproj/scheme/environment_variables.rb, line 68 def [](key) all_variables.find { |var| var.key == key } end
Assigns a value for a specified key
@param [String] key
The key to update in the environment variables
@param [String] value
The value to lookup
@return [EnvironmentVariable] variable
The newly updated environment variable
# File lib/xcodeproj/scheme/environment_variables.rb, line 81 def []=(key, value) assign_variable(:key => key, :value => value) self[key] end
@return [Array<EnvironmentVariable>]
The key value pairs currently set in @xml_element
# File lib/xcodeproj/scheme/environment_variables.rb, line 29 def all_variables @all_variables ||= @xml_element.get_elements(VARIABLE_NODE).map { |variable| EnvironmentVariable.new(variable) } end
Adds a given variable to the set of environment variables, or replaces it if that key already exists
@param [EnvironmentVariable,Hash{Symbol => String,Bool}] variable
The variable to add or update, backed by an EnvironmentVariable node. - If an EnvironmentVariable, the previous reference will still be valid - If a Hash, must conform to {EnvironmentVariable#initialize} requirements
@return [Array<EnvironmentVariable>]
The new set of environment variables after addition
# File lib/xcodeproj/scheme/environment_variables.rb, line 42 def assign_variable(variable) env_var = variable.is_a?(EnvironmentVariable) ? variable : EnvironmentVariable.new(variable) all_variables.each { |existing_var| remove_variable(existing_var) if existing_var.key == env_var.key } @xml_element.add_element(env_var.xml_element) @all_variables << env_var end
Removes a specified variable (by string or object) from the set of environment variables
@param [EnvironmentVariable,String] variable
The variable to remove
@return [Array<EnvironmentVariable>]
The new set of environment variables after removal
# File lib/xcodeproj/scheme/environment_variables.rb, line 56 def remove_variable(variable) env_var = variable.is_a?(EnvironmentVariable) ? variable : all_variables.find { |var| var.key == variable } raise "Unexpected parameter type: #{env_var.class}" unless env_var.is_a?(EnvironmentVariable) @xml_element.delete_element(env_var.xml_element) @all_variables -= [env_var] end
@return [Array<Hash{Symbol => String,Bool}>]
The current environment variables represented as an array
# File lib/xcodeproj/scheme/environment_variables.rb, line 89 def to_a all_variables.map(&:to_h) end