class Censorius::UUIDGenerator

The main generator class

Public Instance Methods

generate_all_paths_by_objects(projects) click to toggle source
# File lib/censorius.rb, line 11
def generate_all_paths_by_objects(projects)
  projects.each do |project|
    generate_paths(project.root_object, project.path.basename.to_s)
    without_path = project.objects.select { |o| @paths_by_object[o].nil? }
    raise "Without paths: #{without_path}" unless without_path.empty?
  end
end
generate_paths(object, parent_path = '') click to toggle source
# File lib/censorius.rb, line 19
def generate_paths(object, parent_path = '') # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
  case object
  when Xcodeproj::Project::Object::PBXProject
    generate_paths_project(object)
  when Xcodeproj::Project::Object::AbstractTarget
    generate_paths_target(object, parent_path)
  when Xcodeproj::Project::Object::PBXGroup
    generate_paths_group(object)
  when Xcodeproj::Project::Object::PBXFileReference
    generate_paths_file_reference(object)
  when Xcodeproj::Project::Object::XCConfigurationList
    generate_paths_configuration_list(object, parent_path)
  when Xcodeproj::Project::Object::XCBuildConfiguration
    generate_paths_configuration(object, parent_path)
  when Xcodeproj::Project::Object::AbstractBuildPhase
    generate_paths_phase(object, parent_path)
  when Xcodeproj::Project::Object::PBXBuildFile
    generate_paths_build_file(object, parent_path)
  when Xcodeproj::Project::Object::PBXContainerItemProxy
    generate_paths_container_item_proxy(object, parent_path)
  when Xcodeproj::Project::Object::PBXTargetDependency
    generate_paths_target_dependency(object, parent_path)
  when Xcodeproj::Project::Object::PBXReferenceProxy
    generate_paths_reference_proxy(object, parent_path)
  else
    raise "Unrecognized: #{object.class}, at: #{parent_path}"
  end

  @paths_by_object[object]
end
generate_paths_build_file(build_file, parent_path) click to toggle source
# File lib/censorius.rb, line 88
def generate_paths_build_file(build_file, parent_path)
  file_ref_path = generate_paths(build_file.file_ref)
  @paths_by_object[build_file] = "#{parent_path}/PBXBuildFile(#{file_ref_path})"
end
generate_paths_configuration(configuration, parent_path) click to toggle source
# File lib/censorius.rb, line 66
def generate_paths_configuration(configuration, parent_path)
  @paths_by_object[configuration] = "#{parent_path}/XCBuildConfiguration(#{configuration.name})"
end
generate_paths_configuration_list(configuration_list, parent_path) click to toggle source
# File lib/censorius.rb, line 59
def generate_paths_configuration_list(configuration_list, parent_path)
  @paths_by_object[configuration_list] = path = "#{parent_path}/XCConfigurationList"
  configuration_list.build_configurations.each do |config|
    generate_paths(config, path)
  end
end
generate_paths_container_item_proxy(proxy, parent_path) click to toggle source
# File lib/censorius.rb, line 122
def generate_paths_container_item_proxy(proxy, parent_path)
  params = [
    "type: #{proxy.proxy_type}",
    "containerPortal: #{proxy.container_portal_annotation.strip}",
    "remoteInfo: #{proxy.remote_info}"
  ]
  @paths_by_object[proxy] = "#{parent_path}/PBXContainerItemProxy(#{params.join(', ')})"
end
generate_paths_file_reference(file_reference) click to toggle source
# File lib/censorius.rb, line 101
def generate_paths_file_reference(file_reference) # rubocop:disable Metrics/AbcSize
  project_path = @paths_by_object[file_reference.project.root_object]
  params = []
  if !file_reference.name.nil? &&
     !file_reference.name.empty? &&
     file_reference.name != File.basename(file_reference.full_path, '.*') &&
     file_reference.name != File.basename(file_reference.full_path)
    params << "name: #{file_reference.name}"
  end
  params << file_reference.full_path.to_s

  @paths_by_object[file_reference] = "#{project_path}/PBXFileReference(#{params.join(', ')})"
end
generate_paths_group(group) click to toggle source
# File lib/censorius.rb, line 93
def generate_paths_group(group)
  project_path = @paths_by_object[group.project.root_object]
  @paths_by_object[group] = path = "#{project_path}/PBXGroup(#{group.hierarchy_path || '/'})"
  group.children.each do |child|
    generate_paths(child, path)
  end
end
generate_paths_phase(phase, parent_path) click to toggle source
# File lib/censorius.rb, line 81
def generate_paths_phase(phase, parent_path)
  @paths_by_object[phase] = path = "#{parent_path}/#{phase.class.name.split('::').last}(#{phase.display_name})"
  phase.files.each do |file|
    generate_paths(file, path)
  end
end
generate_paths_project(project) click to toggle source
# File lib/censorius.rb, line 50
def generate_paths_project(project)
  @paths_by_object[project] = path = "PBXProject(#{project.name})"
  generate_paths(project.main_group, path)
  generate_paths(project.build_configuration_list, path)
  project.targets.each do |target|
    generate_paths(target, path)
  end
end
generate_paths_reference_proxy(proxy, parent_path) click to toggle source
# File lib/censorius.rb, line 131
def generate_paths_reference_proxy(proxy, parent_path)
  @paths_by_object[proxy] = path = "#{parent_path}/PBXReferenceProxy(#{proxy.source_tree}/#{proxy.path})"
  generate_paths(proxy.remote_ref, path) if proxy.remote_ref
end
generate_paths_target(target, parent_path) click to toggle source
# File lib/censorius.rb, line 70
def generate_paths_target(target, parent_path)
  @paths_by_object[target] = path = "#{parent_path}/#{target.class.name.split('::').last}(#{target.name})"
  target.build_phases.each do |phase|
    generate_paths(phase, path)
  end
  generate_paths(target.build_configuration_list, path)
  target.dependencies.each do |dependency|
    generate_paths(dependency, path)
  end
end
generate_paths_target_dependency(dependency, parent_path) click to toggle source
# File lib/censorius.rb, line 115
def generate_paths_target_dependency(dependency, parent_path)
  raise "Unsupported: #{dependency}" unless dependency.target_proxy

  @paths_by_object[dependency] = path = "#{parent_path}/PBXTargetDependency(#{dependency.name})"
  generate_paths(dependency.target_proxy, path)
end
write_debug_paths() click to toggle source
# File lib/censorius.rb, line 136
def write_debug_paths
  return if @projects.empty?

  debug_info = @paths_by_object
               .to_a
               .map(&:last)
               .sort
  file_name = @projects.count == 1 ? File.basename(@projects.first.path, '.*') : 'multi'
  File.write("#{file_name}.txt", debug_info.join("\n"))
end