class ExternalPodSorter

Attributes

grouped_pods[RW]

Public Class Methods

new(data_source = LocalDataSource.new) click to toggle source
# File lib/cocoapods-external-pod-sorter/external_pod_sorter.rb, line 13
def initialize(data_source = LocalDataSource.new)
        @data_source = data_source
end

Public Instance Methods

sort() click to toggle source
# File lib/cocoapods-external-pod-sorter/external_pod_sorter.rb, line 18
def sort
        @grouped_pods = group_pods_by_dependency_depth(@data_source.untagged_dependencies, @data_source.reference_specifications)
        @grouped_pods
end

Private Instance Methods

group_pods_by_dependency_depth(untagged_dependencies, reference_specifications) click to toggle source
# File lib/cocoapods-external-pod-sorter/external_pod_sorter.rb, line 24
def group_pods_by_dependency_depth(untagged_dependencies, reference_specifications)
        result = []

        untagged_dependency_names = untagged_dependencies.map(&:name)
        untagged_specs = reference_specifications.select do |spec|
                untagged_dependency_names.include?(spec.name)
        end

        while untagged_specs.length > 0
                pods = []
                untagged_specs.each do |spec|
                        dependency_names = spec.recursive_dependencies(reference_specifications).map { |dep| dep.name }
                        untagged_name = spec.name

                        if untagged_specs.select { |spec| dependency_names.include?(spec.name) }.empty?
                                pod = ExternalPodSorter::PodItem.new(untagged_name)
                                pod.spec = reference_specifications.find { |spec| spec.name == untagged_name }     
                                pod.dependency = untagged_dependencies.find { |dep| dep.name == untagged_name }
                                pod.external_dependency_names = dependency_names.select { |name| untagged_dependency_names.include?(name) }
                                pods << pod
                        end
                end
                untagged_specs = untagged_specs.reject do |spec|
                        pods.select { |pod| pod.name == spec.name }.any?
                end
                result << pods
        end

        result
end