parse_packwerk 0.10.1 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/parse_packwerk.rb +23 -2
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f409f199bdc5359f8287eeb77ddc83b47ee35d98d7066af8d11dafa1dda0f23b
4
- data.tar.gz: 2a0978ce08554183ec20865f64bfc6480d7d9501ca015130589d4f20a75bcf72
3
+ metadata.gz: 9dfe612f5addcc85e01e22621a16ed559c60ab56aa6800326f468d19b8eb8d4d
4
+ data.tar.gz: f336b052471a7f559256a0dc2c400e488bf91801a6a64574269530114975b746
5
5
  SHA512:
6
- metadata.gz: 4c9338e22916f759cbe982087f52606eaec69ff4fcbd4bbc90bb8f1c2787e1cfa08fce8e678f70edd5ae2566e0afa1ba8aa65e3039706bfe7390ad8b1b2d3853
7
- data.tar.gz: 9fe7860d98c05d3049b902f2a3bd0c04c1b69568195e385c00ae756883b7b48d52da9decd6f5cd1c2b848daf1414de5a99e6461fdafc95265ec09c202eddb128
6
+ metadata.gz: 88a417cb2d2a1f753775a9846fc997504fb6954164e2beed23d48674555ba765a979441db1f0176bb6db62c53d63da04cff06bdb38b4d77023c4600345d3eeab
7
+ data.tar.gz: ee2a7f1c903f90311c8807e79f2a024c915ac8898b04c29f625bc1f53491f0d994bcfa642277e58e181a60591b6283dde83c6cd439d720893b511cb636cb6e98
@@ -26,7 +26,7 @@ module ParsePackwerk
26
26
  returns(T::Array[Package])
27
27
  end
28
28
  def self.all
29
- PackageSet.from(package_pathspec: yml.package_paths, exclude_pathspec: yml.exclude)
29
+ packages_by_name.values
30
30
  end
31
31
 
32
32
  sig { params(name: String).returns(T.nilable(Package)) }
@@ -39,6 +39,17 @@ module ParsePackwerk
39
39
  Configuration.fetch
40
40
  end
41
41
 
42
+ sig { params(file_path: T.any(Pathname, String)).returns(Package) }
43
+ def self.package_from_path(file_path)
44
+ path_string = file_path.to_s
45
+ @package_from_path = T.let(@package_from_path, T.nilable(T::Hash[String, Package]))
46
+ @package_from_path ||= {}
47
+ @package_from_path[path_string] ||= T.must(begin
48
+ matching_package = all.find { |package| path_string.start_with?("#{package.name}/") || path_string == package.name }
49
+ matching_package || find(ROOT_PACKAGE_NAME)
50
+ end)
51
+ end
52
+
42
53
  sig { params(package: ParsePackwerk::Package).void }
43
54
  def self.write_package_yml!(package)
44
55
  FileUtils.mkdir_p(package.directory)
@@ -82,9 +93,19 @@ module ParsePackwerk
82
93
  def self.packages_by_name
83
94
  @packages_by_name = T.let(@packages_by_name, T.nilable(T::Hash[String, Package]))
84
95
  @packages_by_name ||= begin
85
- all.map{|p| [p.name, p]}.to_h
96
+ all_packages = PackageSet.from(package_pathspec: yml.package_paths, exclude_pathspec: yml.exclude)
97
+ # We want to match more specific paths first
98
+ # Packwerk does this too and is necessary for package_from_path to work correctly.
99
+ sorted_packages = all_packages.sort_by { |package| -package.name.length }
100
+ sorted_packages.map{|p| [p.name, p]}.to_h
86
101
  end
87
102
  end
88
103
 
104
+ sig { void }
105
+ def self.bust_cache!
106
+ @packages_by_name = nil
107
+ @package_from_path = nil
108
+ end
109
+
89
110
  private_class_method :packages_by_name
90
111
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parse_packwerk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-14 00:00:00.000000000 Z
11
+ date: 2022-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime