Skip to content

Commit 0ae6180

Browse files
author
Katrina Owen
authored
Merge pull request #818 from exercism/download-identifier
Extract logic for the URI variable identifying the exercise to download
2 parents 936bbc7 + 7c6cd9d commit 0ae6180

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

cmd/download.go

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,40 @@ func runDownload(cfg config.Config, flags *pflag.FlagSet, args []string) error {
5454
return err
5555
}
5656

57-
uuid, err := flags.GetString("uuid")
57+
track, err := flags.GetString("track")
5858
if err != nil {
5959
return err
6060
}
61-
slug, err := flags.GetString("exercise")
61+
62+
team, err := flags.GetString("team")
6263
if err != nil {
6364
return err
6465
}
65-
if uuid != "" && slug != "" || uuid == slug {
66-
return errors.New("need an --exercise name or a solution --uuid")
67-
}
6866

69-
track, err := flags.GetString("track")
67+
identifier, err := downloadIdentifier(flags)
7068
if err != nil {
7169
return err
7270
}
71+
url := fmt.Sprintf("%s/solutions/%s", usrCfg.GetString("apibaseurl"), identifier)
7372

74-
team, err := flags.GetString("team")
73+
client, err := api.NewClient(usrCfg.GetString("token"), usrCfg.GetString("apibaseurl"))
7574
if err != nil {
7675
return err
7776
}
7877

79-
param := "latest"
80-
if uuid != "" {
81-
param = uuid
78+
req, err := client.NewRequest("GET", url, nil)
79+
if err != nil {
80+
return err
8281
}
83-
url := fmt.Sprintf("%s/solutions/%s", usrCfg.GetString("apibaseurl"), param)
8482

85-
client, err := api.NewClient(usrCfg.GetString("token"), usrCfg.GetString("apibaseurl"))
83+
uuid, err := flags.GetString("uuid")
8684
if err != nil {
8785
return err
8886
}
89-
90-
req, err := client.NewRequest("GET", url, nil)
87+
slug, err := flags.GetString("exercise")
9188
if err != nil {
9289
return err
9390
}
94-
9591
if uuid == "" {
9692
q := req.URL.Query()
9793
q.Add("exercise_id", slug)
@@ -252,6 +248,27 @@ func (dp downloadPayload) metadata() workspace.ExerciseMetadata {
252248
}
253249
}
254250

251+
// downloadIdentifier is the variable for the URI to initiate an exercise download.
252+
func downloadIdentifier(flags *pflag.FlagSet) (string, error) {
253+
uuid, err := flags.GetString("uuid")
254+
if err != nil {
255+
return "", err
256+
}
257+
slug, err := flags.GetString("exercise")
258+
if err != nil {
259+
return "", err
260+
}
261+
if uuid != "" && slug != "" || uuid == slug {
262+
return "", errors.New("need an --exercise name or a solution --uuid")
263+
}
264+
265+
identifier := "latest"
266+
if uuid != "" {
267+
identifier = uuid
268+
}
269+
return identifier, nil
270+
}
271+
255272
func setupDownloadFlags(flags *pflag.FlagSet) {
256273
flags.StringP("uuid", "u", "", "the solution UUID")
257274
flags.StringP("track", "t", "", "the track ID")

0 commit comments

Comments
 (0)