parse_packwerk 0.19.2 → 0.20.0
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.
- checksums.yaml +4 -4
- data/lib/parse_packwerk/configuration.rb +3 -1
- data/lib/parse_packwerk/package.rb +8 -6
- data/lib/parse_packwerk/package_todo.rb +6 -2
- data/lib/parse_packwerk.rb +21 -11
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54e72896efeae11785e34d5c4445255a7418499095d6f8f10443047437e49ad4
|
4
|
+
data.tar.gz: e722da109f4ef007f2b017d2fdbc4aba4cc6b09d94d8efb031cb7f4f7a1dae40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 993a09365ac56439efba8c66c0892275a184969be156e9b33cd7e8d218ab00222f55f7488d888348bb73805b91b7b3a223d46e58236695c567628a175fbe4508
|
7
|
+
data.tar.gz: 7d7b919458f16a8c53038405a3e777552a92e1660a23312a288d4b0653ba59648314fd861be63b4c27f89b50975cb4bf24756538e40cadfbe803e5160c72f5d2
|
@@ -7,6 +7,7 @@ module ParsePackwerk
|
|
7
7
|
const :exclude, T::Array[String]
|
8
8
|
const :package_paths, T::Array[String]
|
9
9
|
const :requires, T::Array[String]
|
10
|
+
const :raw, T::Hash[String, T.untyped]
|
10
11
|
|
11
12
|
sig { returns(Configuration) }
|
12
13
|
def self.fetch
|
@@ -22,7 +23,8 @@ module ParsePackwerk
|
|
22
23
|
Configuration.new(
|
23
24
|
exclude: excludes(raw_packwerk_config),
|
24
25
|
package_paths: package_paths(raw_packwerk_config),
|
25
|
-
requires: raw_packwerk_config['require'] || []
|
26
|
+
requires: raw_packwerk_config['require'] || [],
|
27
|
+
raw: raw_packwerk_config
|
26
28
|
)
|
27
29
|
end
|
28
30
|
|
@@ -11,6 +11,7 @@ module ParsePackwerk
|
|
11
11
|
const :metadata, MetadataYmlType
|
12
12
|
const :dependencies, T::Array[String]
|
13
13
|
const :config, T::Hash[T.untyped, T.untyped]
|
14
|
+
const :violations, T.nilable(T::Array[Violation])
|
14
15
|
|
15
16
|
sig { params(pathname: Pathname).returns(Package) }
|
16
17
|
def self.from(pathname)
|
@@ -29,9 +30,15 @@ module ParsePackwerk
|
|
29
30
|
metadata: package_loaded_yml[METADATA] || {},
|
30
31
|
dependencies: package_loaded_yml[DEPENDENCIES] || [],
|
31
32
|
config: package_loaded_yml,
|
33
|
+
violations: PackageTodo.from(PackageTodo.yml(directory(package_name))).violations
|
32
34
|
)
|
33
35
|
end
|
34
36
|
|
37
|
+
sig { params(package_name: String).returns(::Pathname) }
|
38
|
+
def self.directory(package_name)
|
39
|
+
Pathname.new(package_name).cleanpath
|
40
|
+
end
|
41
|
+
|
35
42
|
sig { returns(Pathname) }
|
36
43
|
def yml
|
37
44
|
Pathname.new(name).join(PACKAGE_YML_NAME).cleanpath
|
@@ -39,7 +46,7 @@ module ParsePackwerk
|
|
39
46
|
|
40
47
|
sig { returns(Pathname) }
|
41
48
|
def directory
|
42
|
-
|
49
|
+
self.class.directory(self.name)
|
43
50
|
end
|
44
51
|
|
45
52
|
sig { returns(Pathname) }
|
@@ -56,10 +63,5 @@ module ParsePackwerk
|
|
56
63
|
def enforces_privacy?
|
57
64
|
enforce_privacy
|
58
65
|
end
|
59
|
-
|
60
|
-
sig { returns(T::Array[Violation]) }
|
61
|
-
def violations
|
62
|
-
PackageTodo.for(self).violations
|
63
|
-
end
|
64
66
|
end
|
65
67
|
end
|
@@ -9,8 +9,7 @@ module ParsePackwerk
|
|
9
9
|
|
10
10
|
sig { params(package: Package).returns(PackageTodo) }
|
11
11
|
def self.for(package)
|
12
|
-
|
13
|
-
PackageTodo.from(package_todo_yml_pathname)
|
12
|
+
PackageTodo.from(self.yml(package.directory))
|
14
13
|
end
|
15
14
|
|
16
15
|
sig { params(pathname: Pathname).returns(PackageTodo) }
|
@@ -42,5 +41,10 @@ module ParsePackwerk
|
|
42
41
|
)
|
43
42
|
end
|
44
43
|
end
|
44
|
+
|
45
|
+
sig { params(dirname: Pathname).returns(Pathname) }
|
46
|
+
def self.yml(dirname)
|
47
|
+
dirname.join(PACKAGE_TODO_YML_NAME).cleanpath
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
data/lib/parse_packwerk.rb
CHANGED
@@ -72,17 +72,6 @@ module ParsePackwerk
|
|
72
72
|
merged_config.merge!('enforce_privacy' => package.enforce_privacy)
|
73
73
|
end
|
74
74
|
|
75
|
-
# We want checkers of the form `enforce_xyz` to be at the top
|
76
|
-
merged_config_arr = merged_config.sort_by do |k, v|
|
77
|
-
if k.include?('enforce')
|
78
|
-
0
|
79
|
-
else
|
80
|
-
1
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
merged_config = merged_config_arr.to_h
|
85
|
-
|
86
75
|
unless package.public_path == DEFAULT_PUBLIC_PATH
|
87
76
|
merged_config.merge!('public_path' => package.public_path)
|
88
77
|
end
|
@@ -96,6 +85,10 @@ module ParsePackwerk
|
|
96
85
|
if package.metadata.any?
|
97
86
|
merged_config.merge!('metadata' => package.metadata)
|
98
87
|
end
|
88
|
+
|
89
|
+
sorted_keys = key_sort_order
|
90
|
+
merged_config = merged_config.to_a.sort_by{|key, value| T.unsafe(sorted_keys).index(key) || 1000 }.to_h
|
91
|
+
|
99
92
|
raw_yaml = YAML.dump(merged_config)
|
100
93
|
# Add indentation for dependencies
|
101
94
|
raw_yaml.gsub!(/^- /," - ")
|
@@ -104,6 +97,23 @@ module ParsePackwerk
|
|
104
97
|
end
|
105
98
|
end
|
106
99
|
|
100
|
+
sig { returns(T::Array[String]) }
|
101
|
+
def self.key_sort_order
|
102
|
+
%w(
|
103
|
+
enforce_dependencies
|
104
|
+
enforce_privacy
|
105
|
+
enforce_visibility
|
106
|
+
enforce_architecture
|
107
|
+
public_path
|
108
|
+
owner
|
109
|
+
layer
|
110
|
+
dependencies
|
111
|
+
ignored_dependencies
|
112
|
+
visible_to
|
113
|
+
metadata
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
107
117
|
# We memoize packages_by_name for fast lookup.
|
108
118
|
# Since Graph is an immutable value object, we can create indexes and general caching mechanisms safely.
|
109
119
|
sig { returns(T::Hash[String, Package]) }
|
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.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gusto Engineers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sorbet-runtime
|
@@ -30,14 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.2
|
33
|
+
version: '2.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.2
|
40
|
+
version: '2.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|