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 +4 -4
- data/lib/packs/cli.rb +5 -1
- data/lib/packs/configuration.rb +2 -2
- data/lib/packs/private/interactive_cli/pack_directory_selector.rb +28 -0
- data/lib/packs/private/interactive_cli/use_cases/move_pack.rb +70 -0
- data/lib/packs/private/interactive_cli.rb +17 -16
- data/lib/packs/private.rb +31 -12
- data/lib/packs.rb +11 -8
- metadata +10 -9
- data/lib/packs/private/interactive_cli/use_cases/move_to_parent.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01d0eabdf25328fdc677db1822e9fa63708f5fd300acac2a0a35642fdaf90406
|
4
|
+
data.tar.gz: 861dd9be5a4c13ffefaa3004631077023accd9ae13ec6f9cf616bd3247c24fcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
data/lib/packs/configuration.rb
CHANGED
@@ -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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
10
|
-
|
11
|
-
|
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:,
|
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!(
|
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!(
|
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:,
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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.
|
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:
|
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:
|
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:
|
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/
|
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.
|
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
|