Class: Xcodeproj::XCScheme::EnvironmentVariables

Inherits:
XMLElementWrapper show all
Defined in:
lib/xcodeproj/scheme/environment_variables.rb

Overview

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.

Instance Attribute Summary

Attributes inherited from XMLElementWrapper

#xml_element

Instance Method Summary collapse

Methods inherited from XMLElementWrapper

#to_s

Constructor Details

#initialize(node_or_variables = nil) ⇒ EnvironmentVariables



19
20
21
22
23
24
# 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

Instance Method Details

#[](key) ⇒ EnvironmentVariable



68
69
70
# File 'lib/xcodeproj/scheme/environment_variables.rb', line 68

def [](key)
  all_variables.find { |var| var.key == key }
end

#[]=(key, value) ⇒ EnvironmentVariable

Assigns a value for a specified key



81
82
83
84
# File 'lib/xcodeproj/scheme/environment_variables.rb', line 81

def []=(key, value)
  assign_variable(:key => key, :value => value)
  self[key]
end

#all_variablesArray<EnvironmentVariable>



29
30
31
# 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) ⇒ Array<EnvironmentVariable>

Adds a given variable to the set of environment variables, or replaces it if that key already exists



42
43
44
45
46
47
# 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) ⇒ Array<EnvironmentVariable>

Removes a specified variable (by string or object) from the set of environment variables



56
57
58
59
60
61
# 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_aArray<Hash{Symbol => String,Bool}>



89
90
91
# File 'lib/xcodeproj/scheme/environment_variables.rb', line 89

def to_a
  all_variables.map(&:to_h)
end