packwerk-extensions 0.2.0 → 0.3.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/README.md +8 -8
- data/lib/packwerk/{folder_visibility → folder_privacy}/checker.rb +7 -7
- data/lib/packwerk/{folder_visibility → folder_privacy}/package.rb +3 -3
- data/lib/packwerk/{folder_visibility → folder_privacy}/validator.rb +4 -4
- data/lib/packwerk-extensions.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec06b679c031e028a1dca4bb93e0cac394f13a3af2e86a19892efcf5e26ce6fe
|
4
|
+
data.tar.gz: 98835c87573ac3b47f13a50c9de8e9af6370c7f88debf12a24578e0040d87324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e37b7e13b22e77dc428a3d3bd210a6dea8c5eddbac5baf9c0ce31ae207b6b5e9bcfdf0cb9c3a1c041524c20a4a3f0a0affb9d08e90f105d78b28746b67ae7d5
|
7
|
+
data.tar.gz: ff5c5b5d73118ac391a086c13edb8733f0b682e4c87e404e4aaa3a5fc7e7736b655a1ed15e18e059758e854fa895cedb67d81eb93889d7767ad16a778b300d82
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
Currently, it ships the following checkers to help improve the boundaries between packages. These checkers are:
|
6
6
|
- A `privacy` checker that ensures other packages are using your package's public API
|
7
7
|
- A `visibility` checker that allows packages to be private except to an explicit group of other packages.
|
8
|
-
- A `
|
8
|
+
- A `folder_privacy` checker that allows packages to their sibling packs and parent pack (to be used in an application that uses folder packs)
|
9
9
|
- A `layer` (formerly `architecture`) checker that allows packages to specify their "layer" and requires that each layer only communicate with layers below it.
|
10
10
|
|
11
11
|
## Installation
|
@@ -25,7 +25,7 @@ Alternatively, you can require individual checkers:
|
|
25
25
|
require:
|
26
26
|
- packwerk/privacy/checker
|
27
27
|
- packwerk/visibility/checker
|
28
|
-
- packwerk/
|
28
|
+
- packwerk/folder_privacy/checker
|
29
29
|
- packwerk/layer/checker
|
30
30
|
```
|
31
31
|
|
@@ -43,7 +43,7 @@ enforce_privacy: true
|
|
43
43
|
|
44
44
|
Setting `enforce_privacy` to `true` will make all references to private constants in your package a violation.
|
45
45
|
|
46
|
-
Setting `enforce_privacy` to `strict` will forbid all references to private constants in your package. **This includes violations that have been added to other packages' `package_todo.yml` files.**
|
46
|
+
Setting `enforce_privacy` to `strict` will forbid all references to private constants in your package. **This includes violations that have been added to other packages' `package_todo.yml` files.**
|
47
47
|
|
48
48
|
Note: You will need to remove all existing privacy violations before setting `enforce_privacy` to `strict`.
|
49
49
|
|
@@ -171,16 +171,16 @@ visible_to:
|
|
171
171
|
```
|
172
172
|
|
173
173
|
## Folder-Visibility Checker
|
174
|
-
The folder
|
174
|
+
The folder privacy checker can be used to allow a package to be private to their sibling packs and parent packs and will create todos if used by any other package.
|
175
175
|
|
176
|
-
To enforce
|
176
|
+
To enforce folder privacy for your package, set `enforce_folder_privacy` to `true` on your pack.
|
177
177
|
|
178
178
|
```yaml
|
179
179
|
# components/merchandising/package.yml
|
180
|
-
|
180
|
+
enforce_folder_privacy: true
|
181
181
|
```
|
182
182
|
|
183
|
-
Here is an example of paths and whether their use of `packs/b/packs/e` is OK or not, assuming that protects itself via `
|
183
|
+
Here is an example of paths and whether their use of `packs/b/packs/e` is OK or not, assuming that protects itself via `enforce_folder_privacy`
|
184
184
|
|
185
185
|
```
|
186
186
|
. OK (parent of parent)
|
@@ -226,7 +226,7 @@ The "Layer Checker" was formerly named "Architecture Checker". The associated ke
|
|
226
226
|
|
227
227
|
# replace 'architecture_layers' with 'layers' in packwerk.yml
|
228
228
|
sed -i '' 's/architecture_layers/layers/g' ./packwerk.yml
|
229
|
-
|
229
|
+
|
230
230
|
# replace 'enforce_architecture' with 'enforce_layers' in package.yml files
|
231
231
|
`rg -l 'enforce_architecture' -g 'package.yml' | xargs sed -i '' 's,enforce_architecture,enforce_layers,g'`
|
232
232
|
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'packwerk/
|
5
|
-
require 'packwerk/
|
4
|
+
require 'packwerk/folder_privacy/package'
|
5
|
+
require 'packwerk/folder_privacy/validator'
|
6
6
|
|
7
7
|
module Packwerk
|
8
|
-
module
|
8
|
+
module FolderPrivacy
|
9
9
|
class Checker
|
10
10
|
extend T::Sig
|
11
11
|
include Packwerk::Checker
|
12
12
|
|
13
|
-
VIOLATION_TYPE = T.let('
|
13
|
+
VIOLATION_TYPE = T.let('folder_privacy', String)
|
14
14
|
|
15
15
|
sig { override.returns(String) }
|
16
16
|
def violation_type
|
@@ -26,7 +26,7 @@ module Packwerk
|
|
26
26
|
referencing_package = reference.package
|
27
27
|
referenced_package = reference.constant.package
|
28
28
|
|
29
|
-
return false if enforcement_disabled?(Package.from(referenced_package).
|
29
|
+
return false if enforcement_disabled?(Package.from(referenced_package).enforce_folder_privacy)
|
30
30
|
|
31
31
|
# the root pack is parent folder of all packs, so we short-circuit this here
|
32
32
|
referencing_package_is_root_pack = referencing_package.name == '.'
|
@@ -48,7 +48,7 @@ module Packwerk
|
|
48
48
|
end
|
49
49
|
def strict_mode_violation?(listed_offense)
|
50
50
|
publishing_package = listed_offense.reference.constant.package
|
51
|
-
publishing_package.config['
|
51
|
+
publishing_package.config['enforce_folder_privacy'] == 'strict'
|
52
52
|
end
|
53
53
|
|
54
54
|
sig do
|
@@ -60,7 +60,7 @@ module Packwerk
|
|
60
60
|
source_desc = "'#{reference.package}'"
|
61
61
|
|
62
62
|
message = <<~MESSAGE
|
63
|
-
Folder
|
63
|
+
Folder Privacy violation: '#{reference.constant.name}' belongs to '#{reference.constant.package}', which is private to #{source_desc} as it is not a sibling pack or parent pack.
|
64
64
|
Is there a different package to use instead, or should '#{reference.constant.package}' also be visible to #{source_desc}?
|
65
65
|
|
66
66
|
#{standard_help_message(reference)}
|
@@ -2,11 +2,11 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Packwerk
|
5
|
-
module
|
5
|
+
module FolderPrivacy
|
6
6
|
class Package < T::Struct
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
const :
|
9
|
+
const :enforce_folder_privacy, T.nilable(T.any(T::Boolean, String))
|
10
10
|
|
11
11
|
class << self
|
12
12
|
extend T::Sig
|
@@ -14,7 +14,7 @@ module Packwerk
|
|
14
14
|
sig { params(package: ::Packwerk::Package).returns(Package) }
|
15
15
|
def from(package)
|
16
16
|
Package.new(
|
17
|
-
|
17
|
+
enforce_folder_privacy: package.config['enforce_folder_privacy']
|
18
18
|
)
|
19
19
|
end
|
20
20
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Packwerk
|
5
|
-
module
|
5
|
+
module FolderPrivacy
|
6
6
|
class Validator
|
7
7
|
extend T::Sig
|
8
8
|
include Packwerk::Validator
|
@@ -13,14 +13,14 @@ module Packwerk
|
|
13
13
|
def call(package_set, configuration)
|
14
14
|
results = T.let([], T::Array[Result])
|
15
15
|
|
16
|
-
package_manifests_settings_for(configuration, '
|
16
|
+
package_manifests_settings_for(configuration, 'enforce_folder_privacy').each do |config, setting|
|
17
17
|
next if setting.nil?
|
18
18
|
|
19
19
|
next if [TrueClass, FalseClass].include?(setting.class) || setting == 'strict'
|
20
20
|
|
21
21
|
results << Result.new(
|
22
22
|
ok: false,
|
23
|
-
error_value: "\tInvalid '
|
23
|
+
error_value: "\tInvalid 'enforce_folder_privacy' option: #{setting.inspect} in #{config.inspect}"
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
@@ -29,7 +29,7 @@ module Packwerk
|
|
29
29
|
|
30
30
|
sig { override.returns(T::Array[String]) }
|
31
31
|
def permitted_keys
|
32
|
-
%w[
|
32
|
+
%w[enforce_folder_privacy]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/lib/packwerk-extensions.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packwerk-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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: 2024-
|
11
|
+
date: 2024-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: packwerk
|
@@ -187,9 +187,9 @@ extra_rdoc_files: []
|
|
187
187
|
files:
|
188
188
|
- README.md
|
189
189
|
- lib/packwerk-extensions.rb
|
190
|
-
- lib/packwerk/
|
191
|
-
- lib/packwerk/
|
192
|
-
- lib/packwerk/
|
190
|
+
- lib/packwerk/folder_privacy/checker.rb
|
191
|
+
- lib/packwerk/folder_privacy/package.rb
|
192
|
+
- lib/packwerk/folder_privacy/validator.rb
|
193
193
|
- lib/packwerk/layer/checker.rb
|
194
194
|
- lib/packwerk/layer/config.rb
|
195
195
|
- lib/packwerk/layer/layers.rb
|
@@ -224,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
224
|
- !ruby/object:Gem::Version
|
225
225
|
version: '0'
|
226
226
|
requirements: []
|
227
|
-
rubygems_version: 3.5.
|
227
|
+
rubygems_version: 3.5.11
|
228
228
|
signing_key:
|
229
229
|
specification_version: 4
|
230
230
|
summary: A collection of extensions for packwerk packages.
|