Method: Pod::Dependency#merge

Defined in:
lib/cocoapods-core/dependency.rb

#merge(other) ⇒ Dependency

Note:

If one of the dependencies specifies an external source or is head, the resulting dependency preserves this attributes.

Merges the version requirements of the dependency with another one.

Parameters:

  • the other dependency to merge with.

Returns:

  • a dependency (not necessarily a new instance) that also includes the version requirements of the given one.



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# File 'lib/cocoapods-core/dependency.rb', line 237

def merge(other)
  unless name == other.name
    raise ArgumentError, "#{self} and #{other} have different names"
  end

  default   = Requirement.default
  self_req  = requirement
  other_req = other.requirement

  req = if other_req == default
          self_req
        elsif self_req == default
          other_req
        else
          self_req.as_list.concat(other_req.as_list)
        end

  opts = {}

  if external_source || other.external_source
    opts.
      merge!(external_source || {}).
      merge!(other.external_source || {})

    req_to_set = req
    req = []
  end

  if podspec_repo && other.podspec_repo && podspec_repo != other.podspec_repo
    raise ArgumentError, "#{self} and #{other} have different podspec repos"
  end

  if repo = podspec_repo || other.podspec_repo
    opts[:source] = repo
  end

  self.class.new(name, *req, opts).tap do |dep|
    dep.instance_variable_set(:@requirement, Requirement.create(req_to_set)) if req_to_set
  end
end