packwerk-extensions 0.1.4 → 0.1.6
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 +5 -7
- data/lib/packwerk/privacy/checker.rb +2 -0
- data/lib/packwerk/privacy/package.rb +3 -1
- data/lib/packwerk/privacy/validator.rb +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11f152d73195983779e15ac10eb5af3f99b94b5a349a57b92c9cf91054192c84
|
4
|
+
data.tar.gz: 4c2f4e77c228b45faecc415235b1cb8228d3b8f6b50cdd561c1700605506d622
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9557efbe49651e123920eebdf84f4fd09da937fb822c73eb7848633fd8b17f64f0a53be5a24a75515f366c5f2d9621ff7e33bd483b70b060620b18a5563be1e2
|
7
|
+
data.tar.gz: dc9384c7c35d1424301212d95a5fce9becffb6e791784e3c53f4a010a30421a5acaf988fe332386c03457b86c5b09404a65d254d4a9790d75e2ad9bd57ca9cf8
|
data/README.md
CHANGED
@@ -2,11 +2,6 @@
|
|
2
2
|
|
3
3
|
`packwerk-extensions` is a home for checker extensions for [packwerk](https://github.com/Shopify/packwerk) 3.
|
4
4
|
|
5
|
-
Note that packwerk has not yet released packwerk 3. If you'd like to use `packwerk-extensions`, you'll need to point your `Gemfile` at the `packwerk` `main` branch:
|
6
|
-
```ruby
|
7
|
-
gem 'packwerk', github: 'Shopify/packwerk', branch: 'main'
|
8
|
-
```
|
9
|
-
|
10
5
|
Currently, it ships the following checkers to help improve the boundaries between packages. These checkers are:
|
11
6
|
- A `privacy` checker that ensures other packages are using your package's public API
|
12
7
|
- A `visibility` checker that allows packages to be private except to an explicit group of other packages.
|
@@ -14,10 +9,13 @@ Currently, it ships the following checkers to help improve the boundaries betwee
|
|
14
9
|
|
15
10
|
## Installation
|
16
11
|
|
12
|
+
Add `packwerk-extensions` to your `Gemfile`.
|
13
|
+
|
17
14
|
To register all checkers included in this gem, add the following to your `packwerk.yml`:
|
18
15
|
|
19
16
|
```yaml
|
20
|
-
require:
|
17
|
+
require:
|
18
|
+
- packwerk-extensions
|
21
19
|
```
|
22
20
|
|
23
21
|
Alternatively, you can require individual checkers:
|
@@ -60,7 +58,7 @@ public_path: my/custom/path/
|
|
60
58
|
Sometimes it is desirable to only enforce privacy on a subset of constants in a package. You can do so by defining a `private_constants` list in your package.yml. Note that `enforce_privacy` must be set to `true` or `'strict'` for this to work.
|
61
59
|
|
62
60
|
### Package Privacy violation
|
63
|
-
|
61
|
+
Packwerk thinks something is a privacy violation if you're referencing a constant, class, or module defined in the private implementation (i.e. not the public folder) of another package. We care about these because we want to make sure we only use parts of a package that have been exposed as public API.
|
64
62
|
|
65
63
|
#### Interpreting Privacy violation
|
66
64
|
|
@@ -32,6 +32,8 @@ module Packwerk
|
|
32
32
|
privacy_option = privacy_package.enforce_privacy
|
33
33
|
return false if enforcement_disabled?(privacy_option)
|
34
34
|
|
35
|
+
return false if privacy_package.ignored_private_constants.include?(reference.constant.name)
|
36
|
+
|
35
37
|
explicitly_private_constant?(reference.constant, explicitly_private_constants: privacy_package.private_constants)
|
36
38
|
end
|
37
39
|
|
@@ -10,6 +10,7 @@ module Packwerk
|
|
10
10
|
const :user_defined_public_path, T.nilable(String)
|
11
11
|
const :enforce_privacy, T.nilable(T.any(T::Boolean, String))
|
12
12
|
const :private_constants, T::Array[String]
|
13
|
+
const :ignored_private_constants, T::Array[String]
|
13
14
|
|
14
15
|
sig { params(path: String).returns(T::Boolean) }
|
15
16
|
def public_path?(path)
|
@@ -25,7 +26,8 @@ module Packwerk
|
|
25
26
|
public_path: public_path_for(package),
|
26
27
|
user_defined_public_path: user_defined_public_path(package),
|
27
28
|
enforce_privacy: package.config['enforce_privacy'],
|
28
|
-
private_constants: package.config['private_constants'] || []
|
29
|
+
private_constants: package.config['private_constants'] || [],
|
30
|
+
ignored_private_constants: package.config['ignored_private_constants'] || []
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
@@ -42,7 +42,8 @@ module Packwerk
|
|
42
42
|
results = T.let([], T::Array[Result])
|
43
43
|
resolver = ConstantResolver.new(
|
44
44
|
root_path: configuration.root_path,
|
45
|
-
load_paths: configuration.load_paths
|
45
|
+
load_paths: configuration.load_paths,
|
46
|
+
inflector: ActiveSupport::Inflector
|
46
47
|
)
|
47
48
|
|
48
49
|
private_constants_setting.each do |config_file_path, setting|
|
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.1.
|
4
|
+
version: 0.1.6
|
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-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: packwerk
|