Skip to content

Commit 5194914

Browse files
committed
Fix typechecking errors
1 parent 7bc323c commit 5194914

File tree

2 files changed

+41
-23
lines changed

2 files changed

+41
-23
lines changed

lib/package_url.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,14 @@ def initialize(type:, name:, namespace: nil, version: nil, qualifiers: nil, subp
7272
# @raise [InvalidPackageURL] If the string is not a valid package URL.
7373
# @return [PackageURL]
7474
def self.parse(string)
75-
components = {}
75+
components = {
76+
type: nil,
77+
namespace: nil,
78+
name: nil,
79+
version: nil,
80+
qualifiers: nil,
81+
subpath: nil
82+
}
7683

7784
# Split the purl string once from right on '#'
7885
# - The left side is the remainder
@@ -195,8 +202,16 @@ def self.parse(string)
195202
components[:namespace] = nil
196203
end
197204

198-
new(type: components[:type],
199-
name: components[:name],
205+
# Ensure type and name are not nil before creating the PackageURL instance
206+
raise InvalidPackageURL, 'missing package type' if components[:type].nil?
207+
raise InvalidPackageURL, 'missing package name' if components[:name].nil?
208+
209+
# Create a new PackageURL with validated components
210+
type = components[:type] || '' # This ensures type is never nil
211+
name = components[:name] || '' # This ensures name is never nil
212+
213+
new(type: type,
214+
name: name,
200215
namespace: components[:namespace],
201216
version: components[:version],
202217
qualifiers: components[:qualifiers],

sig/package_url.rbs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
class PackageURL
22
VERSION: String
33

4+
class InvalidPackageURL < ArgumentError
5+
end
6+
47
def scheme: () -> String
58
attr_reader type: String
69
attr_reader namespace: String?
@@ -9,32 +12,32 @@ class PackageURL
912
attr_reader qualifiers: Hash[String, String]?
1013
attr_reader subpath: String?
1114

12-
def initialize: (type: String `type`,
13-
?namespace: String? namespace,
14-
name: String name,
15-
?version: String? version,
16-
?qualifiers: Hash[String, String]? qualifiers,
15+
def initialize: (type: String `type`,
16+
?namespace: String? namespace,
17+
name: String name,
18+
?version: String? version,
19+
?qualifiers: Hash[String, String]? qualifiers,
1720
?subpath: String? subpath) -> void
18-
19-
def self.parse: (String string) -> PackageURL?
20-
21-
def to_h: () -> { scheme: String,
22-
type: String,
23-
namespace: String?,
24-
name: String?,
25-
version: String?,
26-
qualifiers: Hash[String, String]?,
21+
22+
def self.parse: (String string) -> PackageURL
23+
24+
def to_h: () -> { scheme: String,
25+
type: String,
26+
namespace: String?,
27+
name: String?,
28+
version: String?,
29+
qualifiers: Hash[String, String]?,
2730
subpath: String? }
2831

2932
def to_s: () -> String
3033

3134
def deconstruct: () -> Array[String | Hash[String, String] | nil]
3235

33-
def deconstruct_keys: (Array[Symbol] keys) -> { scheme: String,
34-
type: String,
35-
namespace: String?,
36-
name: String?,
37-
version: String?,
38-
qualifiers: Hash[String, String]?,
36+
def deconstruct_keys: (Array[Symbol] keys) -> { scheme: String,
37+
type: String,
38+
namespace: String?,
39+
name: String?,
40+
version: String?,
41+
qualifiers: Hash[String, String]?,
3942
subpath: String? }
4043
end

0 commit comments

Comments
 (0)