packs 0.0.37 → 0.0.39

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: 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