Sha256: 0d72cb8573ea37c04995bd86506d76369a2e6120f27873dc764077d22d086dfd

Contents?: true

Size: 1.79 KB

Versions: 724

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

require "json"
require "dependabot/dependency_file"
require "dependabot/composer/file_fetcher"
require "dependabot/composer/file_parser"

module Dependabot
  module Composer
    class FileFetcher
      class PathDependencyBuilder
        def initialize(path:, directory:, lockfile:)
          @path = path
          @directory = directory
          @lockfile = lockfile
        end

        def dependency_file
          filename = File.join(path, "composer.json")

          # Current we just return `nil` if a path dependency can't be built.
          # In future we may wish to change that to a raise. (We'll get errors
          # in the UpdateChecker or FileUpdater if we fail to build files.)
          built_content = build_path_dep_content
          return unless built_content

          DependencyFile.new(
            name: Pathname.new(filename).cleanpath.to_path,
            content: built_content,
            directory: directory,
            support_file: true
          )
        end

        private

        attr_reader :path, :lockfile, :directory

        def details_from_lockfile
          keys = FileParser::DEPENDENCY_GROUP_KEYS.
                 map { |h| h.fetch(:lockfile) }

          keys.each do |key|
            next unless parsed_lockfile[key]

            parsed_lockfile[key].each do |details|
              return details if details.dig("dist", "url") == path
            end
          end

          nil
        end

        def build_path_dep_content
          return unless details_from_lockfile

          details_from_lockfile.to_json
        end

        def parsed_lockfile
          return {} unless lockfile

          @parsed_lockfile ||= JSON.parse(lockfile.content)
        rescue JSON::ParserError
          {}
        end
      end
    end
  end
end

Version data entries

724 entries across 724 versions & 1 rubygems

Version Path
dependabot-composer-0.230.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.229.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.228.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.227.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.226.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.225.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.224.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.223.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.222.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.221.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.220.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.219.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.218.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.217.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.216.2 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.216.1 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.216.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.215.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.214.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.213.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb