mirror of
https://github.com/onyx-and-iris/lottery-cli.git
synced 2026-08-17 00:34:25 +00:00
add --kind flag, it allows you to configure the lottery kind directly, skipping the selection prompt
update the README with more examples.
This commit is contained in:
30
README.md
30
README.md
@@ -20,6 +20,7 @@ go install github.com/onyx-and-iris/lottery-cli/cmd/lottery@latest
|
|||||||
|
|
||||||
*flags*
|
*flags*
|
||||||
|
|
||||||
|
- --kind/-k: The kind of lottery.
|
||||||
- --count/-c: Number of draws to generate.
|
- --count/-c: Number of draws to generate.
|
||||||
- --count-prompt/-C: Prompt for the number of draws to generate.
|
- --count-prompt/-C: Prompt for the number of draws to generate.
|
||||||
> Note. If both --count and --count-prompt are passed the count prompt will win.
|
> Note. If both --count and --count-prompt are passed the count prompt will win.
|
||||||
@@ -29,19 +30,42 @@ go install github.com/onyx-and-iris/lottery-cli/cmd/lottery@latest
|
|||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export LOTTERY_KIND=lotto
|
||||||
export LOTTERY_COUNT=3
|
export LOTTERY_COUNT=3
|
||||||
export LOTTERY_COUNT_PROMPT=false
|
export LOTTERY_COUNT_PROMPT=false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Use
|
## Use
|
||||||
|
|
||||||
There are no subcommands, just run the CLI directly passing any desired flags:
|
Run with the selection prompt without prompting for a count:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
lottery --count=3
|
lottery
|
||||||
```
|
```
|
||||||
|
|
||||||
You will then be entered into the selection prompt.
|
Run with the selection prompt but also prompt for a count:
|
||||||
|
|
||||||
|
```console
|
||||||
|
lottery --count-prompt
|
||||||
|
```
|
||||||
|
|
||||||
|
Run with the selection prompt but pass in the count directly:
|
||||||
|
|
||||||
|
```console
|
||||||
|
lottery --count=4
|
||||||
|
```
|
||||||
|
|
||||||
|
Run a single draw directly:
|
||||||
|
|
||||||
|
```console
|
||||||
|
lottery -k=euromillions
|
||||||
|
```
|
||||||
|
|
||||||
|
Run multiple draws directly:
|
||||||
|
|
||||||
|
```console
|
||||||
|
lottery -k=euromillions -c=3
|
||||||
|
```
|
||||||
|
|
||||||
## Special Thanks
|
## Special Thanks
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,19 @@ func versionFromBuild() string {
|
|||||||
var cmd = &cobra.Command{
|
var cmd = &cobra.Command{
|
||||||
Use: "lottery",
|
Use: "lottery",
|
||||||
Short: "A CLI for National Lottery games.",
|
Short: "A CLI for National Lottery games.",
|
||||||
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
kindStr := viper.GetString("kind")
|
||||||
|
if kindStr != "" {
|
||||||
|
_, err := lottery.ParseKind(kindStr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
var selected string
|
kindStr := viper.GetString("kind")
|
||||||
|
if kindStr == "" {
|
||||||
form := huh.NewForm(
|
form := huh.NewForm(
|
||||||
huh.NewGroup(
|
huh.NewGroup(
|
||||||
huh.NewSelect[string]().
|
huh.NewSelect[string]().
|
||||||
@@ -46,15 +56,16 @@ var cmd = &cobra.Command{
|
|||||||
huh.NewOption("Thunderball", "thunderball"),
|
huh.NewOption("Thunderball", "thunderball"),
|
||||||
huh.NewOption("Powerball", "powerball"),
|
huh.NewOption("Powerball", "powerball"),
|
||||||
).
|
).
|
||||||
Value(&selected),
|
Value(&kindStr),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
err := form.Run()
|
err := form.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
kind, err := lottery.ParseKind(selected)
|
kind, err := lottery.ParseKind(kindStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -101,6 +112,7 @@ var cmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
cmd.Flags().StringP("kind", "k", "", "Lottery kind to generate draws for.")
|
||||||
cmd.Flags().IntP("count", "c", 1, "Number of draws to generate.")
|
cmd.Flags().IntP("count", "c", 1, "Number of draws to generate.")
|
||||||
cmd.Flags().BoolP("count-prompt", "C", false, "Prompt for the number of draws to generate.")
|
cmd.Flags().BoolP("count-prompt", "C", false, "Prompt for the number of draws to generate.")
|
||||||
|
|
||||||
|
|||||||
5
kinds.go
5
kinds.go
@@ -25,6 +25,9 @@ func ParseKind(kind string) (Kind, error) {
|
|||||||
case "powerball":
|
case "powerball":
|
||||||
return KindPowerball, nil
|
return KindPowerball, nil
|
||||||
default:
|
default:
|
||||||
return "", fmt.Errorf("invalid lottery kind: %s", kind)
|
return "", fmt.Errorf(
|
||||||
|
"invalid lottery kind: %s, must be one of: lotto, euromillions, setforlife, thunderball, powerball",
|
||||||
|
kind,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
util.go
4
util.go
@@ -8,8 +8,8 @@ import (
|
|||||||
// drawUnique returns count unique numbers in the range [1, max].
|
// drawUnique returns count unique numbers in the range [1, max].
|
||||||
// It uses the rand.Perm function to generate a random permutation of numbers and selects the first count numbers from it.
|
// It uses the rand.Perm function to generate a random permutation of numbers and selects the first count numbers from it.
|
||||||
// The result is sorted before being returned.
|
// The result is sorted before being returned.
|
||||||
func drawUnique(count, max int) []int {
|
func drawUnique(count, maxNum int) []int {
|
||||||
perm := rand.Perm(max)
|
perm := rand.Perm(maxNum)
|
||||||
result := make([]int, count)
|
result := make([]int, count)
|
||||||
for i := range result {
|
for i := range result {
|
||||||
result[i] = perm[i] + 1
|
result[i] = perm[i] + 1
|
||||||
|
|||||||
Reference in New Issue
Block a user