Class: Pod::Specification::Set
- Inherits:
-
Object
- Object
- Pod::Specification::Set
- Defined in:
- lib/cocoapods-core/specification/set.rb,
lib/cocoapods-core/specification/set/presenter.rb,
lib/cocoapods-core/specification/set/statistics.rb
Overview
The alphabetical order of the sets is used to select a specification if multiple are available for a given version.
The set class is not and should be not aware of the backing store of a Source.
A Specification::Set is responsible of handling all the specifications of a Pod. This class stores the information of the dependencies that required a Pod in the resolution process.
Direct Known Subclasses
Defined Under Namespace
Classes: External, Presenter, Statistics
Instance Attribute Summary collapse
-
#dependencies ⇒ Object
Returns the value of attribute dependencies.
-
#dependencies_by_requirer_name ⇒ Object
———————————————————————–#.
-
#name ⇒ String
readonly
The name of the Pod.
-
#sources ⇒ Array<Source>
readonly
The sources that contain the specifications for the available versions of a Pod.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#acceptable_versions ⇒ Array<Version>
All the versions which are acceptable given the requirements.
-
#dependency ⇒ Dependency
A dependency that includes all the versions requirements of the stored dependencies.
-
#highest_version ⇒ Version
The highest version known of the specification.
-
#highest_version_spec_path ⇒ Pathname
The path of the highest version.
-
#initialize(name, sources = []) ⇒ Set
constructor
A new instance of Set.
-
#required_by(dependency, dependent_name) ⇒ void
Stores a dependency on the Pod.
-
#required_version ⇒ Version
The highest version that satisfies the stored dependencies.
-
#specification ⇒ Specification
The top level specification of the Pod for the #required_version.
-
#specification_path_for_version(version) ⇒ Object
TODO.
-
#to_hash ⇒ Hash
Returns a hash representation of the set composed by dumb data types.
- #to_s ⇒ Object (also: #inspect)
-
#versions ⇒ Array<Version>
All the available versions for the Pod, sorted from highest to lowest.
-
#versions_by_source ⇒ Hash{Source => Version}
All the available versions for the Pod grouped by source.
Constructor Details
#initialize(name, sources = []) ⇒ Set
Returns a new instance of Set.
35 36 37 38 39 40 41 |
# File 'lib/cocoapods-core/specification/set.rb', line 35 def initialize(name, sources = []) @name = name sources = sources.is_a?(Array) ? sources : [sources] @sources = sources.sort_by(&:name) @dependencies_by_requirer_name = {} @dependencies = [] end |
Instance Attribute Details
#dependencies ⇒ Object
Returns the value of attribute dependencies.
198 199 200 |
# File 'lib/cocoapods-core/specification/set.rb', line 198 def dependencies @dependencies end |
#dependencies_by_requirer_name ⇒ Object
———————————————————————–#
197 198 199 |
# File 'lib/cocoapods-core/specification/set.rb', line 197 def dependencies_by_requirer_name @dependencies_by_requirer_name end |
#name ⇒ String (readonly)
Returns the name of the Pod.
22 23 24 |
# File 'lib/cocoapods-core/specification/set.rb', line 22 def name @name end |
#sources ⇒ Array<Source> (readonly)
Returns the sources that contain the specifications for the available versions of a Pod.
27 28 29 |
# File 'lib/cocoapods-core/specification/set.rb', line 27 def sources @sources end |
Instance Method Details
#==(other) ⇒ Object
159 160 161 162 163 |
# File 'lib/cocoapods-core/specification/set.rb', line 159 def ==(other) self.class == other.class && @name == other.name && @sources.map(&:name) == other.sources.map(&:name) end |
#acceptable_versions ⇒ Array<Version>
Returns All the versions which are acceptable given the requirements.
125 126 127 |
# File 'lib/cocoapods-core/specification/set.rb', line 125 def acceptable_versions versions.select { |v| dependency.match?(name, v) } end |
#dependency ⇒ Dependency
Returns A dependency that includes all the versions requirements of the stored dependencies.
79 80 81 82 83 |
# File 'lib/cocoapods-core/specification/set.rb', line 79 def dependency dependencies.reduce(Dependency.new(name)) do |previous, dependency| previous.merge(dependency.to_root_dependency) end end |
#highest_version ⇒ Version
Returns The highest version known of the specification.
138 139 140 |
# File 'lib/cocoapods-core/specification/set.rb', line 138 def highest_version versions.first end |
#highest_version_spec_path ⇒ Pathname
Returns The path of the highest version.
144 145 146 |
# File 'lib/cocoapods-core/specification/set.rb', line 144 def highest_version_spec_path specification_path_for_version(highest_version) end |
#required_by(dependency, dependent_name) ⇒ void
This should simply return a boolean. Is CocoaPods that should raise.
This method returns an undefined value.
Stores a dependency on the Pod.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/cocoapods-core/specification/set.rb', line 60 def required_by(dependency, dependent_name) dependencies_by_requirer_name[dependent_name] ||= [] dependencies_by_requirer_name[dependent_name] << dependency dependencies << dependency if acceptable_versions.empty? = "Unable to satisfy the following requirements:\n" dependencies_by_requirer_name.each do |name, dependencies| dependencies.each do |dep| << "- `#{dep}` required by `#{name}`" end end raise Informative, end end |
#required_version ⇒ Version
This should simply return nil. CocoaPods should raise instead.
Returns the highest version that satisfies the stored dependencies.
113 114 115 116 117 118 119 120 |
# File 'lib/cocoapods-core/specification/set.rb', line 113 def required_version version = versions.find { |v| dependency.match?(name, v) } unless version raise Informative, "Required version (#{dependency}) not found " \ "for `#{name}`.\nAvailable versions: #{versions.join(', ')}" end version end |
#specification ⇒ Specification
If multiple sources have a specification for the #required_version The alphabetical order of their names is used to disambiguate.
Returns the top level specification of the Pod for the #required_version.
92 93 94 95 |
# File 'lib/cocoapods-core/specification/set.rb', line 92 def specification path = specification_path_for_version(required_version) Specification.from_file(path) end |
#specification_path_for_version(version) ⇒ Object
TODO
99 100 101 102 103 104 105 106 |
# File 'lib/cocoapods-core/specification/set.rb', line 99 def specification_path_for_version(version) sources = [] versions_by_source.each do |source, source_versions| sources << source if source_versions.include?(required_version) end source = sources.sort_by(&:name).first source.specification_path(name, required_version) end |
#to_hash ⇒ Hash
Returns a hash representation of the set composed by dumb data types.
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/cocoapods-core/specification/set.rb', line 182 def to_hash versions = versions_by_source.reduce({}) do |memo, (source, version)| memo[source.name] = version.map(&:to_s) memo end { 'name' => name, 'versions' => versions, 'highest_version' => highest_version.to_s, 'highest_version_spec' => highest_version_spec_path.to_s, } end |
#to_s ⇒ Object Also known as: inspect
165 166 167 168 |
# File 'lib/cocoapods-core/specification/set.rb', line 165 def to_s "#<#{self.class.name} for `#{name}' with required version " \ "`#{required_version}' available at `#{sources.map(&:name) * ', '}'>" end |
#versions ⇒ Array<Version>
Returns all the available versions for the Pod, sorted from highest to lowest.
132 133 134 |
# File 'lib/cocoapods-core/specification/set.rb', line 132 def versions versions_by_source.values.flatten.uniq.sort.reverse end |
#versions_by_source ⇒ Hash{Source => Version}
Returns all the available versions for the Pod grouped by source.
151 152 153 154 155 156 157 |
# File 'lib/cocoapods-core/specification/set.rb', line 151 def versions_by_source result = {} sources.each do |source| result[source] = source.versions(name) end result end |