This commit is contained in:
Andrea Fazzi 2024-05-22 20:40:13 +02:00
commit ebd20b53ed
2 changed files with 123 additions and 0 deletions

View file

@ -0,0 +1,62 @@
{{define "description"}}
# Probo
`probo` is a quiz management and administration system designed for
command line and text interface enthusiasts. `probo` aims to highlight
themes such as privacy, interoperability, accessibility,
decentralization, and quick usage speed.
`probo` organizes information in plain text files and folders so that
data can be easily revised through version control systems. Quizzes
can be written in Markdown format, filters use the `jq` language, exam
sessions, participants, and their quiz answers are JSON files.
`probo` contains a built-in web server that allows quizzes to be
administered to participants and their answers received.
`probo` is a self-contained application that can be distributed through
a simple executable containing all necessary assets for its operation.
# Quickstart
1. Initialize the working directory
```
probo init
```
2. Create our first quiz.
```
probo create quiz > data/quizzes/quiz_1.md
```
3. Create two participants.
```
probo create participant > data/participants/john.json
probo create participant > data/participants/mary.json
```
4. Filter participants and quizzes (in this case, all participants and
all quizzes present in the store will be selected) and create an exam
session.
```
probo filter participant -f '.' | probo filter quizzes -f '.' | probo create session --name="My First Session" > data/sessions/my_session.json
```
5. Run the web server to allow participants to respond.
```
probo serve
```
6. Share the *qrcode* generated from the previous step with the participants and wait for them to finish responding.
7. Explore the results.
```
probo filter responses -f '.' | probo rank
```
{{end}}

61
embed/embed.go~ Normal file
View file

@ -0,0 +1,61 @@
package embed
import (
"embed"
"io"
"io/fs"
"os"
"path/filepath"
)
var (
//go:embed templates/*
Templates embed.FS
Assets embed.FS
//go:embed data/*
Data embed.FS
)
func CopyToWorkingDirectory(data embed.FS) error {
currentDir, err := os.Getwd()
if err != nil {
return err
}
if err := fs.WalkDir(data, ".", func(path string, info fs.DirEntry, err error) error {
if err != nil {
return err
}
fullPath := path
if info.IsDir() {
dirPath := filepath.Join(currentDir, path)
if err := os.MkdirAll(dirPath, 0755); err != nil {
return err
}
} else {
srcFile, err := data.Open(fullPath)
if err != nil {
return err
}
dstFile, err := os.Create(filepath.Join(currentDir, path))
if err != nil {
return err
}
defer dstFile.Close()
_, err = io.Copy(dstFile, srcFile)
if err != nil {
return err
}
}
return nil
}); err != nil {
return err
}
return nil
}