code_ownership 1.32.0 → 1.32.2

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: 62401f4e5d0f4c94669144b049a2e47f0f436b0dec4977db339827aa2378afb6
4
- data.tar.gz: be8561814a7c648b659b15fbe5c860edd409d3aa5aef91c1818820d447537a57
3
+ metadata.gz: 32fde48e3bfda45fef25ea894835a45548aac619699a8c56549000ca373916b5
4
+ data.tar.gz: e9155c7e859a17a8d31bc0f092822bd161f65a965b356060295be61ee695858b
5
5
  SHA512:
6
- metadata.gz: d75fed2acaf64ba6ae82b7692531ad3d4629745d48a5567cfe954851d0edcd623b619be3d2a0f89f52e01125029bb01f5c1983bc39e4294640410f3d52229bd5
7
- data.tar.gz: 290e5caeef1ed81b45a048d55800ee1d2772418d25ff749fc3dab33eef3f85190e294b4e0d7082f51ac2590df458011b5a859ea2faddfc96eec9d238163bb3a6
6
+ metadata.gz: d407ad1c1437c75b7ee9b5df5e22bfe74d90b5e353f62546879fdaf09b7be6d9bbb4c67f70fe0721d55729215377f407f03a83bb094f0fd8d24ad209cbd65957
7
+ data.tar.gz: dcef3ed24a4af4825a3f8320bcd704885dee0f4f65d7db08515844a67a094dca32f06024275a4d4361908f85f5cbbbdffb27e53c79efab1c384cd1348bb642db
@@ -25,6 +25,14 @@ module CodeOwnership
25
25
  @configuration ||= Configuration.fetch
26
26
  end
27
27
 
28
+ # This is just an alias for `configuration` that makes it more explicit what we're doing instead of just calling `configuration`.
29
+ # This is necessary because configuration may contain extensions of code ownership, so those extensions should be loaded prior to
30
+ # calling APIs that provide ownership information.
31
+ sig { returns(Configuration) }
32
+ def self.load_configuration!
33
+ configuration
34
+ end
35
+
28
36
  sig { void }
29
37
  def self.bust_caches!
30
38
  @configuration = nil
@@ -50,10 +58,10 @@ module CodeOwnership
50
58
 
51
59
  # Returns a string version of the relative path to a Rails constant,
52
60
  # or nil if it can't find something
53
- sig { params(klass: T.nilable(T.any(Class, Module))).returns(T.nilable(String)) }
54
- def self.path_from_klass(klass)
55
- if klass
56
- path = Object.const_source_location(klass.to_s)&.first
61
+ sig { params(klass_string: T.nilable(String)).returns(T.nilable(String)) }
62
+ def self.path_from_klass_string(klass_string)
63
+ if klass_string
64
+ path = Object.const_source_location(klass_string)&.first
57
65
  (path && Pathname.new(path).relative_path_from(Pathname.pwd).to_s) || nil
58
66
  else
59
67
  nil
@@ -28,6 +28,8 @@ module CodeOwnership
28
28
  return nil if file.start_with?('./')
29
29
  return @for_file[file] if @for_file.key?(file)
30
30
 
31
+ Private.load_configuration!
32
+
31
33
  owner = T.let(nil, T.nilable(CodeTeams::Team))
32
34
 
33
35
  Mapper.all.each do |mapper|
@@ -40,6 +42,8 @@ module CodeOwnership
40
42
 
41
43
  sig { params(team: T.any(CodeTeams::Team, String)).returns(String) }
42
44
  def for_team(team)
45
+ Private.load_configuration!
46
+
43
47
  team = T.must(CodeTeams.find(team)) if team.is_a?(String)
44
48
  ownership_information = T.let([], T::Array[String])
45
49
 
@@ -87,6 +91,7 @@ module CodeOwnership
87
91
  autocorrect: true,
88
92
  stage_changes: true
89
93
  )
94
+ Private.load_configuration!
90
95
  tracked_file_subset = Private.tracked_files & files
91
96
  Private.validate!(files: tracked_file_subset, autocorrect: autocorrect, stage_changes: stage_changes)
92
97
  end
@@ -144,20 +149,23 @@ module CodeOwnership
144
149
  end
145
150
  private_class_method(:backtrace_with_ownership)
146
151
 
147
- sig { params(klass: T.nilable(T.any(Class, Module))).returns(T.nilable(::CodeTeams::Team)) }
152
+ sig { params(klass: T.nilable(T.any(Class, Module, String))).returns(T.nilable(::CodeTeams::Team)) }
148
153
  def for_class(klass)
149
154
  @memoized_values ||= T.let(@memoized_values, T.nilable(T::Hash[String, T.nilable(::CodeTeams::Team)]))
150
155
  @memoized_values ||= {}
156
+
157
+ klass_string = klass.to_s
158
+
151
159
  # We use key because the memoized value could be `nil`
152
- if !@memoized_values.key?(klass.to_s)
153
- path = Private.path_from_klass(klass)
160
+ if !@memoized_values.key?(klass_string)
161
+ path = Private.path_from_klass_string(klass_string)
154
162
  return nil if path.nil?
155
163
 
156
164
  value_to_memoize = for_file(path)
157
- @memoized_values[klass.to_s] = value_to_memoize
165
+ @memoized_values[klass_string] = value_to_memoize
158
166
  value_to_memoize
159
167
  else
160
- @memoized_values[klass.to_s]
168
+ @memoized_values[klass_string]
161
169
  end
162
170
  end
163
171
 
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.32.0
4
+ version: 1.32.2
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-03-08 00:00:00.000000000 Z
11
+ date: 2023-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_teams