Skip to content

Commit aae1479

Browse files
committed
Allow Dependency to preserve resolver key and source
1 parent 1e95757 commit aae1479

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

src/dependency.cr

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,29 @@ module Shards
77
property name : String
88
property resolver : Resolver
99
property requirement : Requirement
10+
# resolver's key and source are normalized. We preserve the key and source to be used
11+
# in the shard.yml file in these field. This is used to generate the shard.yml file
12+
# in a more human-readable way.
13+
# A Dependency can still be created without them, but it will not be possible to
14+
# generate the shard.yml file.
15+
property! resolver_key : String
16+
property! source : String
17+
18+
def initialize(@name : String, @resolver : Resolver, @requirement : Requirement = Any, @resolver_key : String? = nil, @source : String? = nil)
19+
end
20+
21+
# Parse a dependency from a CLI argument
22+
def self.from_cli(value : String) : Dependency
23+
parts = parts_from_cli(value)
24+
25+
# We need to check the actual shard name to create a dependency.
26+
# This requires getting the actual spec file from some matching version.
27+
resolver = Resolver.find_resolver(parts[:resolver_key], "unknown", parts[:source])
28+
version = resolver.versions_for(parts[:requirement]).first || raise Shards::Error.new("No versions found for dependency: #{value}")
29+
spec = resolver.spec(version)
30+
name = spec.name || raise Shards::Error.new("No name found for dependency: #{value}")
1031

11-
def initialize(@name : String, @resolver : Resolver, @requirement : Requirement = Any)
32+
Dependency.new(name, resolver, parts[:requirement], parts[:resolver_key], parts[:source])
1233
end
1334

1435
# :nodoc:
@@ -120,6 +141,7 @@ module Shards
120141
end
121142
end
122143

144+
# Used to generate the shard.lock file.
123145
def to_yaml(yaml : YAML::Builder)
124146
yaml.scalar name
125147
yaml.mapping do
@@ -129,6 +151,16 @@ module Shards
129151
end
130152
end
131153

154+
# Used to generate the shard.yml file.
155+
def to_shard_yaml(yaml : YAML::Builder)
156+
yaml.scalar name
157+
yaml.mapping do
158+
yaml.scalar resolver_key
159+
yaml.scalar source
160+
requirement.to_yaml(yaml)
161+
end
162+
end
163+
132164
def as_package?
133165
version =
134166
case req = @requirement

0 commit comments

Comments
 (0)