Class: Pod::Specification::Consumer
- Inherits:
-
Object
- Object
- Pod::Specification::Consumer
- Defined in:
- lib/cocoapods-core/specification/consumer.rb
Overview
Allows to conveniently access a Specification programmatically.
It takes care of:
-
standardizing the attributes
-
handling multi-platform values
-
handle default values
-
handle automatic container wrapping of values
-
handle inherited values
This class allows to store the values of the attributes in the Specification as specified in the DSL. The benefits is reduced reliance on meta programming to access the attributes and the possibility of serializing a specification back exactly as defined in a file.
Instance Attribute Summary collapse
-
#platform_name ⇒ Symbol
readonly
The name of the platform for which the specification needs to be consumed.
-
#spec ⇒ Specification
readonly
The specification to consume.
Regular attributes collapse
-
#compiler_flags ⇒ Array<String>
The list of compiler flags needed by the specification files.
-
#frameworks ⇒ Array<String>
A list of frameworks that the user’s target needs to link against.
-
#header_dir ⇒ String
The headers directory.
-
#header_mappings_dir ⇒ String
The directory from where to preserve the headers namespacing.
-
#info_plist ⇒ Hash{String => String}
The Info.plist values for the current specification.
-
#libraries ⇒ Array<String>
A list of libraries that the user’s target needs to link against.
-
#module_map ⇒ String
The path of the module map file.
-
#module_name ⇒ String
The module name.
-
#name ⇒ String
The name of the specification.
-
#pod_target_xcconfig ⇒ Hash{String => String}
The xcconfig flags for the current specification for the pod target.
-
#prefix_header_contents ⇒ String
The contents of the prefix header.
-
#prefix_header_file ⇒ String
The path of the prefix header file.
-
#requires_arc ⇒ Bool
(also: #requires_arc?)
Whether the source files of the specification require to be compiled with ARC.
-
#user_target_xcconfig ⇒ Hash{String => String}
The xcconfig flags for the current specification for the user target.
-
#weak_frameworks ⇒ Array<String>
A list of frameworks that the user’s target needs to weakly link against.
Test Support collapse
-
#app_host_name ⇒ String
Name of the app host this spec requires.
-
#requires_app_host ⇒ Bool
(also: #requires_app_host?)
Whether this test specification requires an app host.
-
#test_type ⇒ Symbol
The test type supported by this specification.
File patterns collapse
-
#dependencies ⇒ Array<Dependency>
The dependencies on other Pods.
-
#exclude_files ⇒ Array<String>
The file patterns that the Pod should ignore.
-
#merge_values(attr, existing_value, new_value) ⇒ String, ...
Merges the values of an attribute, either because the attribute is multi platform or because it is inherited.
-
#prepare_value(attr, value) ⇒ Object
Wraps a value in an Array if needed and calls the prepare hook to allow further customization of a value before storing it in the instance variable.
-
#preserve_paths ⇒ Array<String>
The paths that should be not cleaned.
-
#private_header_files ⇒ Array<String>
The private headers of the Pod.
-
#public_header_files ⇒ Array<String>
The public headers of the Pod.
-
#raw_value_for_attribute(the_spec, attr) ⇒ String, ...
Returns the value of a given attribute taking into account multi platform values.
-
#resource_bundles ⇒ Hash{String=>String}
] hash where the keys are the names of the resource bundles and the values are their relative file patterns.
-
#resources ⇒ Array<String>
A hash where the key represents the paths of the resources to copy and the values the paths of the resources that should be copied.
-
#scheme ⇒ Hash
A hash that contains the scheme configuration.
-
#script_phases ⇒ Array<Hash{Symbol=>String}>
An array of hashes where each hash represents a script phase.
-
#source_files ⇒ Array<String>
The source files of the Pod.
-
#value_for_attribute(attr_name) ⇒ String, ...
Returns the value for the attribute with the given name for the specification.
-
#value_with_inheritance(the_spec, attr) ⇒ String, ...
Returns the value of a given attribute taking into account inheritance.
-
#vendored_frameworks ⇒ Array<String>
The paths of the framework bundles shipped with the Pod.
-
#vendored_libraries ⇒ Array<String>
The paths of the libraries shipped with the Pod.
Class Method Summary collapse
-
.spec_attr_accessor(name) ⇒ Object
Creates a method to access the contents of the attribute.
Instance Method Summary collapse
-
#initialize(spec, platform) ⇒ Consumer
constructor
A new instance of Consumer.
Constructor Details
#initialize(spec, platform) ⇒ Consumer
34 35 36 37 38 39 40 41 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 34 def initialize(spec, platform) @spec = spec @platform_name = platform.is_a?(Symbol) ? platform : platform.name unless spec.supported_on_platform?(platform) raise StandardError, "#{self} is not compatible with #{platform}." end end |
Instance Attribute Details
#platform_name ⇒ Symbol (readonly)
28 29 30 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 28 def platform_name @platform_name end |
#spec ⇒ Specification (readonly)
23 24 25 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 23 def spec @spec end |
Class Method Details
.spec_attr_accessor(name) ⇒ Object
Creates a method to access the contents of the attribute.
51 52 53 54 55 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 51 def self.spec_attr_accessor(name) define_method(name) do value_for_attribute(name) end end |
Instance Method Details
#app_host_name ⇒ String
153 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 153 spec_attr_accessor :app_host_name |
#compiler_flags ⇒ Array<String>
95 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 95 spec_attr_accessor :compiler_flags |
#dependencies ⇒ Array<Dependency>
220 221 222 223 224 225 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 220 def dependencies value = value_for_attribute(:dependencies) value.map do |name, requirements| Dependency.new(name, requirements) end end |
#exclude_files ⇒ Array<String>
209 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 209 spec_attr_accessor :exclude_files |
#frameworks ⇒ Array<String>
80 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 80 spec_attr_accessor :frameworks |
#header_dir ⇒ String
135 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 135 spec_attr_accessor :header_dir |
#header_mappings_dir ⇒ String
140 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 140 spec_attr_accessor :header_mappings_dir |
#info_plist ⇒ Hash{String => String}
115 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 115 spec_attr_accessor :info_plist |
#libraries ⇒ Array<String>
90 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 90 spec_attr_accessor :libraries |
#merge_values(attr, existing_value, new_value) ⇒ String, ...
Merges the values of an attribute, either because the attribute is multi platform or because it is inherited.
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 309 def merge_values(attr, existing_value, new_value) return existing_value if new_value.nil? return new_value if existing_value.nil? if attr.types.include?(TrueClass) new_value.nil? ? existing_value : new_value elsif attr.container == Array r = [*existing_value] + [*new_value] r.compact elsif attr.container == Hash existing_value.merge(new_value) do |_, old, new| merge_hash_value(attr, old, new) end else new_value end end |
#module_map ⇒ String
131 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 131 spec_attr_accessor :module_map |
#module_name ⇒ String
127 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 127 spec_attr_accessor :module_name |
#name ⇒ String
69 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 69 spec_attr_accessor :name |
#pod_target_xcconfig ⇒ Hash{String => String}
100 101 102 103 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 100 def pod_target_xcconfig attr = Specification::DSL.attributes[:pod_target_xcconfig] merge_values(attr, value_for_attribute(:xcconfig), value_for_attribute(:pod_target_xcconfig)) end |
#prefix_header_contents ⇒ String
119 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 119 spec_attr_accessor :prefix_header_contents |
#prefix_header_file ⇒ String
123 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 123 spec_attr_accessor :prefix_header_file |
#prepare_value(attr, value) ⇒ Object
Only array containers are wrapped. To automatically wrap values for attributes with hash containers a prepare hook should be used.
Wraps a value in an Array if needed and calls the prepare hook to allow further customization of a value before storing it in the instance variable.
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 338 def prepare_value(attr, value) if attr.container == Array value = if value.is_a?(Hash) [value] else [*value].compact end end hook_name = prepare_hook_name(attr) if self.respond_to?(hook_name, true) send(hook_name, value) else value end end |
#preserve_paths ⇒ Array<String>
214 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 214 spec_attr_accessor :preserve_paths |
#private_header_files ⇒ Array<String>
173 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 173 spec_attr_accessor :private_header_files |
#public_header_files ⇒ Array<String>
169 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 169 spec_attr_accessor :public_header_files |
#raw_value_for_attribute(the_spec, attr) ⇒ String, ...
Returns the value of a given attribute taking into account multi platform values.
279 280 281 282 283 284 285 286 287 288 289 290 291 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 279 def raw_value_for_attribute(the_spec, attr) value = the_spec.attributes_hash[attr.name.to_s] value = prepare_value(attr, value) if attr.multi_platform? if platform_hash = the_spec.attributes_hash[platform_name.to_s] platform_value = platform_hash[attr.name.to_s] platform_value = prepare_value(attr, platform_value) value = merge_values(attr, value, platform_value) end end value end |
#requires_app_host ⇒ Bool Also known as: requires_app_host?
148 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 148 spec_attr_accessor :requires_app_host |
#requires_arc ⇒ Bool Also known as: requires_arc?
74 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 74 spec_attr_accessor :requires_arc |
#resource_bundles ⇒ Hash{String=>String}
189 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 189 spec_attr_accessor :resource_bundles |
#resources ⇒ Array<String>
204 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 204 spec_attr_accessor :resources |
#scheme ⇒ Hash
198 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 198 spec_attr_accessor :scheme |
#script_phases ⇒ Array<Hash{Symbol=>String}>
194 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 194 spec_attr_accessor :script_phases |
#source_files ⇒ Array<String>
165 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 165 spec_attr_accessor :source_files |
#test_type ⇒ Symbol
157 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 157 spec_attr_accessor :test_type |
#user_target_xcconfig ⇒ Hash{String => String}
108 109 110 111 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 108 def user_target_xcconfig attr = Specification::DSL.attributes[:user_target_xcconfig] merge_values(attr, value_for_attribute(:xcconfig), value_for_attribute(:user_target_xcconfig)) end |
#value_for_attribute(attr_name) ⇒ String, ...
Returns the value for the attribute with the given name for the specification. It takes into account inheritance, multi-platform attributes and default values.
240 241 242 243 244 245 246 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 240 def value_for_attribute(attr_name) attr = Specification::DSL.attributes[attr_name] value = value_with_inheritance(spec, attr) value = attr.default(platform_name) if value.nil? value = attr.container.new if value.nil? && attr.container value end |
#value_with_inheritance(the_spec, attr) ⇒ String, ...
Returns the value of a given attribute taking into account inheritance.
258 259 260 261 262 263 264 265 266 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 258 def value_with_inheritance(the_spec, attr) value = raw_value_for_attribute(the_spec, attr) if the_spec.root? || !attr.inherited? return value end parent_value = value_with_inheritance(the_spec.parent, attr) merge_values(attr, parent_value, value) end |
#vendored_frameworks ⇒ Array<String>
178 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 178 spec_attr_accessor :vendored_frameworks |
#vendored_libraries ⇒ Array<String>
183 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 183 spec_attr_accessor :vendored_libraries |
#weak_frameworks ⇒ Array<String>
85 |
# File 'lib/cocoapods-core/specification/consumer.rb', line 85 spec_attr_accessor :weak_frameworks |