packs 0.0.37 → 0.0.39

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: 61faca4f667524b1ad3ac80486441315601f3ceda6ff04c413a1412b943e7df4
4
- data.tar.gz: 347f3a70a95fb188497f7056f88925a5c9ecc409fc0b9561d35ce8fbe13ca191
3
+ metadata.gz: 01d0eabdf25328fdc677db1822e9fa63708f5fd300acac2a0a35642fdaf90406
4
+ data.tar.gz: 861dd9be5a4c13ffefaa3004631077023accd9ae13ec6f9cf616bd3247c24fcb
5
5
  SHA512:
6
- metadata.gz: 11de5f83297dce2506a151ceb9f6e18d2a7bdfdfb0086f3ac05b2136f2530b638817d5eea079342265102e2e652c6264f6b31df9fd58e9a1bc61a15f0d47eae9
7
- data.tar.gz: ab4bd4f5e89f880ada5f0d9bf7d4a25119a8e3b9ca1158be241cb3b9530b6470ddf6cf817d3c2930afd53b2c0ddd17821d0ee9b42a61547d0578402f581ce87e
6
+ metadata.gz: 71c3578facc93a54296f35722a872c810a87a9e368081a1d9041f8747ebe8cd34b8dc5a90b6207bf41c7be06222b7e8e748910d605805754704350c24f155726
7
+ data.tar.gz: 6c66f26b4825c4a57eb3aa08b1e6ce566241be72e83b7cad38faf9f24c6c50558977b6b8dfbc1be50c89bf02d870087da62fca8caafa3e5a39085f4abb569308
data/lib/packs/cli.rb CHANGED
@@ -7,12 +7,16 @@ module Packs
7
7
  extend T::Sig
8
8
 
9
9
  desc 'create packs/your_pack', 'Create pack with name packs/your_pack'
10
+ option :enforce_dependencies, type: :boolean, default: nil, aliases: :d, banner: 'Enforce dependencies'
10
11
  option :enforce_privacy, type: :boolean, default: true, aliases: :p, banner: 'Enforce privacy'
12
+ option :enforce_architecture, type: :boolean, default: true, aliases: :a, banner: 'Enforce architecture'
11
13
  sig { params(pack_name: String).void }
12
14
  def create(pack_name)
13
15
  Packs.create_pack!(
14
16
  pack_name: pack_name,
15
- enforce_privacy: options[:enforce_privacy]
17
+ enforce_dependencies: options[:enforce_dependencies],
18
+ enforce_privacy: options[:enforce_privacy],
19
+ enforce_architecture: options[:enforce_architecture]
16
20
  )
17
21
  exit_successfully
18
22
  end
@@ -1,7 +1,7 @@
1
1
  # typed: strict
2
2
 
3
- require 'packs/user_event_logger'
4
- require 'packs/default_user_event_logger'
3
+ require_relative 'user_event_logger'
4
+ require_relative 'default_user_event_logger'
5
5
 
6
6
  module Packs
7
7
  class Configuration
@@ -0,0 +1,28 @@
1
+ # typed: strict
2
+
3
+ module Packs
4
+ module Private
5
+ module InteractiveCli
6
+ class PackDirectorySelector
7
+ extend T::Sig
8
+
9
+ sig { params(prompt: TTY::Prompt, question_text: String).returns(String) }
10
+ def self.select(prompt, question_text: 'Select a directory')
11
+ directories = T.let([], T::Array[String])
12
+
13
+ Packs::Specification.config.pack_paths.each do |path|
14
+ directories += Dir.glob(path).select { |f| File.directory? f }
15
+ end
16
+
17
+ prompt.select(
18
+ question_text,
19
+ directories,
20
+ filter: true,
21
+ per_page: 10,
22
+ show_help: :always
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,70 @@
1
+ # typed: strict
2
+
3
+ module Packs
4
+ module Private
5
+ module InteractiveCli
6
+ module UseCases
7
+ class MovePack
8
+ extend T::Sig
9
+ extend T::Helpers
10
+ include Interface
11
+
12
+ sig { override.params(prompt: TTY::Prompt).void }
13
+ def perform!(prompt)
14
+ move_type = prompt.select(
15
+ 'What do you want to do?',
16
+ {
17
+ 'Move a child pack to be nested under a parent pack' => :move_to_parent,
18
+ 'Move a pack to a folder that is not a pack' =>
19
+ :move_to_folder
20
+ }
21
+ )
22
+
23
+ case move_type
24
+ when :move_to_parent
25
+ child_pack = PackSelector.single_pack_select(prompt, question_text: 'Please select the child pack that will be nested')
26
+ parent_pack = PackSelector.single_pack_select(prompt, question_text: 'Please select the pack that will be the parent')
27
+
28
+ Packs.move_to_parent!(
29
+ parent_name: parent_pack.name,
30
+ pack_name: child_pack.name,
31
+ per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new]
32
+ )
33
+ when :move_to_folder
34
+ pack = PackSelector.single_pack_select(prompt, question_text: 'Please select the pack that you want to move')
35
+ destination = PackDirectorySelector.select(prompt, question_text: "What directory do you want to move #{pack.name} to?")
36
+
37
+ if Packs.find(destination)
38
+ use_move_to_parent = prompt.select(
39
+ "The directory #{destination} contains a pack. Add #{pack.last_name} as a dependency?",
40
+ { 'Yes' => true, 'No' => false }
41
+ )
42
+
43
+ if use_move_to_parent
44
+ Packs.move_to_parent!(
45
+ parent_name: destination,
46
+ pack_name: pack.name,
47
+ per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new]
48
+ )
49
+
50
+ return
51
+ end
52
+ end
53
+
54
+ Packs.move_to_folder!(
55
+ pack_name: pack.name,
56
+ destination: destination,
57
+ per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new]
58
+ )
59
+ end
60
+ end
61
+
62
+ sig { override.returns(String) }
63
+ def user_facing_name
64
+ 'Move a pack'
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -3,22 +3,23 @@
3
3
  # https://github.com/piotrmurach/tty-prompt
4
4
  require 'tty-prompt'
5
5
 
6
- require 'packs/private/interactive_cli/team_selector'
7
- require 'packs/private/interactive_cli/pack_selector'
8
- require 'packs/private/interactive_cli/file_selector'
9
- require 'packs/private/interactive_cli/use_cases/interface'
10
- require 'packs/private/interactive_cli/use_cases/create'
11
- require 'packs/private/interactive_cli/use_cases/move'
12
- require 'packs/private/interactive_cli/use_cases/add_dependency'
13
- require 'packs/private/interactive_cli/use_cases/get_info'
14
- require 'packs/private/interactive_cli/use_cases/query'
15
- require 'packs/private/interactive_cli/use_cases/make_public'
16
- require 'packs/private/interactive_cli/use_cases/move_to_parent'
17
- require 'packs/private/interactive_cli/use_cases/rename'
18
- require 'packs/private/interactive_cli/use_cases/check'
19
- require 'packs/private/interactive_cli/use_cases/update'
20
- require 'packs/private/interactive_cli/use_cases/validate'
21
- require 'packs/private/interactive_cli/use_cases/lint_package_yml_files'
6
+ require_relative 'interactive_cli/team_selector'
7
+ require_relative 'interactive_cli/pack_selector'
8
+ require_relative 'interactive_cli/pack_directory_selector'
9
+ require_relative 'interactive_cli/file_selector'
10
+ require_relative 'interactive_cli/use_cases/interface'
11
+ require_relative 'interactive_cli/use_cases/create'
12
+ require_relative 'interactive_cli/use_cases/move'
13
+ require_relative 'interactive_cli/use_cases/move_pack'
14
+ require_relative 'interactive_cli/use_cases/add_dependency'
15
+ require_relative 'interactive_cli/use_cases/get_info'
16
+ require_relative 'interactive_cli/use_cases/query'
17
+ require_relative 'interactive_cli/use_cases/make_public'
18
+ require_relative 'interactive_cli/use_cases/rename'
19
+ require_relative 'interactive_cli/use_cases/check'
20
+ require_relative 'interactive_cli/use_cases/update'
21
+ require_relative 'interactive_cli/use_cases/validate'
22
+ require_relative 'interactive_cli/use_cases/lint_package_yml_files'
22
23
 
23
24
  module Packs
24
25
  module Private
data/lib/packs/private.rb CHANGED
@@ -6,9 +6,9 @@ require 'tmpdir'
6
6
  require 'rainbow'
7
7
  require 'sorbet-runtime'
8
8
 
9
- require 'packs/private/file_move_operation'
10
- require 'packs/private/pack_relationship_analyzer'
11
- require 'packs/private/interactive_cli'
9
+ require_relative 'private/file_move_operation'
10
+ require_relative 'private/pack_relationship_analyzer'
11
+ require_relative 'private/interactive_cli'
12
12
 
13
13
  require 'date'
14
14
 
@@ -47,12 +47,13 @@ module Packs
47
47
  sig do
48
48
  params(
49
49
  pack_name: String,
50
- enforce_privacy: T::Boolean,
51
50
  enforce_dependencies: T.nilable(T::Boolean),
51
+ enforce_privacy: T::Boolean,
52
+ enforce_architecture: T::Boolean,
52
53
  team: T.nilable(CodeTeams::Team)
53
54
  ).void
54
55
  end
55
- def self.create_pack!(pack_name:, enforce_privacy:, enforce_dependencies:, team:)
56
+ def self.create_pack!(pack_name:, enforce_dependencies:, enforce_privacy:, enforce_architecture:, team:)
56
57
  Logging.section('👋 Hi!') do
57
58
  intro = Packs.config.user_event_logger.before_create_pack(pack_name)
58
59
  Logging.print_bold_green(intro)
@@ -60,7 +61,13 @@ module Packs
60
61
 
61
62
  pack_name = Private.clean_pack_name(pack_name)
62
63
 
63
- package = create_pack_if_not_exists!(pack_name: pack_name, enforce_privacy: enforce_privacy, enforce_dependencies: enforce_dependencies, team: team)
64
+ package = create_pack_if_not_exists!(
65
+ pack_name: pack_name,
66
+ enforce_dependencies: enforce_dependencies,
67
+ enforce_privacy: enforce_privacy,
68
+ enforce_architecture: enforce_architecture,
69
+ team: team
70
+ )
64
71
  add_public_directory(package) if package.enforce_privacy
65
72
  add_readme_todo(package)
66
73
 
@@ -160,8 +167,9 @@ module Packs
160
167
 
161
168
  new_package = ParsePackwerk::Package.new(
162
169
  name: new_package_name,
163
- enforce_privacy: package.enforce_privacy,
164
170
  enforce_dependencies: package.enforce_dependencies,
171
+ enforce_privacy: package.enforce_privacy,
172
+ enforce_architecture: package.enforce_architecture,
165
173
  dependencies: package.dependencies,
166
174
  violations: package.violations,
167
175
  metadata: package.metadata,
@@ -196,8 +204,9 @@ module Packs
196
204
 
197
205
  new_other_package = ParsePackwerk::Package.new(
198
206
  name: other_package.name,
199
- enforce_privacy: other_package.enforce_privacy,
200
207
  enforce_dependencies: other_package.enforce_dependencies,
208
+ enforce_privacy: other_package.enforce_privacy,
209
+ enforce_architecture: other_package.enforce_architecture,
201
210
  dependencies: new_dependencies.uniq.sort,
202
211
  violations: other_package.violations,
203
212
  metadata: other_package.metadata,
@@ -238,7 +247,12 @@ module Packs
238
247
  parent_name = Private.clean_pack_name(parent_name)
239
248
  parent_package = ParsePackwerk.all.find { |p| p.name == parent_name }
240
249
  if parent_package.nil?
241
- parent_package = create_pack_if_not_exists!(pack_name: parent_name, enforce_privacy: true, enforce_dependencies: true)
250
+ parent_package = create_pack_if_not_exists!(
251
+ pack_name: parent_name,
252
+ enforce_dependencies: true,
253
+ enforce_privacy: true,
254
+ enforce_architecture: true
255
+ )
242
256
  end
243
257
 
244
258
  # First we create a new pack that has the exact same properties of the old one!
@@ -249,6 +263,7 @@ module Packs
249
263
  name: new_package_name,
250
264
  enforce_privacy: package.enforce_privacy,
251
265
  enforce_dependencies: package.enforce_dependencies,
266
+ enforce_architecture: package.enforce_architecture,
252
267
  dependencies: package.dependencies,
253
268
  violations: package.violations,
254
269
  metadata: package.metadata,
@@ -289,8 +304,9 @@ module Packs
289
304
 
290
305
  new_other_package = ParsePackwerk::Package.new(
291
306
  name: other_package.name,
292
- enforce_privacy: other_package.enforce_privacy,
293
307
  enforce_dependencies: other_package.enforce_dependencies,
308
+ enforce_privacy: other_package.enforce_privacy,
309
+ enforce_architecture: other_package.enforce_architecture,
294
310
  dependencies: new_dependencies.uniq.sort,
295
311
  violations: other_package.violations,
296
312
  metadata: other_package.metadata,
@@ -382,6 +398,7 @@ module Packs
382
398
  name: pack_name,
383
399
  dependencies: (package.dependencies + [dependency_name]).uniq.sort,
384
400
  enforce_privacy: package.enforce_privacy,
401
+ enforce_architecture: package.enforce_architecture,
385
402
  enforce_dependencies: package.enforce_dependencies,
386
403
  violations: package.violations,
387
404
  metadata: package.metadata,
@@ -447,12 +464,13 @@ module Packs
447
464
  sig do
448
465
  params(
449
466
  pack_name: String,
450
- enforce_privacy: T::Boolean,
451
467
  enforce_dependencies: T.nilable(T::Boolean),
468
+ enforce_privacy: T::Boolean,
469
+ enforce_architecture: T::Boolean,
452
470
  team: T.nilable(CodeTeams::Team)
453
471
  ).returns(ParsePackwerk::Package)
454
472
  end
455
- def self.create_pack_if_not_exists!(pack_name:, enforce_privacy:, enforce_dependencies:, team: nil)
473
+ def self.create_pack_if_not_exists!(pack_name:, enforce_dependencies:, enforce_privacy:, enforce_architecture:, team: nil)
456
474
  allowed_locations = Packs::Specification.config.pack_paths
457
475
  if allowed_locations.none? { |location| File.fnmatch(location, pack_name) }
458
476
  raise StandardError, "Packs only supports packages in the the following directories: #{allowed_locations}. Please make sure to pass in the name of the pack including the full directory path, e.g. `packs/my_pack`."
@@ -475,6 +493,7 @@ module Packs
475
493
  package = ParsePackwerk::Package.new(
476
494
  enforce_dependencies: should_enforce_dependencies || false,
477
495
  enforce_privacy: enforce_privacy,
496
+ enforce_architecture: enforce_architecture,
478
497
  dependencies: [],
479
498
  violations: [],
480
499
  metadata: {},
data/lib/packs.rb CHANGED
@@ -13,14 +13,14 @@ require 'code_teams'
13
13
  require 'code_ownership'
14
14
 
15
15
  # Private implementation requires
16
- require 'packs/private'
17
- require 'packs/per_file_processor_interface'
18
- require 'packs/rubocop_post_processor'
19
- require 'packs/update_references_post_processor'
20
- require 'packs/code_ownership_post_processor'
21
- require 'packs/logging'
22
- require 'packs/configuration'
23
- require 'packs/cli'
16
+ require_relative 'packs/private'
17
+ require_relative 'packs/per_file_processor_interface'
18
+ require_relative 'packs/rubocop_post_processor'
19
+ require_relative 'packs/update_references_post_processor'
20
+ require_relative 'packs/code_ownership_post_processor'
21
+ require_relative 'packs/logging'
22
+ require_relative 'packs/configuration'
23
+ require_relative 'packs/cli'
24
24
 
25
25
  module Packs
26
26
  extend T::Sig
@@ -49,6 +49,7 @@ module Packs
49
49
  params(
50
50
  pack_name: String,
51
51
  enforce_privacy: T::Boolean,
52
+ enforce_architecture: T::Boolean,
52
53
  enforce_dependencies: T.nilable(T::Boolean),
53
54
  team: T.nilable(CodeTeams::Team)
54
55
  ).void
@@ -56,6 +57,7 @@ module Packs
56
57
  def self.create_pack!(
57
58
  pack_name:,
58
59
  enforce_privacy: true,
60
+ enforce_architecture: true,
59
61
  enforce_dependencies: nil,
60
62
  team: nil
61
63
  )
@@ -63,6 +65,7 @@ module Packs
63
65
  pack_name: pack_name,
64
66
  enforce_privacy: enforce_privacy,
65
67
  enforce_dependencies: enforce_dependencies,
68
+ enforce_architecture: enforce_architecture,
66
69
  team: team
67
70
  )
68
71
  end
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.37
4
+ version: 0.0.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-12 00:00:00.000000000 Z
11
+ date: 2024-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_ownership
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.22.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.22.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rainbow
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -285,6 +285,7 @@ files:
285
285
  - lib/packs/private/file_move_operation.rb
286
286
  - lib/packs/private/interactive_cli.rb
287
287
  - lib/packs/private/interactive_cli/file_selector.rb
288
+ - lib/packs/private/interactive_cli/pack_directory_selector.rb
288
289
  - lib/packs/private/interactive_cli/pack_selector.rb
289
290
  - lib/packs/private/interactive_cli/team_selector.rb
290
291
  - lib/packs/private/interactive_cli/use_cases/add_dependency.rb
@@ -296,7 +297,7 @@ files:
296
297
  - lib/packs/private/interactive_cli/use_cases/lint_package_yml_files.rb
297
298
  - lib/packs/private/interactive_cli/use_cases/make_public.rb
298
299
  - lib/packs/private/interactive_cli/use_cases/move.rb
299
- - lib/packs/private/interactive_cli/use_cases/move_to_parent.rb
300
+ - lib/packs/private/interactive_cli/use_cases/move_pack.rb
300
301
  - lib/packs/private/interactive_cli/use_cases/query.rb
301
302
  - lib/packs/private/interactive_cli/use_cases/rename.rb
302
303
  - lib/packs/private/interactive_cli/use_cases/update.rb
@@ -314,7 +315,7 @@ metadata:
314
315
  source_code_uri: https://github.com/rubyatscale/packs
315
316
  changelog_uri: https://github.com/rubyatscale/packs/releases
316
317
  allowed_push_host: https://rubygems.org
317
- post_install_message:
318
+ post_install_message:
318
319
  rdoc_options: []
319
320
  require_paths:
320
321
  - lib
@@ -329,8 +330,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
330
  - !ruby/object:Gem::Version
330
331
  version: '0'
331
332
  requirements: []
332
- rubygems_version: 3.1.6
333
- signing_key:
333
+ rubygems_version: 3.5.3
334
+ signing_key:
334
335
  specification_version: 4
335
336
  summary: Provides CLI tools for working with ruby packs.
336
337
  test_files: []
@@ -1,31 +0,0 @@
1
- # typed: strict
2
-
3
- module Packs
4
- module Private
5
- module InteractiveCli
6
- module UseCases
7
- class MoveToParent
8
- extend T::Sig
9
- extend T::Helpers
10
- include Interface
11
-
12
- sig { override.params(prompt: TTY::Prompt).void }
13
- def perform!(prompt)
14
- child_pack = PackSelector.single_pack_select(prompt, question_text: 'Please select the child pack that will be nested')
15
- parent_pack = PackSelector.single_pack_select(prompt, question_text: 'Please select the pack that will be the parent')
16
- Packs.move_to_parent!(
17
- parent_name: parent_pack.name,
18
- pack_name: child_pack.name,
19
- per_file_processors: [Packs::RubocopPostProcessor.new, Packs::CodeOwnershipPostProcessor.new]
20
- )
21
- end
22
-
23
- sig { override.returns(String) }
24
- def user_facing_name
25
- 'Move a child pack to be nested under a parent pack'
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end