Class: Pod::Generate::Configuration
- Inherits:
-
Object
- Object
- Pod::Generate::Configuration
- Defined in:
- lib/cocoapods-modularization/generate/configuration.rb
Class Attribute Summary collapse
-
.options ⇒ Array<Option>
readonly
All of the options available in the configuration.
Instance Attribute Summary collapse
-
#app_host_source_dir ⇒ [String, Pathname]
readonly
defaults to ‘nil`.
-
#auto_open ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#clean ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#deterministic_uuids ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#gen_directory ⇒ [String, Pathname]
readonly
defaults to ‘Pathname(“gen”).expand_path`.
-
#generate_multiple_pod_projects ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#incremental_installation ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#local_sources ⇒ new
readonly
defaults to ‘[]`.
-
#lockfile ⇒ [Pod::Lockfile]
readonly
defaults to ‘pod_config.lockfile`.
-
#platforms ⇒ new
readonly
defaults to ‘nil`.
-
#pod_config ⇒ Config
readonly
defaults to ‘Pod::Config.instance`.
-
#podfile ⇒ [Podfile]
readonly
defaults to ‘Podfile.from_file(podfile_path) if (podfile_path && File.file?(File.expand_path(podfile_path)))`.
-
#podfile_path ⇒ [String, Pathname]
readonly
defaults to ‘pod_config.podfile_path`.
-
#podfile_plugins ⇒ new
readonly
defaults to ‘(use_podfile && podfile) ? podfile.plugins : {}`.
-
#podspec_paths ⇒ new
readonly
defaults to ‘[Pathname(?.)]`.
-
#podspecs ⇒ new
readonly
defaults to ‘self.class.podspecs_from_paths(podspec_paths)`.
-
#repo_update ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#share_schemes_for_development_pods ⇒ BOOLEAN
readonly
defaults to ‘true`.
-
#sources ⇒ new
readonly
defaults to ‘if use_podfile && podfile then ::Pod::Installer::Analyzer.new(:sandbox, podfile).sources.map(&:url) else pod_config.sources_manager.all.map(&:url) end`.
-
#use_default_plugins ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#use_libraries ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#use_lockfile ⇒ BOOLEAN
readonly
defaults to ‘!!lockfile`.
-
#use_lockfile_versions ⇒ BOOLEAN
readonly
defaults to ‘use_lockfile`.
-
#use_modular_headers ⇒ BOOLEAN
readonly
defaults to ‘false`.
-
#use_podfile ⇒ BOOLEAN
readonly
defaults to ‘!!podfile`.
-
#use_podfile_plugins ⇒ BOOLEAN
readonly
defaults to ‘use_podfile`.
-
#warn_for_multiple_pod_sources ⇒ BOOLEAN
readonly
defaults to ‘false`.
Class Method Summary collapse
-
.from_env(env = ENV) ⇒ Hash<Symbol,Object>
The configuration hash parsed from the env.
-
.from_file(path) ⇒ Hash<Symbol,Object>
The configuration hash parsed from the given file.
-
.podspecs_from_paths(paths) ⇒ Array<Specification>
The podspecs found at the given paths.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Whether this configuration is equivalent to other.
-
#gen_dir_for_pod(name) ⇒ Pathname
The directory for installation of the generated workspace.
-
#project_name_for_spec(spec) ⇒ String
The project name to use for generating this workspace.
-
#to_h ⇒ Hash<Symbol,Object>
A hash where the keys are option names and values are the non-nil set values.
-
#to_s ⇒ String
A string describing the configuration, suitable for UI presentation.
-
#use_frameworks? ⇒ Boolean
Whether gen should install with dynamic frameworks.
-
#validate ⇒ Array<String>
Errors in the configuration.
-
#with_changes(changes) ⇒ Configuration
A new configuration object with the given changes applies.
Class Attribute Details
.options ⇒ Array<Option> (readonly)
Returns all of the options available in the configuration.
11 12 13 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 11 def @options end |
Instance Attribute Details
#app_host_source_dir ⇒ [String, Pathname] (readonly)
defaults to ‘nil`
159 160 161 162 163 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 159 option :app_host_source_dir, [String, Pathname], 'nil', 'A directory containing sources to use for the app host', 'DIR', ->(dir) { 'not a directory' unless dir.directory? }, coerce_to_pathname |
#auto_open ⇒ BOOLEAN (readonly)
defaults to ‘false`
156 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 156 option :auto_open, BOOLEAN, 'false', 'Whether to automatically open the generated workspaces', nil, nil, coerce_to_bool |
#clean ⇒ BOOLEAN (readonly)
defaults to ‘false`
157 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 157 option :clean, BOOLEAN, 'false', 'Whether to clean the generated directories before generating', nil, nil, coerce_to_bool |
#deterministic_uuids ⇒ BOOLEAN (readonly)
defaults to ‘false`
202 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 202 option :deterministic_uuids, BOOLEAN, 'false', 'Whether installation should use deterministic UUIDs for pods projects', nil, nil, coerce_to_bool |
#gen_directory ⇒ [String, Pathname] (readonly)
defaults to ‘Pathname(“gen”).expand_path`
155 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 155 option :gen_directory, [String, Pathname], 'Pathname("gen").expand_path', 'Path to generate workspaces in', 'PATH', ->(path) { 'path is file' if path.file? }, coerce_to_pathname |
#generate_multiple_pod_projects ⇒ BOOLEAN (readonly)
defaults to ‘false`
152 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 152 option :generate_multiple_pod_projects, BOOLEAN, 'false', 'Whether to generate multiple Xcode projects', nil, nil, coerce_to_bool |
#incremental_installation ⇒ BOOLEAN (readonly)
defaults to ‘false`
153 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 153 option :incremental_installation, BOOLEAN, 'false', 'Whether to use incremental installation', nil, nil, coerce_to_bool |
#local_sources ⇒ new (readonly)
defaults to ‘[]`
185 186 187 188 189 190 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 185 option :local_sources, ArrayOf.new(String), [], 'Paths from which to find local podspecs for transitive dependencies. Multiple local-sources must be comma-delimited.', 'SOURCE1,SOURCE2', ->(_) { nil }, ->(local_sources) { Array(local_sources).flat_map { |s| s.split(',') } } |
#lockfile ⇒ [Pod::Lockfile] (readonly)
defaults to ‘pod_config.lockfile`
146 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 146 option :lockfile, [Pod::Lockfile], 'pod_config.lockfile', nil |
#platforms ⇒ new (readonly)
defaults to ‘nil`
191 192 193 194 195 196 197 198 199 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 191 option :platforms, ArrayOf.new(String), nil, 'Limit to specific platforms. Default is all platforms supported by the podspec. Multiple platforms must be comma-delimited.', 'ios,macos', lambda { |platforms| valid_platforms = Platform.all.map { |p| p.string_name.downcase } valid_platforms unless (platforms - valid_platforms).empty? }, # validates platforms is a subset of Platform.all ->(platforms) { Array(platforms).flat_map { |s| s.split(',') } } |
#pod_config ⇒ Config (readonly)
defaults to ‘Pod::Config.instance`
133 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 133 option :pod_config, Config, 'Pod::Config.instance', nil |
#podfile ⇒ [Podfile] (readonly)
defaults to ‘Podfile.from_file(podfile_path) if (podfile_path && File.file?(File.expand_path(podfile_path)))`
136 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 136 option :podfile, [Podfile], 'Podfile.from_file(podfile_path) if (podfile_path && File.file?(File.expand_path(podfile_path)))' |
#podfile_path ⇒ [String, Pathname] (readonly)
defaults to ‘pod_config.podfile_path`
135 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 135 option :podfile_path, [String, Pathname], 'pod_config.podfile_path', 'Path to podfile to use', 'PATH', ->(path) { 'file does not exist' unless path.file? }, coerce_to_pathname |
#podfile_plugins ⇒ new (readonly)
defaults to ‘(use_podfile && podfile) ? podfile.plugins : {}`
139 140 141 142 143 144 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 139 option :podfile_plugins, HashOf.new(keys: [String], values: [NilClass, HashOf.new(keys: [String], values: [TrueClass, FalseClass, NilClass, String, Hash, Array])]), '(use_podfile && podfile) ? podfile.plugins : {}', nil, nil, nil, ->(hash) { Hash[hash] } |
#podspec_paths ⇒ new (readonly)
defaults to ‘[Pathname(?.)]`
165 166 167 168 169 170 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 165 option :podspec_paths, ArrayOf.new(String, Pathname, URI), '[Pathname(?.)]', nil, nil, ->(paths) { ('paths do not exist' unless paths.all? { |p| p.is_a?(URI) || p.exist? }) }, ->(paths) { paths && paths.map { |path| path.to_s =~ %r{https?://} ? URI(path) : Pathname(path). } } |
#podspecs ⇒ new (readonly)
defaults to ‘self.class.podspecs_from_paths(podspec_paths)`
171 172 173 174 175 176 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 171 option :podspecs, ArrayOf.new(Pod::Specification), 'self.class.podspecs_from_paths(podspec_paths)', nil, nil, ->(specs) { 'no podspecs found' if specs.empty? }, ->(paths) { paths && paths.map { |path| Pathname(path). } } |
#repo_update ⇒ BOOLEAN (readonly)
defaults to ‘false`
200 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 200 option :repo_update, BOOLEAN, 'false', 'Force running `pod repo update` before install', nil, nil, coerce_to_bool |
#share_schemes_for_development_pods ⇒ BOOLEAN (readonly)
defaults to ‘true`
203 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 203 option :share_schemes_for_development_pods, BOOLEAN, 'true', 'Whether installation should share schemes for development pods', nil, nil, coerce_to_bool |
#sources ⇒ new (readonly)
defaults to ‘if use_podfile && podfile then ::Pod::Installer::Analyzer.new(:sandbox, podfile).sources.map(&:url) else pod_config.sources_manager.all.map(&:url) end`
179 180 181 182 183 184 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 179 option :sources, ArrayOf.new(String), 'if use_podfile && podfile then ::Pod::Installer::Analyzer.new(:sandbox, podfile).sources.map(&:url) else pod_config.sources_manager.all.map(&:url) end', 'The sources from which to pull dependent pods (defaults to all repos in the podfile if using the podfile, else all available repos). Can be a repo name or URL. Multiple sources must be comma-delimited.', 'SOURCE1,SOURCE2', ->(_) { nil }, ->(sources) { Array(sources).flat_map { |s| s.split(',') } } |
#use_default_plugins ⇒ BOOLEAN (readonly)
defaults to ‘false`
201 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 201 option :use_default_plugins, BOOLEAN, 'false', 'Whether installation should activate default plugins', nil, nil, coerce_to_bool |
#use_libraries ⇒ BOOLEAN (readonly)
defaults to ‘false`
150 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 150 option :use_libraries, BOOLEAN, 'false', 'Whether to use libraries instead of frameworks', nil, nil, coerce_to_bool |
#use_lockfile ⇒ BOOLEAN (readonly)
defaults to ‘!!lockfile`
147 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 147 option :use_lockfile, BOOLEAN, '!!lockfile', 'Whether the lockfile should be used to discover transitive dependencies', nil, nil, coerce_to_bool |
#use_lockfile_versions ⇒ BOOLEAN (readonly)
defaults to ‘use_lockfile`
148 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 148 option :use_lockfile_versions, BOOLEAN, 'use_lockfile', 'Whether versions from the lockfile should be used', nil, nil, coerce_to_bool |
#use_modular_headers ⇒ BOOLEAN (readonly)
defaults to ‘false`
205 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 205 option :use_modular_headers, BOOLEAN, 'false', 'Whether the target should be generated as a clang module, treating dependencies as modules, as if `use_modular_headers!` were specified. Will error if both this option and a podfile are specified', nil, nil, coerce_to_bool |
#use_podfile ⇒ BOOLEAN (readonly)
defaults to ‘!!podfile`
137 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 137 option :use_podfile, BOOLEAN, '!!podfile', 'Whether restrictions should be copied from the podfile', nil, nil, coerce_to_bool |
#use_podfile_plugins ⇒ BOOLEAN (readonly)
defaults to ‘use_podfile`
138 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 138 option :use_podfile_plugins, BOOLEAN, 'use_podfile', 'Whether plugins should be copied from the podfile', nil, nil, coerce_to_bool |
#warn_for_multiple_pod_sources ⇒ BOOLEAN (readonly)
defaults to ‘false`
204 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 204 option :warn_for_multiple_pod_sources, BOOLEAN, 'false', 'Whether installation should warn when a pod is found in multiple sources', nil, nil, coerce_to_bool |
Class Method Details
.from_env(env = ENV) ⇒ Hash<Symbol,Object>
Returns the configuration hash parsed from the env.
252 253 254 255 256 257 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 252 def self.from_env(env = ENV) .each_with_object({}) do |option, config| next unless (value = env["COCOAPODS_GENERATE_#{option.name.upcase}"]) config[option.name] = option.coerce(value) end end |
.from_file(path) ⇒ Hash<Symbol,Object>
Returns the configuration hash parsed from the given file.
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 228 def self.from_file(path) raise Informative, "No cocoapods-generate configuration found at #{UI.path path}" unless path.file? require 'yaml' yaml = YAML.load_file(path) unless yaml.is_a?(Hash) unless path.read.strip.empty? raise Informative, "Hash not found in configuration at #{UI.path path} -- got #{yaml.inspect}" end yaml = {} end yaml = yaml.with_indifferent_access Dir.chdir(path.dirname) do .each_with_object({}) do |option, config| next unless yaml.key?(option.name) config[option.name] = option.coerce yaml[option.name] end end end |
.podspecs_from_paths(paths) ⇒ Array<Specification>
Returns the podspecs found at the given paths. This method will download specs from URLs and traverse a directory’s children.
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 338 def self.podspecs_from_paths(paths) paths = [Pathname('.')] if paths.empty? paths.flat_map do |path| if path.is_a?(URI) require 'cocoapods/open-uri' begin contents = open(path.to_s).read rescue StandardError => e next e end begin Pod::Specification.from_string contents, path.to_s rescue StandardError $ERROR_INFO end elsif path.directory? glob = Pathname.glob(path + '*.podspec{.json,}') next StandardError.new "no specs found in #{UI.path path}" if glob.empty? glob.map { |f| Pod::Specification.from_file(f) }.sort_by(&:name) else Pod::Specification.from_file(path) end end end |
Instance Method Details
#==(other) ⇒ Boolean
Returns whether this configuration is equivalent to other.
289 290 291 292 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 289 def ==(other) self.class == other.class && to_h == other.to_h end |
#gen_dir_for_pod(name) ⇒ Pathname
Returns the directory for installation of the generated workspace.
309 310 311 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 309 def gen_dir_for_pod(name) gen_directory.join(name) end |
#project_name_for_spec(spec) ⇒ String
Returns The project name to use for generating this workspace.
324 325 326 327 328 329 330 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 324 def project_name_for_spec(spec) project_name = spec.name.dup # When using multiple Xcode project the project name will collide with the actual .xcodeproj meant for the pod # that we are generating the workspace for. project_name << 'Sample' if generate_multiple_pod_projects? project_name end |
#to_h ⇒ Hash<Symbol,Object>
Returns a hash where the keys are option names and values are the non-nil set values.
279 280 281 282 283 284 285 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 279 def to_h self.class..each_with_object({}) do |option, hash| value = send(option.name) next if value.nil? hash[option.name] = value end end |
#to_s ⇒ String
Returns a string describing the configuration, suitable for UI presentation.
296 297 298 299 300 301 302 303 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 296 def to_s hash = to_h hash.delete(:pod_config) hash.each_with_index.each_with_object('`pod gen` configuration {'.dup) do |((k, v), i), s| s << ',' unless i.zero? s << "\n" << ' ' << k.to_s << ': ' << v.to_s.gsub(/:0x\h+/, '') end << ' }' end |
#use_frameworks? ⇒ Boolean
Returns whether gen should install with dynamic frameworks.
315 316 317 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 315 def use_frameworks? !use_libraries? end |
#validate ⇒ Array<String>
Returns errors in the configuration.
261 262 263 264 265 266 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 261 def validate hash = to_h self.class..map do |option| option.validate(hash[option.name]) end.compact end |
#with_changes(changes) ⇒ Configuration
Returns a new configuration object with the given changes applies.
272 273 274 |
# File 'lib/cocoapods-modularization/generate/configuration.rb', line 272 def with_changes(changes) self.class.new(**to_h.merge(changes)) end |