Class: Pod::Podfile::TargetDefinition
- Inherits:
-
Object
- Object
- Pod::Podfile::TargetDefinition
- Defined in:
- lib/cocoapods-core/podfile/target_definition.rb
Overview
The TargetDefinition stores the information of a CocoaPods static library. The target definition can be linked with one or more targets of the user project.
Target definitions can be nested and by default inherit the dependencies of the parent.
Representations collapse
- HASH_KEYS =
Returns The keys used by the hash representation of the target definition.
[ 'name', 'platform', 'podspecs', 'exclusive', 'link_with', 'link_with_first_target', 'inhibit_warnings', 'user_project_path', 'build_configurations', 'dependencies', 'children' ].freeze
Instance Attribute Summary collapse
-
#children ⇒ Array<TargetDefinition>
readonly
The children target definitions.
-
#parent ⇒ TargetDefinition, Podfile
readonly
The parent target definition or the Podfile if the receiver is root.
Attributes collapse
-
#build_configurations ⇒ Hash{String => symbol}
A hash where the keys are the name of the build configurations and the values a symbol that represents their type (‘:debug` or `:release`).
-
#build_configurations=(hash) ⇒ Hash{String => Symbol}, void
Sets the build configurations for this target.
-
#exclusive=(flag) ⇒ void
Sets whether the target definition is exclusive.
-
#exclusive? ⇒ Bool
Returns whether the target definition should inherit the dependencies of the parent.
-
#inhibit_all_warnings=(flag) ⇒ void
Sets whether the target definition should inhibit the warnings during compilation for all pods.
-
#inhibit_warnings_for_pod(pod_name) ⇒ void
Inhibits warnings for a specific pod during compilation.
-
#inhibits_warnings_for_pod?(pod_name) ⇒ Bool
Whether the target definition should inhibit warnings for a single pod.
-
#link_with ⇒ Array<String>
The list of the names of the Xcode targets with which this target definition should be linked with.
-
#link_with=(targets) ⇒ void
Sets the client targets that should be integrated by this definition.
-
#link_with_first_target=(flag) ⇒ void
Sets whether the target definition should link with the first target of the project.
-
#link_with_first_target? ⇒ Bool
Returns whether the target definition should link with the first target of the project.
-
#name ⇒ String
The path of the project this target definition should link with.
-
#name=(name) ⇒ void
Sets the path of the user project this target definition should link with.
-
#platform ⇒ Platform
The platform of the target definition.
-
#set_platform(name, target = nil) ⇒ void
Sets the platform of the target definition.
-
#store_pod(name, *requirements) ⇒ void
Stores the dependency for a Pod with the given name.
-
#store_podspec(options = nil) ⇒ void
Stores the podspec whose dependencies should be included by the target.
-
#user_project_path ⇒ String
The path of the project this target definition should link with.
-
#user_project_path=(path) ⇒ void
Sets the path of the user project this target definition should link with.
Representations collapse
-
.from_hash(hash, parent) ⇒ TargetDefinition
Configures a new target definition from the given hash.
-
#to_hash ⇒ Hash
The hash representation of the target definition.
Instance Method Summary collapse
-
#dependencies ⇒ Array<Dependency>
The list of the dependencies of the target definition including the inherited ones.
-
#empty? ⇒ Bool
Whether the target definition has at least one dependency, excluding inherited ones.
-
#initialize(name, parent, internal_hash = nil) ⇒ TargetDefinition
constructor
A new instance of TargetDefinition.
-
#inspect ⇒ String
A string representation suitable for debug.
-
#label ⇒ String
(also: #to_s)
The label of the target definition according to its name.
-
#non_inherited_dependencies ⇒ Array
The list of the dependencies of the target definition, excluding inherited ones.
-
#podfile ⇒ Podfile
The podfile that contains the specification for this target definition.
-
#recursive_children ⇒ Array<TargetDefinition>
The targets definition descending from this one.
-
#root ⇒ TargetDefinition
The root target definition.
-
#root? ⇒ Bool
Whether the target definition is root.
Constructor Details
#initialize(name, parent, internal_hash = nil) ⇒ TargetDefinition
Returns a new instance of TargetDefinition.
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 27 def initialize(name, parent, internal_hash = nil) @internal_hash = internal_hash || {} @parent = parent @children = [] unless internal_hash self.name = name end if parent.is_a?(TargetDefinition) parent.children << self end end |
Instance Attribute Details
#children ⇒ Array<TargetDefinition>
Returns the children target definitions.
42 43 44 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 42 def children @children end |
#parent ⇒ TargetDefinition, Podfile (readonly)
Returns the parent target definition or the Podfile if the receiver is root.
16 17 18 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 16 def parent @parent end |
Class Method Details
.from_hash(hash, parent) ⇒ TargetDefinition
Configures a new target definition from the given hash.
452 453 454 455 456 457 458 459 460 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 452 def self.from_hash(hash, parent) internal_hash = hash.dup children_hashes = internal_hash.delete('children') || [] definition = TargetDefinition.new(nil, parent, internal_hash) children_hashes.each do |child_hash| TargetDefinition.from_hash(child_hash, definition) end definition end |
Instance Method Details
#build_configurations ⇒ Hash{String => symbol}
Returns A hash where the keys are the name of the build configurations and the values a symbol that represents their type (‘:debug` or `:release`).
252 253 254 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 252 def build_configurations get_hash_value('build_configurations') || (parent.build_configurations unless root?) end |
#build_configurations=(hash) ⇒ Hash{String => Symbol}, void
Sets the build configurations for this target.
264 265 266 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 264 def build_configurations=(hash) set_hash_value('build_configurations', hash) unless hash.empty? end |
#dependencies ⇒ Array<Dependency>
Returns The list of the dependencies of the target definition including the inherited ones.
77 78 79 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 77 def dependencies non_inherited_dependencies + ((exclusive? || parent.nil?) ? [] : parent.dependencies) end |
#empty? ⇒ Bool
Returns Whether the target definition has at least one dependency, excluding inherited ones.
91 92 93 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 91 def empty? non_inherited_dependencies.empty? end |
#exclusive=(flag) ⇒ void
This method returns an undefined value.
Sets whether the target definition is exclusive.
168 169 170 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 168 def exclusive=(flag) set_hash_value('exclusive', flag) end |
#exclusive? ⇒ Bool
A target is always ‘exclusive` if it is root.
A target is always ‘exclusive` if the `platform` does not match the parent’s ‘platform`.
Returns whether the target definition should inherit the dependencies of the parent.
153 154 155 156 157 158 159 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 153 def exclusive? if root? true else get_hash_value('exclusive') || ( platform && parent && parent.platform != platform ) end end |
#inhibit_all_warnings=(flag) ⇒ void
This method returns an undefined value.
Sets whether the target definition should inhibit the warnings during compilation for all pods.
289 290 291 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 289 def inhibit_all_warnings=(flag) inhibit_warnings_hash['all'] = flag end |
#inhibit_warnings_for_pod(pod_name) ⇒ void
This method returns an undefined value.
Inhibits warnings for a specific pod during compilation.
300 301 302 303 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 300 def inhibit_warnings_for_pod(pod_name) inhibit_warnings_hash['for_pods'] ||= [] inhibit_warnings_hash['for_pods'] << pod_name end |
#inhibits_warnings_for_pod?(pod_name) ⇒ Bool
Whether the target definition should inhibit warnings for a single pod. If inhibit_all_warnings is true, it will return true for any asked pod.
274 275 276 277 278 279 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 274 def inhibits_warnings_for_pod?(pod_name) return true if inhibit_warnings_hash['all'] || (parent.inhibits_warnings_for_pod?(pod_name) unless root?) inhibit_warnings_hash['for_pods'] ||= [] inhibit_warnings_hash['for_pods'].include? pod_name end |
#inspect ⇒ String
Returns A string representation suitable for debug.
112 113 114 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 112 def inspect "#<#{self.class} label=#{label}>" end |
#label ⇒ String Also known as: to_s
Returns The label of the target definition according to its name.
98 99 100 101 102 103 104 105 106 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 98 def label if root? && name == "Pods" "Pods" elsif exclusive? || parent.nil? "Pods-#{name}" else "#{parent.label}-#{name}" end end |
#link_with ⇒ Array<String>
Returns The list of the names of the Xcode targets with which this target definition should be linked with.
177 178 179 180 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 177 def link_with value = get_hash_value('link_with') value unless value.nil? || value.empty? end |
#link_with=(targets) ⇒ void
This method returns an undefined value.
Sets the client targets that should be integrated by this definition.
189 190 191 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 189 def link_with=(targets) set_hash_value('link_with', Array(targets).map(&:to_s)) end |
#link_with_first_target=(flag) ⇒ void
This option is ignored if #link_with is set.
This method returns an undefined value.
Sets whether the target definition should link with the first target of the project.
216 217 218 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 216 def link_with_first_target=(flag) set_hash_value('link_with_first_target', flag) end |
#link_with_first_target? ⇒ Bool
This option is ignored if #link_with is set.
Returns whether the target definition should link with the first target of the project.
202 203 204 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 202 def link_with_first_target? get_hash_value('link_with_first_target') unless link_with end |
#name ⇒ String
Returns the path of the project this target definition should link with.
125 126 127 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 125 def name get_hash_value('name') end |
#name=(name) ⇒ void
This method returns an undefined value.
Sets the path of the user project this target definition should link with.
137 138 139 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 137 def name=(name) set_hash_value('name', name) end |
#non_inherited_dependencies ⇒ Array
Returns The list of the dependencies of the target definition, excluding inherited ones.
84 85 86 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 84 def non_inherited_dependencies pod_dependencies.concat(podspec_dependencies) end |
#platform ⇒ Platform
If no deployment target has been specified a default value is provided.
Returns the platform of the target definition.
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 312 def platform name_or_hash = get_hash_value('platform') if name_or_hash if name_or_hash.is_a?(Hash) name = name_or_hash.keys.first.to_sym target = name_or_hash.values.first else name = name_or_hash.to_sym end target ||= (name == :ios ? '4.3' : '10.6') Platform.new(name, target) else parent.platform unless root? end end |
#podfile ⇒ Podfile
Returns The podfile that contains the specification for this target definition.
70 71 72 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 70 def podfile root.parent end |
#recursive_children ⇒ Array<TargetDefinition>
Returns the targets definition descending from this one.
47 48 49 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 47 def recursive_children (children + children.map(&:recursive_children)).flatten end |
#root ⇒ TargetDefinition
Returns The root target definition.
59 60 61 62 63 64 65 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 59 def root if root? self else parent.root end end |
#root? ⇒ Bool
Returns Whether the target definition is root.
53 54 55 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 53 def root? parent.is_a?(Podfile) || parent.nil? end |
#set_platform(name, target = nil) ⇒ void
This method returns an undefined value.
Sets the platform of the target definition.
340 341 342 343 344 345 346 347 348 349 350 351 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 340 def set_platform(name, target = nil) unless [:ios, :osx].include?(name) raise StandardError, "Unsupported platform `#{name}`. Platform must be `:ios` or `:osx`." end if target value = {name.to_s => target} else value = name.to_s end set_hash_value('platform', value) end |
#store_pod(name, *requirements) ⇒ void
This needs urgently a rename.
The dependencies are stored as an array. To simplify the YAML representation if they have requirements they are represented as a Hash, otherwise only the String of the name is added to the array.
This method returns an undefined value.
Stores the dependency for a Pod with the given name.
372 373 374 375 376 377 378 379 380 381 382 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 372 def store_pod(name, *requirements) parse_inhibit_warnings(name, requirements) if requirements && !requirements.empty? pod = { name => requirements } else pod = name end get_hash_value('dependencies', []) << pod end |
#store_podspec(options = nil) ⇒ void
This needs urgently a rename.
The storage of this information is optimized for YAML readability.
This method returns an undefined value.
Stores the podspec whose dependencies should be included by the target.
401 402 403 404 405 406 407 408 409 410 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 401 def store_podspec( = nil) if unless .keys.all? { |key| [:name, :path].include?(key) } raise StandardError, "Unrecognized options for the podspec method `#{options}`" end get_hash_value('podspecs', []) << else get_hash_value('podspecs', []) << { :autodetect => true } end end |
#to_hash ⇒ Hash
Returns The hash representation of the target definition.
437 438 439 440 441 442 443 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 437 def to_hash hash = internal_hash.dup unless children.empty? hash['children'] = children.map(&:to_hash) end hash end |
#user_project_path ⇒ String
Returns the path of the project this target definition should link with.
225 226 227 228 229 230 231 232 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 225 def user_project_path path = get_hash_value('user_project_path') if path File.extname(path) == '.xcodeproj' ? path : "#{path}.xcodeproj" else parent.user_project_path unless root? end end |
#user_project_path=(path) ⇒ void
This method returns an undefined value.
Sets the path of the user project this target definition should link with.
242 243 244 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 242 def user_project_path=(path) set_hash_value('user_project_path', path) end |