package_protections 0.64.0 → 0.67.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 +12 -0
- data/lib/package_protections/private/configuration.rb +38 -0
- data/lib/package_protections/private.rb +8 -0
- data/lib/package_protections.rb +10 -12
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0457664569f574f7252c13cd8236b6e267a114bd900a24da1aa4a89c4b5d13da'
|
4
|
+
data.tar.gz: 8495e9bc7343afa5c793ef7027c2e453dbe13424de49514e235dcd3f64327031
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04cfbf3ce493c4dbb3a9ddfbeb89d725a1fbcc7d5d209e1a51e45ecee6fb56320dacb9fb271d3ca58d1b5d176b209a6410630de041d7e4f749368f7820443ed4
|
7
|
+
data.tar.gz: 67412edbc0ac4a0c64460419c482a141963120c89bb46c297bb84575c83b9f38920bfa7cee9549a7f8c135275eca0927127fa89c5f1879480d283201e757b60f
|
data/README.md
CHANGED
@@ -128,6 +128,18 @@ PackageProtections.set_defaults!(packages)
|
|
128
128
|
PackageProtections.set_defaults!(packages.select{|p| p.package_name == 'packs/my_package'})
|
129
129
|
```
|
130
130
|
|
131
|
+
## Custom Protections
|
132
|
+
|
133
|
+
It's possible to create your own custom protections that go through this interface. To do this, you just need to implement a protection and configure `PackageProtections`.
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
PackageProtections.configure do |config|
|
137
|
+
config.protections += [MyCustomProtection]
|
138
|
+
end
|
139
|
+
```
|
140
|
+
|
141
|
+
In this example, `MyCustomProtection` needs to implement the `PackageProtections::ProtectionInterface` (for protections powered by `packwerk` that look at new and existing violations) OR `PackageProtections::RubocopProtectionInterface` (for protections powered by `rubocop` that look at the AST). It's recommended to take a look at the existing protections as examples. If you're having any trouble with this, please file an issue and we'll be glad to help.
|
142
|
+
|
131
143
|
## Incorporating into your CI Pipeline
|
132
144
|
Your CI pipeline can execute the public API ta and fail if there are any offenses.
|
133
145
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module PackageProtections
|
4
|
+
module Private
|
5
|
+
class Configuration
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig { params(protections: T::Array[ProtectionInterface]).void }
|
9
|
+
attr_writer :protections
|
10
|
+
|
11
|
+
sig { void }
|
12
|
+
def initialize
|
13
|
+
@protections = T.let(default_protections, T::Array[ProtectionInterface])
|
14
|
+
end
|
15
|
+
|
16
|
+
sig { returns(T::Array[ProtectionInterface]) }
|
17
|
+
def protections
|
18
|
+
@protections
|
19
|
+
end
|
20
|
+
|
21
|
+
sig { void }
|
22
|
+
def bust_cache!
|
23
|
+
@protections = default_protections
|
24
|
+
end
|
25
|
+
|
26
|
+
sig { returns(T::Array[ProtectionInterface]) }
|
27
|
+
def default_protections
|
28
|
+
[
|
29
|
+
Private::OutgoingDependencyProtection.new,
|
30
|
+
Private::IncomingPrivacyProtection.new,
|
31
|
+
Private::TypedApiProtection.new,
|
32
|
+
Private::MultipleNamespacesProtection.new,
|
33
|
+
Private::VisibilityProtection.new
|
34
|
+
]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -9,6 +9,7 @@ require 'package_protections/private/outgoing_dependency_protection'
|
|
9
9
|
require 'package_protections/private/metadata_modifiers'
|
10
10
|
require 'package_protections/private/multiple_namespaces_protection'
|
11
11
|
require 'package_protections/private/visibility_protection'
|
12
|
+
require 'package_protections/private/configuration'
|
12
13
|
|
13
14
|
module PackageProtections
|
14
15
|
#
|
@@ -18,6 +19,12 @@ module PackageProtections
|
|
18
19
|
module Private
|
19
20
|
extend T::Sig
|
20
21
|
|
22
|
+
sig { returns(Private::Configuration) }
|
23
|
+
def self.config
|
24
|
+
@config = T.let(@config, T.nilable(Configuration))
|
25
|
+
@config ||= Private::Configuration.new
|
26
|
+
end
|
27
|
+
|
21
28
|
sig do
|
22
29
|
params(
|
23
30
|
packages: T::Array[ParsePackwerk::Package],
|
@@ -138,6 +145,7 @@ module PackageProtections
|
|
138
145
|
def self.bust_cache!
|
139
146
|
@protected_packages_indexed_by_name = nil
|
140
147
|
@private_cop_config = nil
|
148
|
+
config.bust_cache!
|
141
149
|
end
|
142
150
|
|
143
151
|
sig { params(identifier: Identifier).returns(T::Hash[T.untyped, T.untyped]) }
|
data/lib/package_protections.rb
CHANGED
@@ -38,20 +38,18 @@ module PackageProtections
|
|
38
38
|
# Implementation of rubocop-based protections
|
39
39
|
require 'rubocop/cop/package_protections/namespaced_under_package_name'
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
class << self
|
42
|
+
extend T::Sig
|
43
|
+
|
44
|
+
sig { params(blk: T.proc.params(arg0: Private::Configuration).void).void }
|
45
|
+
def configure(&blk)
|
46
|
+
yield(Private.config)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
46
50
|
sig { returns(T::Array[ProtectionInterface]) }
|
47
51
|
def self.all
|
48
|
-
|
49
|
-
Private::OutgoingDependencyProtection.new,
|
50
|
-
Private::IncomingPrivacyProtection.new,
|
51
|
-
Private::TypedApiProtection.new,
|
52
|
-
Private::MultipleNamespacesProtection.new,
|
53
|
-
Private::VisibilityProtection.new
|
54
|
-
]
|
52
|
+
Private.config.protections
|
55
53
|
end
|
56
54
|
|
57
55
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: package_protections
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.67.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: 2022-
|
11
|
+
date: 2022-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -178,6 +178,7 @@ files:
|
|
178
178
|
- lib/package_protections/per_file_violation.rb
|
179
179
|
- lib/package_protections/private.rb
|
180
180
|
- lib/package_protections/private/colorized_string.rb
|
181
|
+
- lib/package_protections/private/configuration.rb
|
181
182
|
- lib/package_protections/private/incoming_privacy_protection.rb
|
182
183
|
- lib/package_protections/private/metadata_modifiers.rb
|
183
184
|
- lib/package_protections/private/multiple_namespaces_protection.rb
|