@@ -7,8 +7,29 @@ module Shards
7
7
property name : String
8
8
property resolver : Resolver
9
9
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 } " )
10
31
11
- def initialize ( @ name : String , @ resolver : Resolver , @requirement : Requirement = Any )
32
+ Dependency .new( name, resolver, parts[ :requirement ], parts[ :resolver_key ], parts[ :source ] )
12
33
end
13
34
14
35
# :nodoc:
@@ -120,6 +141,7 @@ module Shards
120
141
end
121
142
end
122
143
144
+ # Used to generate the shard.lock file.
123
145
def to_yaml (yaml : YAML ::Builder )
124
146
yaml.scalar name
125
147
yaml.mapping do
@@ -129,6 +151,16 @@ module Shards
129
151
end
130
152
end
131
153
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
+
132
164
def as_package ?
133
165
version =
134
166
case req = @requirement
0 commit comments