Class: Pod::Source
- Inherits:
-
Object
- Object
- Pod::Source
- Defined in:
- lib/cocoapods-core/source.rb,
lib/cocoapods-core/source/acceptor.rb,
lib/cocoapods-core/source/aggregate.rb,
lib/cocoapods-core/source/health_reporter.rb
Overview
The Source class is responsible to manage a collection of podspecs.
The backing store of the podspecs collection is an implementation detail abstracted from the rest of CocoaPods.
The default implementation uses a git repo as a backing store, where the podspecs are namespaced as:
"#{SPEC_NAME}/#{VERSION}/#{SPEC_NAME}.podspec"
Defined Under Namespace
Classes: Acceptor, Aggregate, HealthReporter
Instance Attribute Summary collapse
-
#repo ⇒ Pathname
readonly
The location of the repo of the source.
Queering the source collapse
-
#all_specs ⇒ Array<Specification>
All the specifications contained by the source.
-
#pod_sets ⇒ Array<Sets>
The sets of all the Pods.
-
#pods ⇒ Array<String>
The list of the name of all the Pods.
-
#set(pod_name) ⇒ Sets
Returns the set for the Pod with the given name.
-
#specification(name, version) ⇒ Specification
The specification for a given version of Pod.
-
#specification_path(name, version) ⇒ Pathname
Returns the path of the specification with the given name and version.
-
#versions(name) ⇒ Array<Version>
All the available versions for the Pod, sorted from highest to lowest.
Searching the source collapse
-
#search(dependency) ⇒ Set
A set for a given dependency.
-
#search_by_name(query, full_text_search = false) ⇒ Array<Set>
The list of the sets that contain the search term.
Representations collapse
-
#to_hash ⇒ Hash{String=>{String=>Specification}}
The static representation of all the specifications grouped first by name and then by version.
-
#to_yaml ⇒ String
The YAML encoded #to_hash representation.
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
Compares a source with another one for sorting purposes.
-
#initialize(repo) ⇒ Source
constructor
A new instance of Source.
-
#name ⇒ String
(also: #to_s)
The name of the source.
Constructor Details
#initialize(repo) ⇒ Source
Returns a new instance of Source.
25 26 27 |
# File 'lib/cocoapods-core/source.rb', line 25 def initialize(repo) @repo = Pathname.new(repo) end |
Instance Attribute Details
#repo ⇒ Pathname (readonly)
Returns the location of the repo of the source.
21 22 23 |
# File 'lib/cocoapods-core/source.rb', line 21 def repo @repo end |
Instance Method Details
#<=>(other) ⇒ Integer
Source are compared by the alphabetical order of their name, and this convention should be used in any case where sources need to be disambiguated.
Returns compares a source with another one for sorting purposes.
45 46 47 |
# File 'lib/cocoapods-core/source.rb', line 45 def <=> (other) name <=> other.name end |
#all_specs ⇒ Array<Specification>
Returns all the specifications contained by the source.
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/cocoapods-core/source.rb', line 131 def all_specs specs = pods.map do |name| begin versions(name).map { |version| specification(name, version) } rescue CoreUI.warn "Skipping `#{name}` because the podspec contains errors." next end end specs.flatten.compact end |
#name ⇒ String Also known as: to_s
Returns the name of the source.
31 32 33 |
# File 'lib/cocoapods-core/source.rb', line 31 def name repo.basename.to_s end |
#pod_sets ⇒ Array<Sets>
Returns the sets of all the Pods.
78 79 80 |
# File 'lib/cocoapods-core/source.rb', line 78 def pod_sets pods.map { |pod_name| set(pod_name) } end |
#pods ⇒ Array<String>
Using Pathname#children is sensibly slower.
Returns the list of the name of all the Pods.
57 58 59 60 61 62 63 |
# File 'lib/cocoapods-core/source.rb', line 57 def pods specs_dir_as_string = specs_dir.to_s Dir.entries(specs_dir).select do |entry| valid_name = !(entry =='.' || entry == '..' || entry == '.git') valid_name && File.directory?(File.join(specs_dir_as_string, entry)) end end |
#search(dependency) ⇒ Set
Returns a set for a given dependency. The set is identified by the name of the dependency and takes into account subspecs.
150 151 152 153 154 155 |
# File 'lib/cocoapods-core/source.rb', line 150 def search(dependency) pod_sets.find do |set| # First match the (top level) name, which does not yet load the spec from disk set.name == dependency.root_name end end |
#search_by_name(query, full_text_search = false) ⇒ Array<Set>
full text search requires to load the specification for each pod, hence is considerably slower.
Returns The list of the sets that contain the search term.
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/cocoapods-core/source.rb', line 169 def search_by_name(query, full_text_search = false) if full_text_search pod_sets.map do |set| begin s = set.specification text = "#{s.name} #{s.} #{s.summary} #{s.description}" rescue CoreUI.warn "Skipping `#{set.name}` because the podspec contains errors." end set if text && text.downcase.include?(query.downcase) end.compact else names = pods.select { |pod_name| pod_name.downcase.include?(query.downcase) } names.map { |pod_name| set(pod_name) } end end |
#set(pod_name) ⇒ Sets
Returns the set for the Pod with the given name.
72 73 74 |
# File 'lib/cocoapods-core/source.rb', line 72 def set(pod_name) Specification::Set.new(pod_name, self) end |
#specification(name, version) ⇒ Specification
Returns the specification for a given version of Pod.
101 102 103 |
# File 'lib/cocoapods-core/source.rb', line 101 def specification(name, version) Specification.from_file(specification_path(name, version)) end |
#specification_path(name, version) ⇒ Pathname
Returns the path of the specification with the given name and version.
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/cocoapods-core/source.rb', line 115 def specification_path(name, version) path = specs_dir + name + version.to_s specification_path = path + "#{name}.podspec.yaml" unless specification_path.exist? specification_path = path + "#{name}.podspec" end unless specification_path.exist? raise StandardError, "Unable to find the specification #{name} " \ "(#{version}) in the #{name} source." end specification_path end |
#to_hash ⇒ Hash{String=>{String=>Specification}}
Returns the static representation of all the specifications grouped first by name and then by version.
194 195 196 197 198 199 200 201 |
# File 'lib/cocoapods-core/source.rb', line 194 def to_hash hash = {} all_specs.each do |spec| hash[spec.name] ||= {} hash[spec.name][spec.version.version] = spec.to_hash end hash end |
#to_yaml ⇒ String
Returns the YAML encoded #to_hash representation.
205 206 207 208 |
# File 'lib/cocoapods-core/source.rb', line 205 def to_yaml require 'yaml' to_hash.to_yaml end |
#versions(name) ⇒ Array<Version>
Returns all the available versions for the Pod, sorted from highest to lowest.
88 89 90 91 92 93 94 95 |
# File 'lib/cocoapods-core/source.rb', line 88 def versions(name) pod_dir = specs_dir + name return unless pod_dir.exist? pod_dir.children.map do |v| basename = v.basename.to_s Version.new(basename) if v.directory? && basename[0,1] != '.' end.compact.sort.reverse end |