Sha256: 7bebb33f31b7c5edff492efd55bbf88b1dd157e01c7d334a56361096e303497a
Contents?: true
Size: 1.6 KB
Versions: 2
Compression:
Stored size: 1.6 KB
Contents
# typed: strict module VisualizePackwerk class PackageGraph extend T::Sig include GraphInterface sig { returns(T::Set[PackageNode]) } attr_reader :package_nodes sig { override.returns(T::Set[NodeInterface]) } def nodes package_nodes end sig { params(package_nodes: T::Set[PackageNode]).void } def initialize(package_nodes:) @package_nodes = package_nodes @index_by_name = T.let({}, T::Hash[String, T.nilable(PackageNode)]) end sig { returns(PackageGraph) } def self.construct package_nodes = Set.new Packs.all.each do |p| owner = CodeOwnership.for_package(p) # Here we need to load the package violations and dependencies, # so we need to use ParsePackwerk to parse that information. package_info = ParsePackwerk.find(p.name) next unless package_info # This should not happen unless packs/parse_packwerk change implementation violations = package_info.violations violations_by_package = violations.group_by(&:to_package_name).transform_values(&:count) dependencies = package_info.dependencies package_nodes << PackageNode.new( name: p.name, team_name: owner&.name || 'Unknown', violations_by_package: violations_by_package, dependencies: Set.new(dependencies) ) end PackageGraph.new(package_nodes: package_nodes) end sig { params(name: String).returns(T.nilable(PackageNode)) } def package_by_name(name) @index_by_name[name] ||= package_nodes.find { |node| node.name == name } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
visualize_packwerk-0.2.3 | lib/visualize_packwerk/package_graph.rb |
visualize_packwerk-0.2.1 | lib/visualize_packwerk/package_graph.rb |