packs 0.0.33 → 0.0.35

Sign up to get free protection for your applications and to get access to all the features.
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: