Class: Pod::Source::Aggregate
- Inherits:
-
Object
- Object
- Pod::Source::Aggregate
- Defined in:
- lib/cocoapods-core/source/aggregate.rb
Overview
The Aggregate manages a directory of sources repositories.
Instance Attribute Summary collapse
-
#sources ⇒ Array<Source>
readonly
The ordered list of sources.
Search collapse
-
#search(dependency) ⇒ Set?
A set for a given dependency including all the Pod::Source that contain the Pod.
-
#search_by_name(query, full_text_search = false) ⇒ Array<Set>
The sets that contain the search term.
Search Index collapse
-
#generate_search_index_for_changes_in_source(source, spec_paths) ⇒ Hash{String=>Hash}
Generates from scratch the search data for changed specifications in given source.
-
#generate_search_index_for_source(source) ⇒ Hash{String=>Hash}
Generates from scratch the search data for given source.
Private helpers collapse
-
#generate_search_index_for_sets(sets) ⇒ Object
private
Generates search data for given array of sets.
-
#word_list_from_set(set) ⇒ Array<String>
private
Returns the vocabulary extracted from the most representative specification of the set.
Instance Method Summary collapse
-
#all_pods ⇒ Array<String>
The names of all the pods available.
-
#all_sets ⇒ Array<Set>
The sets for all the pods available.
-
#initialize(sources) ⇒ Aggregate
constructor
A new instance of Aggregate.
-
#representative_set(name) ⇒ Set
Returns a set configured with the source which contains the highest version in the aggregate.
Constructor Details
#initialize(sources) ⇒ Aggregate
Returns a new instance of Aggregate.
12 13 14 15 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 12 def initialize(sources) raise "Cannot initialize an aggregate with a nil source: (#{sources})" if sources.include?(nil) @sources = sources end |
Instance Attribute Details
#sources ⇒ Array<Source> (readonly)
Returns The ordered list of sources.
8 9 10 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 8 def sources @sources end |
Instance Method Details
#all_pods ⇒ Array<String>
Returns the names of all the pods available.
19 20 21 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 19 def all_pods sources.map(&:pods).flatten.uniq end |
#all_sets ⇒ Array<Set>
Implementation detail: The sources don't cache their values because they might change in response to an update. Therefore this method to preserve performance caches the values before processing them.
Returns The sets for all the pods available.
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 30 def all_sets pods_by_source = {} sources.each do |source| pods_by_source[source] = source.pods end pods = pods_by_source.values.flatten.uniq pods.map do |pod| pod_sources = sources.select { |s| pods_by_source[s].include?(pod) } pod_sources = pod_sources.compact Specification::Set.new(pod, pod_sources) end end |
#generate_search_index_for_changes_in_source(source, spec_paths) ⇒ Hash{String=>Hash}
Generates from scratch the search data for changed specifications in given source.
150 151 152 153 154 155 156 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 150 def generate_search_index_for_changes_in_source(source, spec_paths) pods = source.pods_for_specification_paths(spec_paths) sets = pods.map do |pod| Specification::Set.new(pod, source) end generate_search_index_for_sets(sets) end |
#generate_search_index_for_sets(sets) ⇒ Object (private)
Generates search data for given array of sets.
164 165 166 167 168 169 170 171 172 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 164 def generate_search_index_for_sets(sets) result = {} sets.each do |set| word_list_from_set(set).each do |w| (result[w] ||= []).push(set.name) end end result end |
#generate_search_index_for_source(source) ⇒ Hash{String=>Hash}
Generates from scratch the search data for given source. This operation can take a considerable amount of time (seconds) as it needs to evaluate the most representative podspec for each Pod.
137 138 139 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 137 def generate_search_index_for_source(source) generate_search_index_for_sets(source.pod_sets) end |
#representative_set(name) ⇒ Set
Returns a set configured with the source which contains the highest version in the aggregate.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 53 def representative_set(name) representative_source = nil highest_version = nil sources.each do |source| source_versions = source.versions(name) if source_versions source_version = source_versions.first if highest_version.nil? || (highest_version < source_version) highest_version = source_version representative_source = source end end end representative_source ? Specification::Set.new(name, representative_source) : nil end |
#search(dependency) ⇒ Set?
Returns a set for a given dependency including all the Pod::Source that contain the Pod. If no sources containing the Pod where found it returns nil.
82 83 84 85 86 87 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 82 def search(dependency) found_sources = sources.select { |s| s.search(dependency) } unless found_sources.empty? Specification::Set.new(dependency.root_name, found_sources) end end |
#search_by_name(query, full_text_search = false) ⇒ Array<Set>
Clients should raise not this method.
Returns the sets that contain the search term.
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 97 def search_by_name(query, full_text_search = false) pods_by_source = {} result = [] sources.each do |s| source_pods = s.search_by_name(query, full_text_search) pods_by_source[s] = source_pods.map(&:name) end root_spec_names = pods_by_source.values.flatten.uniq root_spec_names.each do |pod| result_sources = sources.select do |source| pods_by_source[source].include?(pod) end result << Specification::Set.new(pod, result_sources) end if result.empty? extra = ', author, summary, or description' if full_text_search raise Informative, 'Unable to find a pod with name' \ "#{extra} matching `#{query}'" end result end |
#word_list_from_set(set) ⇒ Array<String> (private)
If the specification can't load an empty array is returned and a warning is printed.
For compatibility with non Ruby clients a strings are used instead of symbols for the keys.
Returns the vocabulary extracted from the most representative specification of the set. Vocabulary contains words from following information:
- version
- summary
- description
- authors
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/cocoapods-core/source/aggregate.rb', line 193 def word_list_from_set(set) spec = set.specification word_list = [set.name.dup] if spec.summary word_list += spec.summary.split end if spec.description word_list += spec.description.split end if spec. spec..each_pair do |k, v| word_list += k.split if k word_list += v.split if v end end word_list.uniq rescue CoreUI.warn "Skipping `#{set.name}` because the podspec contains " \ 'errors.' [] end |