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

new(node_or_variables = nil) click to toggle source

@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

[](key) click to toggle source

@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
[]=(key, value) click to toggle source

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
all_variables() click to toggle source

@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
assign_variable(variable) click to toggle source

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
remove_variable(variable) click to toggle source

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
to_a() click to toggle source

@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