Skip to content

Commit 7f39ee4

Browse files
committed
Allow user to optionally fetch a specific exercise.
This is getting pretty tangled. There has to be a better way of structuring this.
1 parent c8c6b68 commit 7f39ee4

4 files changed

Lines changed: 54 additions & 8 deletions

File tree

api.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import (
1212
const VERSION = "1.2.3"
1313

1414
var FetchEndpoints = map[string]string{
15-
"current": "/api/v1/user/assignments/current",
16-
"next": "/api/v1/user/assignments/next",
17-
"demo": "/api/v1/assignments/demo",
15+
"current": "/api/v1/user/assignments/current",
16+
"next": "/api/v1/user/assignments/next",
17+
"demo": "/api/v1/assignments/demo",
18+
"exercise": "/api/v1/assignments",
1819
}
1920

2021
type submitResponse struct {

fetch_endpoint.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func FetchEndpoint(args []string) string {
8+
if len(args) == 0 {
9+
return FetchEndpoints["current"]
10+
} else {
11+
return fmt.Sprintf("%s/%s/%s", FetchEndpoints["exercise"], args[0], args[1])
12+
}
13+
}

fetch_endpoint_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"testing"
6+
)
7+
8+
func TestFetchCurrentEndpoint(t *testing.T) {
9+
expected := "/api/v1/user/assignments/current"
10+
actual := FetchEndpoint([]string{})
11+
assert.Equal(t, expected, actual)
12+
}
13+
14+
func TestFetchExerciseEndpoint(t *testing.T) {
15+
expected := "/api/v1/assignments/language/slug"
16+
actual := FetchEndpoint([]string{"language", "slug"})
17+
assert.Equal(t, expected, actual)
18+
}

main.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,29 @@ func main() {
6969
{
7070
Name: "fetch",
7171
ShortName: "f",
72-
Usage: "Fetch current assignment from exercism.io",
72+
Usage: "Fetch assignments from exercism.io",
7373
Action: func(c *cli.Context) {
74+
if len(c.Args()) != 0 && len(c.Args()) != 2 {
75+
fmt.Println("Usage: exercism fetch\n or: exercism fetch LANGUAGE EXERCISE")
76+
return
77+
}
78+
7479
config, err := configuration.FromFile(configuration.HomeDir())
80+
7581
if err != nil {
76-
fmt.Println("Are you sure you are logged in? Please login again.")
77-
return
82+
if len(c.Args()) == 0 {
83+
fmt.Println("Are you sure you are logged in? Please login again.")
84+
return
85+
} else {
86+
config, err = configuration.Demo()
87+
if err != nil {
88+
fmt.Println(err)
89+
return
90+
}
91+
}
7892
}
79-
assignments, err := FetchAssignments(config,
80-
FetchEndpoints["current"])
93+
94+
assignments, err := FetchAssignments(config, FetchEndpoint(c.Args()))
8195
if err != nil {
8296
fmt.Println(err)
8397
return

0 commit comments

Comments
 (0)