code_ownership 2.1.0-x86_64-linux → 2.1.1-x86_64-linux

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: 5eefa130f8ea4807d7330296ff516bf19dfba1da29b4a305494825701622287d
4
- data.tar.gz: 2af8901f13bc6bc310efb541cf1ca40592d48e48d62faca7204df2fa16b05df9
3
+ metadata.gz: adae3a62f615f131fac8f1ecd05a6888cd12d32136c65ba1016640d56d5a08ea
4
+ data.tar.gz: 52aacacd5d5f190336353cc4fe4aca00fc8b79fc1c2de95e3cf791f3a69e5d1d
5
5
  SHA512:
6
- metadata.gz: f8c91fb0c2c5950de1b189b32eb5d36b1c4fd9d55c4c5e708a8070ddbd3899e89d1b2b1e19e4d37535a3f9e78538ca0c83f66a22e011e541e20f5f1dd17f2c18
7
- data.tar.gz: fdc5d26e742254450fb022b21d8280ef05d1db863923a2b45dc82cbcc1d910cc4653e793c246a25162f8025e17f740339b6e75edfffd9a0bbca25d5a03b23edc
6
+ metadata.gz: 581f3954eac7da7cf5079c9871bd653668873655c3fd24db3746ba2378291a6a36763e74faa47c93c63a67152f6cb8fea59c53bdec743f4bad57528f73f85e12
7
+ data.tar.gz: cbbf56062481c954cc32af8375a388bdd3e79d562f9d2d8069aa86e5984539d56c8285ae1ea56e7e964de004ce9fcdf08a2194521ef0e2d56841125201febf1b
@@ -1,4 +1,5 @@
1
1
  # typed: true
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'optparse'
4
5
  require 'pathname'
@@ -1,19 +1,15 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  # typed: strict
4
3
 
5
4
  module CodeOwnership
6
5
  module Private
7
6
  module FilePathFinder
8
- module_function
9
-
10
7
  extend T::Sig
11
- extend T::Helpers
12
8
 
13
9
  # Returns a string version of the relative path to a Rails constant,
14
10
  # or nil if it can't find anything
15
- sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(String)) }
16
- def path_from_klass(klass)
11
+ sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(String)) }
12
+ def self.path_from_klass(klass)
17
13
  if klass
18
14
  path = Object.const_source_location(klass.to_s)&.first
19
15
  (path && Pathname.new(path).relative_path_from(Pathname.pwd).to_s) || nil
@@ -23,7 +19,7 @@ module CodeOwnership
23
19
  end
24
20
 
25
21
  sig { params(backtrace: T.nilable(T::Array[String])).returns(T::Enumerable[String]) }
26
- def from_backtrace(backtrace)
22
+ def self.from_backtrace(backtrace)
27
23
  return [] unless backtrace
28
24
 
29
25
  # The pattern for a backtrace hasn't changed in forever and is considered
@@ -1,37 +1,33 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  # typed: strict
4
3
 
5
4
  module CodeOwnership
6
5
  module Private
7
6
  module FilePathTeamCache
8
- module_function
9
-
10
7
  extend T::Sig
11
- extend T::Helpers
12
8
 
13
9
  sig { params(file_path: String).returns(T.nilable(CodeTeams::Team)) }
14
- def get(file_path)
10
+ def self.get(file_path)
15
11
  cache[file_path]
16
12
  end
17
13
 
18
14
  sig { params(file_path: String, team: T.nilable(CodeTeams::Team)).void }
19
- def set(file_path, team)
15
+ def self.set(file_path, team)
20
16
  cache[file_path] = team
21
17
  end
22
18
 
23
19
  sig { params(file_path: String).returns(T::Boolean) }
24
- def cached?(file_path)
20
+ def self.cached?(file_path)
25
21
  cache.key?(file_path)
26
22
  end
27
23
 
28
24
  sig { void }
29
- def bust_cache!
25
+ def self.bust_cache!
30
26
  @cache = nil
31
27
  end
32
28
 
33
29
  sig { returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
34
- def cache
30
+ def self.cache
35
31
  @cache ||= T.let(@cache,
36
32
  T.nilable(T::Hash[String, T.nilable(CodeTeams::Team)]))
37
33
  @cache ||= {}
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  # typed: strict
4
3
 
5
4
  module CodeOwnership
@@ -1,19 +1,13 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  # typed: strict
4
3
 
5
4
  module CodeOwnership
6
5
  module Private
7
6
  module TeamFinder
8
- module_function
9
-
10
7
  extend T::Sig
11
- extend T::Helpers
12
-
13
- requires_ancestor { Kernel }
14
8
 
15
9
  sig { params(file_path: String, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
16
- def for_file(file_path, allow_raise: false)
10
+ def self.for_file(file_path, allow_raise: false)
17
11
  return nil if file_path.start_with?('./')
18
12
 
19
13
  return FilePathTeamCache.get(file_path) if FilePathTeamCache.cached?(file_path)
@@ -31,7 +25,7 @@ module CodeOwnership
31
25
  end
32
26
 
33
27
  sig { params(files: T::Array[String], allow_raise: T::Boolean).returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
34
- def teams_for_files(files, allow_raise: false)
28
+ def self.teams_for_files(files, allow_raise: false)
35
29
  result = {}
36
30
 
37
31
  # Collect cached results and identify non-cached files
@@ -57,8 +51,8 @@ module CodeOwnership
57
51
  result
58
52
  end
59
53
 
60
- sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(::CodeTeams::Team)) }
61
- def for_class(klass)
54
+ sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(::CodeTeams::Team)) }
55
+ def self.for_class(klass)
62
56
  file_path = FilePathFinder.path_from_klass(klass)
63
57
  return nil if file_path.nil?
64
58
 
@@ -66,7 +60,7 @@ module CodeOwnership
66
60
  end
67
61
 
68
62
  sig { params(package: Packs::Pack).returns(T.nilable(::CodeTeams::Team)) }
69
- def for_package(package)
63
+ def self.for_package(package)
70
64
  owner_name = package.raw_hash['owner'] || package.metadata['owner']
71
65
  return nil if owner_name.nil?
72
66
 
@@ -74,12 +68,12 @@ module CodeOwnership
74
68
  end
75
69
 
76
70
  sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
77
- def for_backtrace(backtrace, excluded_teams: [])
71
+ def self.for_backtrace(backtrace, excluded_teams: [])
78
72
  first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)&.first
79
73
  end
80
74
 
81
75
  sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable([::CodeTeams::Team, String])) }
82
- def first_owned_file_for_backtrace(backtrace, excluded_teams: [])
76
+ def self.first_owned_file_for_backtrace(backtrace, excluded_teams: [])
83
77
  FilePathFinder.from_backtrace(backtrace).each do |file|
84
78
  team = for_file(file)
85
79
  if team && !excluded_teams.include?(team)
@@ -91,7 +85,7 @@ module CodeOwnership
91
85
  end
92
86
 
93
87
  sig { params(team_name: String, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
94
- def find_team!(team_name, allow_raise: false)
88
+ def self.find_team!(team_name, allow_raise: false)
95
89
  team = CodeTeams.find(team_name)
96
90
  if team.nil? && allow_raise
97
91
  raise(StandardError, "Could not find team with name: `#{team_name}`. Make sure the team is one of `#{CodeTeams.all.map(&:name).sort}`")
@@ -1,6 +1,6 @@
1
- # typed: false
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module CodeOwnership
5
- VERSION = '2.1.0'
5
+ VERSION = '2.1.1'
6
6
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  # typed: strict
4
3
 
5
4
  require 'code_teams'
@@ -25,17 +24,13 @@ if defined?(Packwerk)
25
24
  end
26
25
 
27
26
  module CodeOwnership
28
- module_function
29
-
30
27
  extend T::Sig
31
- extend T::Helpers
32
28
 
33
- requires_ancestor { Kernel }
34
29
  GlobsToOwningTeamMap = T.type_alias { T::Hash[String, CodeTeams::Team] }
35
30
 
36
31
  # Returns the version of the code_ownership gem and the codeowners-rs gem.
37
32
  sig { returns(T::Array[String]) }
38
- def version
33
+ def self.version
39
34
  ["code_ownership version: #{VERSION}",
40
35
  "codeowners-rs version: #{::RustCodeOwners.version}"]
41
36
  end
@@ -65,7 +60,7 @@ module CodeOwnership
65
60
  # # => raises exception if no owner found
66
61
  #
67
62
  sig { params(file: String, from_codeowners: T::Boolean, allow_raise: T::Boolean).returns(T.nilable(CodeTeams::Team)) }
68
- def for_file(file, from_codeowners: true, allow_raise: false)
63
+ def self.for_file(file, from_codeowners: true, allow_raise: false)
69
64
  if from_codeowners
70
65
  teams_for_files_from_codeowners([file], allow_raise: allow_raise).values.first
71
66
  else
@@ -116,7 +111,7 @@ module CodeOwnership
116
111
  # @see #validate! for ensuring CODEOWNERS file is up-to-date
117
112
  #
118
113
  sig { params(files: T::Array[String], allow_raise: T::Boolean).returns(T::Hash[String, T.nilable(CodeTeams::Team)]) }
119
- def teams_for_files_from_codeowners(files, allow_raise: false)
114
+ def self.teams_for_files_from_codeowners(files, allow_raise: false)
120
115
  Private::TeamFinder.teams_for_files(files, allow_raise: allow_raise)
121
116
  end
122
117
 
@@ -160,12 +155,12 @@ module CodeOwnership
160
155
  # @see CLI#for_file for the command-line interface that uses this method
161
156
  #
162
157
  sig { params(file: String).returns(T.nilable(T::Hash[Symbol, String])) }
163
- def for_file_verbose(file)
158
+ def self.for_file_verbose(file)
164
159
  ::RustCodeOwners.for_file(file)
165
160
  end
166
161
 
167
162
  sig { params(team: T.any(CodeTeams::Team, String)).returns(T::Array[String]) }
168
- def for_team(team)
163
+ def self.for_team(team)
169
164
  team = T.must(CodeTeams.find(team)) if team.is_a?(String)
170
165
  ::RustCodeOwners.for_team(team.name)
171
166
  end
@@ -226,7 +221,7 @@ module CodeOwnership
226
221
  files: T.nilable(T::Array[String])
227
222
  ).void
228
223
  end
229
- def validate!(
224
+ def self.validate!(
230
225
  autocorrect: true,
231
226
  stage_changes: true,
232
227
  files: nil
@@ -269,7 +264,7 @@ module CodeOwnership
269
264
  # @note Leading newlines after the annotation are also removed to maintain clean formatting.
270
265
  #
271
266
  sig { params(filename: String).void }
272
- def remove_file_annotation!(filename)
267
+ def self.remove_file_annotation!(filename)
273
268
  filepath = Pathname.new(filename)
274
269
 
275
270
  begin
@@ -292,24 +287,24 @@ module CodeOwnership
292
287
  # Given a backtrace from either `Exception#backtrace` or `caller`, find the
293
288
  # first line that corresponds to a file with assigned ownership
294
289
  sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
295
- def for_backtrace(backtrace, excluded_teams: [])
290
+ def self.for_backtrace(backtrace, excluded_teams: [])
296
291
  Private::TeamFinder.for_backtrace(backtrace, excluded_teams: excluded_teams)
297
292
  end
298
293
 
299
294
  # Given a backtrace from either `Exception#backtrace` or `caller`, find the
300
295
  # first owned file in it, useful for figuring out which file is being blamed.
301
296
  sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable([::CodeTeams::Team, String])) }
302
- def first_owned_file_for_backtrace(backtrace, excluded_teams: [])
297
+ def self.first_owned_file_for_backtrace(backtrace, excluded_teams: [])
303
298
  Private::TeamFinder.first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)
304
299
  end
305
300
 
306
- sig { params(klass: T.nilable(T.any(T::Class[T.anything], Module))).returns(T.nilable(::CodeTeams::Team)) }
307
- def for_class(klass)
301
+ sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(::CodeTeams::Team)) }
302
+ def self.for_class(klass)
308
303
  Private::TeamFinder.for_class(klass)
309
304
  end
310
305
 
311
306
  sig { params(package: Packs::Pack).returns(T.nilable(::CodeTeams::Team)) }
312
- def for_package(package)
307
+ def self.for_package(package)
313
308
  Private::TeamFinder.for_package(package)
314
309
  end
315
310
 
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: 2.1.0
4
+ version: 2.1.1
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-13 00:00:00.000000000 Z
11
+ date: 2026-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_teams
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.5.11249
47
+ version: 0.6.12763
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.5.11249
54
+ version: 0.6.12763
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: debug
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -179,6 +179,7 @@ files:
179
179
  - lib/code_ownership/3.2/code_ownership.so
180
180
  - lib/code_ownership/3.3/code_ownership.so
181
181
  - lib/code_ownership/3.4/code_ownership.so
182
+ - lib/code_ownership/4.0/code_ownership.so
182
183
  - lib/code_ownership/cli.rb
183
184
  - lib/code_ownership/private/file_path_finder.rb
184
185
  - lib/code_ownership/private/file_path_team_cache.rb
@@ -206,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
207
  version: '3.2'
207
208
  - - "<"
208
209
  - !ruby/object:Gem::Version
209
- version: 3.5.dev
210
+ version: 4.1.dev
210
211
  required_rubygems_version: !ruby/object:Gem::Requirement
211
212
  requirements:
212
213
  - - ">="