Class: Pod::Generate::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods/generate/configuration.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.optionsArray<Option> (readonly)



11
12
13
# File 'lib/cocoapods/generate/configuration.rb', line 11

def options
  @options
end

Instance Attribute Details

#app_host_source_dir[String, Pathname] (readonly)

defaults to ‘nil`



159
160
161
162
163
# File 'lib/cocoapods/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_openBOOLEAN (readonly)

defaults to ‘false`



156
# File 'lib/cocoapods/generate/configuration.rb', line 156

option :auto_open, BOOLEAN, 'false', 'Whether to automatically open the generated workspaces', nil, nil, coerce_to_bool

#cleanBOOLEAN (readonly)

defaults to ‘false`



157
# File 'lib/cocoapods/generate/configuration.rb', line 157

option :clean, BOOLEAN, 'false', 'Whether to clean the generated directories before generating', nil, nil, coerce_to_bool

#deterministic_uuidsBOOLEAN (readonly)

defaults to ‘false`



193
# File 'lib/cocoapods/generate/configuration.rb', line 193

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/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_projectsBOOLEAN (readonly)

defaults to ‘false`



152
# File 'lib/cocoapods/generate/configuration.rb', line 152

option :generate_multiple_pod_projects, BOOLEAN, 'false', 'Whether to generate multiple Xcode projects', nil, nil, coerce_to_bool

#incremental_installationBOOLEAN (readonly)

defaults to ‘false`



153
# File 'lib/cocoapods/generate/configuration.rb', line 153

option :incremental_installation, BOOLEAN, 'false', 'Whether to use incremental installation', nil, nil, coerce_to_bool

#local_sourcesnew (readonly)

defaults to ‘[]`



185
186
187
188
189
190
# File 'lib/cocoapods/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/generate/configuration.rb', line 146

option :lockfile, [Pod::Lockfile], 'pod_config.lockfile', nil

#pod_configConfig (readonly)

defaults to ‘Pod::Config.instance`



133
# File 'lib/cocoapods/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/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/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_pluginsnew (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.plugins : {}`



139
140
141
142
143
144
# File 'lib/cocoapods/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_pathsnew (readonly)

defaults to ‘[Pathname(?.)]`



165
166
167
168
169
170
# File 'lib/cocoapods/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).expand_path } }

#podspecsnew (readonly)

defaults to ‘self.class.podspecs_from_paths(podspec_paths)`



171
172
173
174
175
176
# File 'lib/cocoapods/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).expand_path } }

#repo_updateBOOLEAN (readonly)

defaults to ‘false`



191
# File 'lib/cocoapods/generate/configuration.rb', line 191

option :repo_update, BOOLEAN, 'false', 'Force running `pod repo update` before install', nil, nil, coerce_to_bool

#share_schemes_for_development_podsBOOLEAN (readonly)

defaults to ‘true`



194
# File 'lib/cocoapods/generate/configuration.rb', line 194

option :share_schemes_for_development_pods, BOOLEAN, 'true', 'Whether installation should share schemes for development pods', nil, nil, coerce_to_bool

#sourcesnew (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/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_pluginsBOOLEAN (readonly)

defaults to ‘false`



192
# File 'lib/cocoapods/generate/configuration.rb', line 192

option :use_default_plugins, BOOLEAN, 'false', 'Whether installation should activate default plugins', nil, nil, coerce_to_bool

#use_librariesBOOLEAN (readonly)

defaults to ‘false`



150
# File 'lib/cocoapods/generate/configuration.rb', line 150

option :use_libraries, BOOLEAN, 'false', 'Whether to use libraries instead of frameworks', nil, nil, coerce_to_bool

#use_lockfileBOOLEAN (readonly)

defaults to ‘!!lockfile`



147
# File 'lib/cocoapods/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_versionsBOOLEAN (readonly)

defaults to ‘use_lockfile`



148
# File 'lib/cocoapods/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_headersBOOLEAN (readonly)

defaults to ‘false`



196
# File 'lib/cocoapods/generate/configuration.rb', line 196

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_podfileBOOLEAN (readonly)

defaults to ‘!!podfile`



137
# File 'lib/cocoapods/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_pluginsBOOLEAN (readonly)

defaults to ‘use_podfile`



138
# File 'lib/cocoapods/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_sourcesBOOLEAN (readonly)

defaults to ‘false`



195
# File 'lib/cocoapods/generate/configuration.rb', line 195

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>



243
244
245
246
247
248
# File 'lib/cocoapods/generate/configuration.rb', line 243

def self.from_env(env = ENV)
  options.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.

Raises:

  • (Informative)


219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/cocoapods/generate/configuration.rb', line 219

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
    options.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>



316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
# File 'lib/cocoapods/generate/configuration.rb', line 316

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) }
    else
      Pod::Specification.from_file(path)
    end
  end
end

Instance Method Details

#==(other) ⇒ Boolean



280
281
282
283
# File 'lib/cocoapods/generate/configuration.rb', line 280

def ==(other)
  self.class == other.class &&
    to_h == other.to_h
end

#gen_dir_for_pod(name) ⇒ Pathname



300
301
302
# File 'lib/cocoapods/generate/configuration.rb', line 300

def gen_dir_for_pod(name)
  gen_directory.join(name)
end

#to_hHash<Symbol,Object>



270
271
272
273
274
275
276
# File 'lib/cocoapods/generate/configuration.rb', line 270

def to_h
  self.class.options.each_with_object({}) do |option, hash|
    value = send(option.name)
    next if value.nil?
    hash[option.name] = value
  end
end

#to_sString



287
288
289
290
291
292
293
294
# File 'lib/cocoapods/generate/configuration.rb', line 287

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



306
307
308
# File 'lib/cocoapods/generate/configuration.rb', line 306

def use_frameworks?
  !use_libraries?
end

#validateArray<String>



252
253
254
255
256
257
# File 'lib/cocoapods/generate/configuration.rb', line 252

def validate
  hash = to_h
  self.class.options.map do |option|
    option.validate(hash[option.name])
  end.compact
end

#with_changes(changes) ⇒ Configuration



263
264
265
# File 'lib/cocoapods/generate/configuration.rb', line 263

def with_changes(changes)
  self.class.new(**to_h.merge(changes))
end