forked from krasnoukhov/helloworldquiz
/
main.go
82 lines (67 loc) · 2.06 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package variant
import (
"fmt"
// "io"
"io/ioutil"
// "crypto/md5"
"math/rand"
// "errors"
// "github.com/krasnoukhov/beego"
"github.com/kylelemons/go-gypsy/yaml"
)
var (
Objects map[string]*Object
Keys []string
)
type Object struct {
Key string `json:"-"`
Name string `json:"-"`
Snippet string `json:"snippet"`
Variants []string `json:"-"`
Options []*Option `json:"options"`
}
type DumpObject struct {
Key string `json:"key"`
Name string `json:"name"`
Snippet string `json:"snippet"`
}
type Option struct {
Key string `json:"key"`
Name string `json:"name"`
}
func init() {
Objects = make(map[string]*Object)
Keys = []string{}
file, _ := yaml.ReadFile("models/variant/data.yml")
for key, node := range file.Root.(yaml.Map) {
name := node.(yaml.Map)["name"].(yaml.Scalar).String()
source, err := ioutil.ReadFile(fmt.Sprintf("models/variant/data/%s", key))
snippet := ""
if err == nil {
snippet = string(source[:])
}
variants := []string{}
variants = append(variants, key)
if list, ok := node.(yaml.Map)["variants"]; ok {
for _, variant := range list.(yaml.List) {
variants = append(variants, variant.(yaml.Scalar).String())
}
}
Objects[key] = &Object{ key, name, snippet, variants, []*Option{} }
Keys = append(Keys, key)
}
}
func ConvertToDumpObject(object *Object) (response *DumpObject) {
return &DumpObject{ object.Key, object.Name, object.Snippet }
}
func Shuffle(object *Object) (response *Object) {
response = &Object{ object.Key, object.Name, object.Snippet, append([]string{}, object.Variants...), []*Option{} }
for i := range response.Variants {
j := rand.Intn(i + 1)
response.Variants[i], response.Variants[j] = response.Variants[j], response.Variants[i]
}
for _, variant := range response.Variants {
response.Options = append(response.Options, &Option{ Objects[variant].Key, Objects[variant].Name })
}
return response
}