class Xcodeproj::Project::Object::GroupableHelper
def full_path(object)
-
(Pathname)- The path of the object without resolving the
Parameters:
-
object(PBXGroup, PBXFileReference) --
def full_path(object) folder = case object.source_tree when '<group>' object_parent = parent(object) if object_parent.isa == 'PBXProject'.freeze nil else full_path(object_parent) end when 'SOURCE_ROOT' nil when '<absolute>' Pathname.new('/'.freeze) else Pathname.new("${#{object.source_tree}}") end folder ||= Pathname.new('') if object.path folder + object.path else folder end end
def hierarchy_path(object)
-
(String)- A representation of the group hierarchy.
Parameters:
-
object(PBXGroup, PBXFileReference) --
def hierarchy_path(object) unless main_group?(object) parent = parent(object) parent = parent.hierarchy_path if parent.respond_to?(:hierarchy_path) "#{parent}/#{object.display_name}" end end
def main_group?(object)
-
(Bool)- Wether the object is the main group of the project.
Parameters:
-
object(PBXGroup, PBXFileReference) --
def main_group?(object) object.equal?(object.project.main_group) end
def move(object, new_parent)
-
(void)-
Parameters:
-
new_parent(PBXGroup) -- -
object(PBXGroup, PBXFileReference) --
def move(object, new_parent) unless object raise "[Xcodeproj] Attempt to move nil object to `#{new_parent}`." end unless new_parent raise "[Xcodeproj] Attempt to move object `#{object}` to nil parent." end if new_parent.equal?(object) raise "[Xcodeproj] Attempt to move object `#{object}` to itself." end if parents(new_parent).include?(object) raise "[Xcodeproj] Attempt to move object `#{object}` to a child object `#{new_parent}`." end object.parent.children.delete(object) new_parent << object end
def normalize_source_tree(source_tree)
-
(String)- the string value of the source tree.
Parameters:
-
source_tree(Symbol, String) --
def normalize_source_tree(source_tree) if source_tree.is_a?(Symbol) source_tree = SOURCE_TREES_BY_KEY[source_tree] end unless SOURCE_TREES_BY_KEY.values.include?(source_tree) raise "[Xcodeproj] Unrecognized source tree option `#{source_tree}`" end source_tree end
def parent(object)
-
(PBXGroup, PBXProject)- The parent of the object.
Parameters:
-
object(PBXGroup, PBXFileReference) --
def parent(object) referrers = object.referrers.uniq if referrers.count > 1 referrers = referrers.grep(PBXGroup) end if referrers.count == 0 raise '[Xcodeproj] Consistency issue: no parent ' \ "for object `#{object.display_name}`: "\ "`#{object.referrers.join('`, `')}`" elsif referrers.count > 1 raise '[Xcodeproj] Consistency issue: unexpected multiple parents ' \ "for object `#{object.display_name}`: "\ "#{object.referrers}" end referrers.first end
def parents(object)
-
(Array- The parents of the object.)
Parameters:
-
object(PBXGroup, PBXFileReference) --
def parents(object) if main_group?(object) [] else parent = parent(object) parents(parent).push(parent) end end
def real_path(object)
-
(Pathname)- The absolute path of the object resolving the
Parameters:
-
object(PBXGroup, PBXFileReference) --
def real_path(object) source_tree = source_tree_real_path(object) path = object.path || ''.freeze if source_tree source_tree + path else Pathname(path) end end
def set_path_with_source_tree(object, path, source_tree)
-
(void)-
Parameters:
-
source_tree(Symbol, String) -- -
path(#to_s) -- -
object(PBXGroup, PBXFileReference) --
def set_path_with_source_tree(object, path, source_tree) path = Pathname.new(path) source_tree = normalize_source_tree(source_tree) object.source_tree = source_tree if source_tree == SOURCE_TREES_BY_KEY[:absolute] unless path.absolute? raise '[Xcodeproj] Attempt to set a relative path with an ' \ "absolute source tree: `#{path}`" end object.path = path.to_s elsif source_tree == SOURCE_TREES_BY_KEY[:group] || source_tree == SOURCE_TREES_BY_KEY[:project] source_tree_real_path = GroupableHelper.source_tree_real_path(object) if source_tree_real_path && source_tree_real_path.absolute? == path.absolute? relative_path = path.relative_path_from(source_tree_real_path) object.path = relative_path.to_s else object.path = path.to_s end else object.path = path.to_s end end
def set_source_tree(object, source_tree)
-
(void)-
Parameters:
-
source_tree(Symbol, String) --
def set_source_tree(object, source_tree) source_tree = normalize_source_tree(source_tree) object.source_tree = source_tree end
def source_tree_real_path(object)
-
(Pathname)- The absolute path of the source tree of the
Parameters:
-
object(PBXGroup, PBXFileReference) --
def source_tree_real_path(object) case object.source_tree when '<group>' object_parent = parent(object) if object_parent.isa == 'PBXProject'.freeze object.project.project_dir else real_path(object_parent) end when 'SOURCE_ROOT' object.project.project_dir when '<absolute>' nil else Pathname.new("${#{object.source_tree}}") end end