Sha256: d03c6c15e325756c0bbecd047c5e612901391113ac8a7ff30cd2492395d14147

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true
require "json"
require "pathname"
require "uri"
require "cocoapods-core"

module Licensed
  module Sources
    class Cocoapods < Source
      def enabled?
        return unless Licensed::Shell.tool_available?("pod")

        config.pwd.join("Podfile").exist? && config.pwd.join("Podfile.lock").exist?
      end

      def enumerate_dependencies
        pods.map do |pod|
          name = pod.name
          path = dependency_path(pod.root_name)
          version = lockfile.version(name).version

          Dependency.new(
            path: path,
            name: name,
            version: version,
            metadata: { "type" => Cocoapods.type }
          )
        end
      end

      private

      def pods
        return lockfile.dependencies if targets.nil?

        targets_to_validate = podfile.target_definition_list.filter { |t| targets.include?(t.label) }
        if targets_to_validate.any?
          targets_to_validate.map(&:dependencies).flatten
        else
          raise Licensed::Sources::Source::Error, "Unable to find any target in the Podfile matching the ones provided in the config."
        end
      end

      def targets
        @targets ||= config.dig("cocoapods", "targets")&.map { |t| "Pods-#{t}" }
      end

      def lockfile
        @lockfile ||= Pod::Lockfile.from_file(config.pwd.join("Podfile.lock"))
      end

      def podfile
        @podfile ||= Pod::Podfile.from_file(config.pwd.join("Podfile"))
      end

      def dependency_path(name)
        config.pwd.join("Pods/#{name}")
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
licensed-4.0.2 lib/licensed/sources/cocoapods.rb
licensed-4.0.1 lib/licensed/sources/cocoapods.rb
licensed-4.0.0 lib/licensed/sources/cocoapods.rb