packs 0.0.33 → 0.0.35

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12a077a66bdee9de08cb6bad39307967105ab50754ed11b134634d7b9bbb884b
4
- data.tar.gz: c10559613f73c50a0654d99a4013dbf1621616839f9afb70ccffb497c5b22e77
3
+ metadata.gz: 29b2c810b50fb84aee08f79e49a7d6710b7bf74f8421efd2ce36a12c61bb5cb5
4
+ data.tar.gz: a183ed44f957f94de6736e0272193e873da6ca7d177a6cbad491682fc73596a8
5
5
  SHA512:
6
- metadata.gz: e9a3bf9214c632560b6ec21d008e4be56ee27f945e211e3713d18ef0c5988f5a005641ebe7ce2688f38f07607c859032767a5cc407b8ec46fc9f84184277e95d
7
- data.tar.gz: befe69448bef9fb04edd3e567178941baab9c1a89b2969eb7114678b2f350e28377a7e9e5bb68d777f674a7119cbc10ec717991d5c70b787fabfb2a63ec08e2b
6
+ metadata.gz: 5587b5c11a6ffcc20213ddf8c7fc5fd1efe2d82f6d461e70d38c82fa55151956225388f45313cd2a6cda88bc839a6350ee821a3afdb942929f130ef2b5c5165a
7
+ data.tar.gz: 3c789067155a3ff7a76eade07734f3acf884fecacea1472a1755afcba7f833bef370dd4f359b2761eeceb907615c2cbbf728bdfc0aa61056b17e9f2cb39593e0
data/README.md CHANGED
@@ -30,7 +30,19 @@ Here are some example integrations with `packs`:
30
30
  A ruby [`gem`](https://guides.rubygems.org/what-is-a-gem/) is the Ruby community solution for packaging and distributing Ruby code. A gem is a great place to start new projects, and a great end state for code that's been extracted from an existing codebase. `packs` are intended to help gradually modularize an application that has some conceptual boundaries, but is not yet ready to be factored into gems.
31
31
 
32
32
  ## Usage
33
- Make sure to run `bundle binstub packs` to generate `bin/packs` within your application.
33
+ 1. Add the gem to your Gemfile and do a `bundle install`
34
+ ```
35
+ gem 'packs-rails'
36
+ gem 'packs'
37
+ ```
38
+
39
+ 2. Initialize packwerk
40
+ ```
41
+ bundle binstub packwerk
42
+ bin/packwerk init
43
+ ```
44
+
45
+ 3. Make sure to run `bundle binstub packs` to generate `bin/packs` within your application.
34
46
 
35
47
  ## CLI Documentation
36
48
  ## Describe available commands or one specific command
@@ -40,7 +40,7 @@ module Packs
40
40
  end
41
41
  end
42
42
 
43
- sig { params(file_move_operations: T::Array[Private::FileMoveOperation]).void }
43
+ sig { override.params(file_move_operations: T::Array[Private::FileMoveOperation]).void }
44
44
  def after_move_files!(file_move_operations)
45
45
  if @teams.any?
46
46
  Logging.section('Code Ownership') do
@@ -10,7 +10,7 @@ module Packs
10
10
  sig { abstract.params(file_move_operation: Private::FileMoveOperation).void }
11
11
  def before_move_file!(file_move_operation); end
12
12
 
13
- sig { params(file_move_operations: T::Array[Private::FileMoveOperation]).void }
13
+ sig { overridable.params(file_move_operations: T::Array[Private::FileMoveOperation]).void }
14
14
  def after_move_files!(file_move_operations)
15
15
  nil
16
16
  end
data/lib/packs/private.rb CHANGED
@@ -173,6 +173,7 @@ module Packs
173
173
  enforce_privacy: package.enforce_privacy,
174
174
  enforce_dependencies: package.enforce_dependencies,
175
175
  dependencies: package.dependencies,
176
+ violations: package.violations,
176
177
  metadata: package.metadata,
177
178
  config: package.config
178
179
  )
@@ -195,9 +196,6 @@ module Packs
195
196
 
196
197
  ParsePackwerk.all.each do |other_package|
197
198
  new_dependencies = other_package.dependencies.map { |d| d == pack_name ? new_package_name : d }
198
- if other_package.name == parent_name && !new_dependencies.include?(new_package_name)
199
- new_dependencies += [new_package_name]
200
- end
201
199
 
202
200
  new_config = other_package.config.dup
203
201
  if new_config['ignored_dependencies']
@@ -206,11 +204,18 @@ module Packs
206
204
  end
207
205
  end
208
206
 
207
+ if other_package.name == parent_name &&
208
+ !new_dependencies.include?(new_package_name) &&
209
+ !new_config['ignored_dependencies']&.include?(new_package_name)
210
+ new_dependencies += [new_package_name]
211
+ end
212
+
209
213
  new_other_package = ParsePackwerk::Package.new(
210
214
  name: other_package.name,
211
215
  enforce_privacy: other_package.enforce_privacy,
212
216
  enforce_dependencies: other_package.enforce_dependencies,
213
217
  dependencies: new_dependencies.uniq.sort,
218
+ violations: other_package.violations,
214
219
  metadata: other_package.metadata,
215
220
  config: new_config
216
221
  )
@@ -301,6 +306,7 @@ module Packs
301
306
  dependencies: (package.dependencies + [dependency_name]).uniq.sort,
302
307
  enforce_privacy: package.enforce_privacy,
303
308
  enforce_dependencies: package.enforce_dependencies,
309
+ violations: package.violations,
304
310
  metadata: package.metadata,
305
311
  config: package.config
306
312
  )
@@ -392,6 +398,7 @@ module Packs
392
398
  enforce_dependencies: should_enforce_dependencies || false,
393
399
  enforce_privacy: enforce_privacy,
394
400
  dependencies: [],
401
+ violations: [],
395
402
  metadata: {},
396
403
  name: pack_name,
397
404
  config: config
@@ -0,0 +1,50 @@
1
+ # typed: strict
2
+
3
+ module Packs
4
+ class UpdateReferencesPostProcessor
5
+ include PerFileProcessorInterface
6
+
7
+ extend T::Sig
8
+
9
+ sig { override.params(file_move_operation: Private::FileMoveOperation).void }
10
+ def before_move_file!(file_move_operation)
11
+ nil
12
+ end
13
+
14
+ sig { override.params(file_move_operations: T::Array[Private::FileMoveOperation]).void }
15
+ def after_move_files!(file_move_operations)
16
+ return if file_move_operations.empty?
17
+
18
+ origin_pack = T.must(file_move_operations.first).origin_pack.name
19
+ destination_pack = T.must(file_move_operations.first).destination_pack.name
20
+
21
+ if self.class.ripgrep_enabled?
22
+ matching_files = `rg -l --hidden '#{origin_pack}' .`
23
+ matching_files.split("\n").each do |file_name|
24
+ substitute_references!(file_name, origin_pack, destination_pack)
25
+ end
26
+ else
27
+ Logging.print('For faster UpdateReferences install ripgrep: https://github.com/BurntSushi/ripgrep/tree/master')
28
+ Dir.glob('./**/*', File::FNM_DOTMATCH) do |file_name|
29
+ next if File.directory?(file_name)
30
+
31
+ substitute_references!(file_name, origin_pack, destination_pack)
32
+ end
33
+ end
34
+ end
35
+
36
+ sig { returns(T::Boolean) }
37
+ def self.ripgrep_enabled?
38
+ !!system('which', 'rg', out: File::NULL, err: :out)
39
+ end
40
+
41
+ private
42
+
43
+ sig { params(file_name: String, origin_pack: String, destination_pack: String).void }
44
+ def substitute_references!(file_name, origin_pack, destination_pack)
45
+ text = File.read(file_name)
46
+ replace = text.gsub(origin_pack, destination_pack)
47
+ File.open(file_name, 'w') { |file| file.puts replace }
48
+ end
49
+ end
50
+ end
data/lib/packs.rb CHANGED
@@ -16,6 +16,7 @@ require 'code_ownership'
16
16
  require 'packs/private'
17
17
  require 'packs/per_file_processor_interface'
18
18
  require 'packs/rubocop_post_processor'
19
+ require 'packs/update_references_post_processor'
19
20
  require 'packs/code_ownership_post_processor'
20
21
  require 'packs/logging'
21
22
  require 'packs/configuration'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33
4
+ version: 0.0.35
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-13 00:00:00.000000000 Z
11
+ date: 2023-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_ownership
@@ -304,6 +304,7 @@ files:
304
304
  - lib/packs/private/pack_relationship_analyzer.rb
305
305
  - lib/packs/private/packwerk_wrapper/offenses_aggregator_formatter.rb
306
306
  - lib/packs/rubocop_post_processor.rb
307
+ - lib/packs/update_references_post_processor.rb
307
308
  - lib/packs/user_event_logger.rb
308
309
  homepage: https://github.com/rubyatscale/packs
309
310
  licenses: