class Xcodeproj::XCScheme::XMLElementWrapper

Abstract base class used for other XCScheme classes wrapping an XML element

Attributes

xml_element[R]

@return [REXML::Element]

The XML node wrapped and manipulated by this XMLElementWrapper object

Public Instance Methods

to_s() click to toggle source

@return [String]

The XML representation of the node this XMLElementWrapper wraps,
formatted in the same way that Xcode would.
# File lib/xcodeproj/scheme/xml_element_wrapper.rb, line 14
def to_s
  formatter = XMLFormatter.new(2)
  formatter.compact = false
  out = ''
  formatter.write(@xml_element, out)
  out.gsub!("<?xml version='1.0' encoding='UTF-8'?>", '')
  out << "\n"
  out
end

Private Instance Methods

bool_to_string(flag) click to toggle source

@param [Bool]

The boolean we want to represent as a string

@return [String]

The string representaiton of that boolean used in the XML ('YES' or 'NO')
# File lib/xcodeproj/scheme/xml_element_wrapper.rb, line 63
def bool_to_string(flag)
  flag ? 'YES' : 'NO'
end
create_xml_element_with_fallback(node, tag_name) { || ... } click to toggle source

This is a method intended to be used to facilitate the implementation of the initializers.

  • Create the @xml_element attribute based on the node passed as parameter, only if that parameter is of type REXML::Element and its name matches the tag_name given.

  • Otherwise, create a brand new REXML::Element with the proper tag name and execute the block given as a fallback to let the caller the chance to configure it

@param [REXML::Element, *] node

The node this XMLElementWrapper is expected to wrap
or any other object (typically an AbstractTarget instance, or nil) the initializer might expect

@param [String] tag_name

The expected name for the node, which will also be the name used to create the new node
if that `node` parameter is not a REXML::Element itself.

@yield a parameter-less block if the ‘node` parameter is not actually a REXML::Element

@raise Informative

If the `node` parameter is a REXML::Element instance but the node's name
doesn't match the one provided by the `tag_name` parameter.
# File lib/xcodeproj/scheme/xml_element_wrapper.rb, line 47
def create_xml_element_with_fallback(node, tag_name)
  if node && node.is_a?(REXML::Element)
    raise Informative, 'Wrong XML tag name' unless node.name == tag_name
    @xml_element = node
  else
    @xml_element = REXML::Element.new(tag_name)
    yield if block_given?
  end
end
string_to_bool(str) click to toggle source

@param [String]

The string representaiton of a boolean used in the XML ('YES' or 'NO')

@return [Bool]

The boolean interpretation of that string

@raise Informative

If the string is not representing a boolean (i.e. is neither 'YES' nor 'NO')
# File lib/xcodeproj/scheme/xml_element_wrapper.rb, line 76
def string_to_bool(str)
  raise Informative, 'Invalid tag value. Expected YES or NO.' unless %w(YES NO).include?(str)
  str == 'YES'
end