code_ownership 1.23.0 → 1.26.0

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: c664c64c94e083083f3187002fc77ffb7d40cbc7c5c76ae0291b9d5c11cd224f
4
- data.tar.gz: cf6dcc613f67a6e7723fa73a079dabfa8782ddba886441afd8e5608eaa9249ec
3
+ metadata.gz: 988c067afbabcc65d5b697aea162ba1c288787e4d7d9a84a261b00f76859aa6b
4
+ data.tar.gz: 6a504214d4470cfd2d1ab103f201069367e39962a390d34382410587a6067e40
5
5
  SHA512:
6
- metadata.gz: 54373f777f534bd2f600510e1ee94b85151bc5016d076d35ef5ed7d140a1d8b53d1bcea24a1af2badebc5939c52c1e2660e066eb49fcbcc4fb7a330cf227664f
7
- data.tar.gz: c94fd3d689b09a27b8db89b339e3037ec8e6c1fe76413226b22662ce068599ecd30a6aa80e0f90e389a0d1a17bb58afebd650ed4c8bd57523336bd688517f819
6
+ metadata.gz: 16b3e48c3cb734857dd66cf03f9d43d89bb92ee3ab92abfc0550004274531e03eef4abc9157fab33e25d815dd5b5c6f055d65987e7526dcb4952212930935678
7
+ data.tar.gz: 0f0cc9f4a1b8938e088bc258d5b247d633beaac3c68ddf37ea269fa3740d27d796b9773354e47855e79ecd5e958b49d97fd9f231f42502e62eab508d1d8ea9a1
data/README.md CHANGED
@@ -5,6 +5,8 @@ Check out `lib/code_ownership.rb` to see the public API.
5
5
 
6
6
  Check out `code_ownership_spec.rb` to see examples of how code ownership is used.
7
7
 
8
+ There is also a [companion VSCode Extension]([url](https://github.com/bigrails/code-ownership-vscode)) for this gem. Just search `Gusto.code-ownership-vscode` in the VSCode Extension Marketplace.
9
+
8
10
  ## Usage: Declaring Ownership
9
11
  There are three ways to declare code ownership using this gem.
10
12
  ### Package-Based Ownership
@@ -6,12 +6,24 @@ require 'pathname'
6
6
  module CodeOwnership
7
7
  class Cli
8
8
  def self.run!(argv)
9
- # Someday we might support other subcommands. When we do that, we can call
10
- # argv.shift to get the first argument and check if it's a given subcommand.
11
9
  command = argv.shift
12
10
  if command == 'validate'
13
11
  validate!(argv)
12
+ elsif command == 'for_file'
13
+ for_file(argv)
14
+ elsif [nil, "help"].include?(command)
15
+ puts <<~USAGE
16
+ Usage: bin/codeownership <subcommand>
17
+
18
+ Subcommands:
19
+ validate - run all validations
20
+ for_file - find code ownership for a single file
21
+ help - display help information about code_ownership
22
+ USAGE
23
+ else
24
+ puts "'#{command}' is not a code_ownership command. See `bin/codeownership help`."
14
25
  end
26
+
15
27
  end
16
28
 
17
29
  def self.validate!(argv)
@@ -55,6 +67,55 @@ module CodeOwnership
55
67
  )
56
68
  end
57
69
 
70
+ # For now, this just returns team ownership
71
+ # Later, this could also return code ownership errors about that file.
72
+ def self.for_file(argv)
73
+ options = {}
74
+
75
+ # Long-term, we probably want to use something like `thor` so we don't have to implement logic
76
+ # like this. In the short-term, this is a simple way for us to use the built-in OptionParser
77
+ # while having an ergonomic CLI.
78
+ files = argv.select { |arg| !arg.start_with?('--') }
79
+
80
+ parser = OptionParser.new do |opts|
81
+ opts.banner = 'Usage: bin/codeownership for_file [options]'
82
+
83
+ opts.on('--json', 'Output as JSON') do
84
+ options[:json] = true
85
+ end
86
+
87
+ opts.on('--help', 'Shows this prompt') do
88
+ puts opts
89
+ exit
90
+ end
91
+ end
92
+ args = parser.order!(argv) {}
93
+ parser.parse!(args)
94
+
95
+ if files.count != 1
96
+ raise "Please pass in one file. Use `bin/codeownership for_file --help` for more info"
97
+ end
98
+
99
+ team = CodeOwnership.for_file(files.first)
100
+
101
+ team_name = team&.name || "Unowned"
102
+ team_yml = team&.config_yml || "Unowned"
103
+
104
+ if options[:json]
105
+ json = {
106
+ team_name: team_name,
107
+ team_yml: team_yml,
108
+ }
109
+
110
+ puts json.to_json
111
+ else
112
+ puts <<~MSG
113
+ Team: #{team_name}
114
+ Team YML: #{team_yml}
115
+ MSG
116
+ end
117
+ end
118
+
58
119
  private_class_method :validate!
59
120
  end
60
121
  end
@@ -50,7 +50,7 @@ module CodeOwnership
50
50
  end
51
51
 
52
52
  if errors.any?
53
- errors << 'See https://github.com/bigrails/code_ownership/README.md for more details'
53
+ errors << 'See https://github.com/bigrails/code_ownership#README.md for more details'
54
54
  raise InvalidCodeOwnershipConfigurationError.new(errors.join("\n")) # rubocop:disable Style/RaiseArgs
55
55
  end
56
56
  end
@@ -0,0 +1,3 @@
1
+ class Hash
2
+ def to_json; end
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_ownership
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.23.0
4
+ version: 1.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigrails-teams
@@ -151,6 +151,7 @@ files:
151
151
  - sorbet/config
152
152
  - sorbet/rbi/gems/bigrails-teams@0.1.0.rbi
153
153
  - sorbet/rbi/gems/parse_packwerk@0.7.0.rbi
154
+ - sorbet/rbi/manual.rbi
154
155
  - sorbet/rbi/todo.rbi
155
156
  homepage: https://github.com/bigrails/code_ownership
156
157
  licenses: