packs 0.0.6 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +101 -12
  3. data/bin/packs +10 -0
  4. data/bin/rubocop +29 -0
  5. data/bin/tapioca +29 -0
  6. data/lib/packs/cli.rb +164 -0
  7. data/lib/packs/code_ownership_post_processor.rb +58 -0
  8. data/lib/packs/configuration.rb +61 -0
  9. data/lib/packs/default_user_event_logger.rb +7 -0
  10. data/lib/packs/logging.rb +37 -0
  11. data/lib/packs/per_file_processor_interface.rb +18 -0
  12. data/lib/packs/private/file_move_operation.rb +80 -0
  13. data/lib/packs/private/interactive_cli/file_selector.rb +26 -0
  14. data/lib/packs/private/interactive_cli/pack_selector.rb +55 -0
  15. data/lib/packs/private/interactive_cli/team_selector.rb +58 -0
  16. data/lib/packs/private/interactive_cli/use_cases/add_dependency.rb +30 -0
  17. data/lib/packs/private/interactive_cli/use_cases/check.rb +25 -0
  18. data/lib/packs/private/interactive_cli/use_cases/create.rb +27 -0
  19. data/lib/packs/private/interactive_cli/use_cases/get_info.rb +37 -0
  20. data/lib/packs/private/interactive_cli/use_cases/interface.rb +34 -0
  21. data/lib/packs/private/interactive_cli/use_cases/lint_package_todo_yml_files.rb +25 -0
  22. data/lib/packs/private/interactive_cli/use_cases/lint_package_yml_files.rb +26 -0
  23. data/lib/packs/private/interactive_cli/use_cases/make_public.rb +30 -0
  24. data/lib/packs/private/interactive_cli/use_cases/move.rb +32 -0
  25. data/lib/packs/private/interactive_cli/use_cases/move_to_parent.rb +31 -0
  26. data/lib/packs/private/interactive_cli/use_cases/query.rb +51 -0
  27. data/lib/packs/private/interactive_cli/use_cases/rename.rb +25 -0
  28. data/lib/packs/private/interactive_cli/use_cases/update.rb +25 -0
  29. data/lib/packs/private/interactive_cli/use_cases/validate.rb +25 -0
  30. data/lib/packs/private/interactive_cli/use_cases/visualize.rb +44 -0
  31. data/lib/packs/private/interactive_cli.rb +52 -0
  32. data/lib/packs/private/pack_relationship_analyzer.rb +135 -0
  33. data/lib/packs/private/packwerk_wrapper/offenses_aggregator_formatter.rb +44 -0
  34. data/lib/packs/private/packwerk_wrapper.rb +70 -0
  35. data/lib/packs/private.rb +606 -4
  36. data/lib/packs/rubocop_post_processor.rb +30 -0
  37. data/lib/packs/user_event_logger.rb +199 -0
  38. data/lib/packs.rb +233 -53
  39. metadata +225 -14
  40. data/lib/packs/pack.rb +0 -48
  41. data/lib/packs/private/configuration.rb +0 -36
  42. data/lib/packs/rspec/fixture_helper.rb +0 -33
  43. data/lib/packs/rspec/support.rb +0 -21
metadata CHANGED
@@ -1,15 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.22
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-01-06 00:00:00.000000000 Z
11
+ date: 2023-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: code_ownership
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.33.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.33.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: packs-specification
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: packwerk
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: parse_packwerk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-packs
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
13
97
  - !ruby/object:Gem::Dependency
14
98
  name: sorbet-runtime
15
99
  requirement: !ruby/object:Gem::Requirement
@@ -24,20 +108,90 @@ dependencies:
24
108
  - - ">="
25
109
  - !ruby/object:Gem::Version
26
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: thor
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: tty-prompt
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: visualize_packs
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
27
153
  - !ruby/object:Gem::Dependency
28
154
  name: bundler
29
155
  requirement: !ruby/object:Gem::Requirement
30
156
  requirements:
31
157
  - - "~>"
32
158
  - !ruby/object:Gem::Version
33
- version: 2.2.16
159
+ version: '2.2'
34
160
  type: :development
35
161
  prerelease: false
36
162
  version_requirements: !ruby/object:Gem::Requirement
37
163
  requirements:
38
164
  - - "~>"
39
165
  - !ruby/object:Gem::Version
40
- version: 2.2.16
166
+ version: '2.2'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: pry-byebug
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
41
195
  - !ruby/object:Gem::Dependency
42
196
  name: rake
43
197
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +234,20 @@ dependencies:
80
234
  - - ">="
81
235
  - !ruby/object:Gem::Version
82
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: rubocop-rspec
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
83
251
  - !ruby/object:Gem::Dependency
84
252
  name: sorbet
85
253
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +262,20 @@ dependencies:
94
262
  - - ">="
95
263
  - !ruby/object:Gem::Version
96
264
  version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: sorbet-static
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
97
279
  - !ruby/object:Gem::Dependency
98
280
  name: tapioca
99
281
  requirement: !ruby/object:Gem::Requirement
@@ -108,21 +290,51 @@ dependencies:
108
290
  - - ">="
109
291
  - !ruby/object:Gem::Version
110
292
  version: '0'
111
- description: Packs are the specification for gradual modularization in the `rubyatscale`
112
- ecosystem.
293
+ description: Provides CLI tools for working with ruby packs.
113
294
  email:
114
295
  - dev@gusto.com
115
- executables: []
296
+ executables:
297
+ - packs
116
298
  extensions: []
117
299
  extra_rdoc_files: []
118
300
  files:
119
301
  - README.md
302
+ - bin/packs
303
+ - bin/rubocop
304
+ - bin/tapioca
120
305
  - lib/packs.rb
121
- - lib/packs/pack.rb
306
+ - lib/packs/cli.rb
307
+ - lib/packs/code_ownership_post_processor.rb
308
+ - lib/packs/configuration.rb
309
+ - lib/packs/default_user_event_logger.rb
310
+ - lib/packs/logging.rb
311
+ - lib/packs/per_file_processor_interface.rb
122
312
  - lib/packs/private.rb
123
- - lib/packs/private/configuration.rb
124
- - lib/packs/rspec/fixture_helper.rb
125
- - lib/packs/rspec/support.rb
313
+ - lib/packs/private/file_move_operation.rb
314
+ - lib/packs/private/interactive_cli.rb
315
+ - lib/packs/private/interactive_cli/file_selector.rb
316
+ - lib/packs/private/interactive_cli/pack_selector.rb
317
+ - lib/packs/private/interactive_cli/team_selector.rb
318
+ - lib/packs/private/interactive_cli/use_cases/add_dependency.rb
319
+ - lib/packs/private/interactive_cli/use_cases/check.rb
320
+ - lib/packs/private/interactive_cli/use_cases/create.rb
321
+ - lib/packs/private/interactive_cli/use_cases/get_info.rb
322
+ - lib/packs/private/interactive_cli/use_cases/interface.rb
323
+ - lib/packs/private/interactive_cli/use_cases/lint_package_todo_yml_files.rb
324
+ - lib/packs/private/interactive_cli/use_cases/lint_package_yml_files.rb
325
+ - lib/packs/private/interactive_cli/use_cases/make_public.rb
326
+ - lib/packs/private/interactive_cli/use_cases/move.rb
327
+ - lib/packs/private/interactive_cli/use_cases/move_to_parent.rb
328
+ - lib/packs/private/interactive_cli/use_cases/query.rb
329
+ - lib/packs/private/interactive_cli/use_cases/rename.rb
330
+ - lib/packs/private/interactive_cli/use_cases/update.rb
331
+ - lib/packs/private/interactive_cli/use_cases/validate.rb
332
+ - lib/packs/private/interactive_cli/use_cases/visualize.rb
333
+ - lib/packs/private/pack_relationship_analyzer.rb
334
+ - lib/packs/private/packwerk_wrapper.rb
335
+ - lib/packs/private/packwerk_wrapper/offenses_aggregator_formatter.rb
336
+ - lib/packs/rubocop_post_processor.rb
337
+ - lib/packs/user_event_logger.rb
126
338
  homepage: https://github.com/rubyatscale/packs
127
339
  licenses:
128
340
  - MIT
@@ -139,7 +351,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
351
  requirements:
140
352
  - - ">="
141
353
  - !ruby/object:Gem::Version
142
- version: '2.6'
354
+ version: 2.6.0
143
355
  required_rubygems_version: !ruby/object:Gem::Requirement
144
356
  requirements:
145
357
  - - ">="
@@ -149,6 +361,5 @@ requirements: []
149
361
  rubygems_version: 3.1.6
150
362
  signing_key:
151
363
  specification_version: 4
152
- summary: Packs are the specification for gradual modularization in the `rubyatscale`
153
- ecosystem.
364
+ summary: Provides CLI tools for working with ruby packs.
154
365
  test_files: []
data/lib/packs/pack.rb DELETED
@@ -1,48 +0,0 @@
1
- # typed: strict
2
-
3
- module Packs
4
- class Pack < T::Struct
5
- extend T::Sig
6
-
7
- const :name, String
8
- const :path, Pathname
9
- const :relative_path, Pathname
10
- const :raw_hash, T::Hash[T.untyped, T.untyped]
11
-
12
- sig { params(package_yml_absolute_path: Pathname).returns(Pack) }
13
- def self.from(package_yml_absolute_path)
14
- package_loaded_yml = YAML.load_file(package_yml_absolute_path)
15
- path = package_yml_absolute_path.dirname
16
- relative_path = path.relative_path_from(Private.root)
17
- package_name = relative_path.cleanpath.to_s
18
-
19
- Pack.new(
20
- name: package_name,
21
- path: path,
22
- relative_path: relative_path,
23
- raw_hash: package_loaded_yml || {}
24
- )
25
- end
26
-
27
- sig { params(relative: T::Boolean).returns(Pathname) }
28
- def yml(relative: true)
29
- path_to_use = relative ? relative_path : path
30
- path_to_use.join(PACKAGE_FILE).cleanpath
31
- end
32
-
33
- sig { returns(String) }
34
- def last_name
35
- relative_path.basename.to_s
36
- end
37
-
38
- sig { returns(T::Boolean) }
39
- def is_gem?
40
- @is_gem ||= T.let(relative_path.glob('*.gemspec').any?, T.nilable(T::Boolean))
41
- end
42
-
43
- sig { returns(T::Hash[T.untyped, T.untyped]) }
44
- def metadata
45
- raw_hash['metadata'] || {}
46
- end
47
- end
48
- end
@@ -1,36 +0,0 @@
1
- # typed: strict
2
-
3
- module Packs
4
- module Private
5
- class Configuration < T::Struct
6
- extend T::Sig
7
- CONFIGURATION_PATHNAME = T.let(Pathname.new('packs.yml'), Pathname)
8
-
9
- DEFAULT_PACK_PATHS = T.let([
10
- 'packs/*',
11
- 'packs/*/*'
12
- ], T::Array[String])
13
-
14
- prop :pack_paths, T::Array[String]
15
-
16
- sig { returns(Configuration) }
17
- def self.fetch
18
- config_hash = CONFIGURATION_PATHNAME.exist? ? YAML.load_file(CONFIGURATION_PATHNAME) : {}
19
-
20
- new(
21
- pack_paths: pack_paths(config_hash)
22
- )
23
- end
24
-
25
- sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[String]) }
26
- def self.pack_paths(config_hash)
27
- specified_pack_paths = config_hash['pack_paths']
28
- if specified_pack_paths.nil?
29
- DEFAULT_PACK_PATHS.dup
30
- else
31
- Array(specified_pack_paths)
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,33 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module FixtureHelper
5
- extend T::Sig
6
-
7
- sig { params(path: String, content: String).returns(String) }
8
- def write_file(path, content = '')
9
- pathname = Pathname.pwd.join(path)
10
- FileUtils.mkdir_p(pathname.dirname)
11
- pathname.write(content)
12
- path
13
- end
14
-
15
- sig do
16
- params(
17
- pack_name: String,
18
- config: T::Hash[T.untyped, T.untyped]
19
- ).void
20
- end
21
- def write_pack(
22
- pack_name,
23
- config = {}
24
- )
25
- path = Pathname.pwd.join(pack_name).join('package.yml')
26
- write_file(path.to_s, YAML.dump(config))
27
- end
28
-
29
- sig { params(path: String).void }
30
- def delete_app_file(path)
31
- File.delete(path)
32
- end
33
- end
@@ -1,21 +0,0 @@
1
- require_relative 'fixture_helper'
2
-
3
- RSpec.configure do |config|
4
- config.include FixtureHelper
5
-
6
- config.before do
7
- # We bust_cache always because each test may write its own packs
8
- Packs.bust_cache!
9
- end
10
-
11
- # Eventually, we could make this opt-in via metadata so someone can use this support without affecting all their tests.
12
- config.around do |example|
13
- prefix = [File.basename($0), Process.pid].join('-') # rubocop:disable Style/SpecialGlobalVars
14
- tmpdir = Dir.mktmpdir(prefix)
15
- Dir.chdir(tmpdir) do
16
- example.run
17
- end
18
- ensure
19
- FileUtils.rm_rf(tmpdir)
20
- end
21
- end