first commit

This commit is contained in:
2020-10-25 10:00:59 +03:00
commit 0bd6f67397
80 changed files with 4741 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
package command
import (
"context"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/input/option"
"gitoa.ru/go-4devs/console/output"
)
func Args() *console.Command {
return &console.Command{
Name: "fdevs:console:arg",
Description: "Understanding how Console Arguments and Options Are Handled",
Configure: func(ctx context.Context, def *input.Definition) error {
def.SetOptions(
option.Bool("foo", "foo option", option.Short("f")),
input.NewOption("bar", "required bar option", option.Required, option.Short("b")),
input.NewOption("cat", "cat option", option.Short("c")),
)
return nil
},
Execute: func(ctx context.Context, in input.Input, out output.Output) error {
out.Println(ctx, "foo: <info>", in.Option(ctx, "foo").Bool(), "</info>")
out.Println(ctx, "bar: <info>", in.Option(ctx, "bar").String(), "</info>")
out.Println(ctx, "cat: <info>", in.Option(ctx, "cat").String(), "</info>")
return nil
},
}
}

View File

@@ -0,0 +1,36 @@
package command
import (
"context"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/input/argument"
"gitoa.ru/go-4devs/console/output"
)
func CreateUser(required bool) *console.Command {
return &console.Command{
Name: "app:create-user",
Description: "Creates a new user.",
Help: "This command allows you to create a user...",
Configure: func(ctx context.Context, cfg *input.Definition) error {
var opts []func(*input.Argument)
if required {
opts = append(opts, argument.Required)
}
cfg.
SetArgument("username", "The username of the user.", argument.Required).
SetArgument("password", "User password", opts...)
return nil
},
Execute: func(ctx context.Context, in input.Input, out output.Output) error {
// outputs a message followed by a "\n"
out.Println(ctx, "User Creator")
out.Println(ctx, "Username: ", in.Argument(ctx, "username").String())
return nil
},
}
}

View File

@@ -0,0 +1,30 @@
package command_test
import (
"bytes"
"context"
"testing"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/example/pkg/command"
"gitoa.ru/go-4devs/console/input/array"
"gitoa.ru/go-4devs/console/output/writer"
)
func TestCreateUser(t *testing.T) {
ctx := context.Background()
in := array.New(array.Argument("username", "andrey"))
buf := bytes.Buffer{}
out := writer.Buffer(&buf)
err := console.Run(ctx, command.CreateUser(false), in, out)
if err != nil {
t.Fatalf("expect nil err, got :%s", err)
}
expect := "User Creator\nUsername: andrey\n"
if expect != buf.String() {
t.Errorf("expect: %s, got:%s", expect, buf.String())
}
}

View File

@@ -0,0 +1,34 @@
package command
import (
"context"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/input/argument"
"gitoa.ru/go-4devs/console/output"
)
func Hello() *console.Command {
return &console.Command{
Name: "fdevs:console:hello",
Description: "example hello command",
Execute: func(ctx context.Context, in input.Input, out output.Output) error {
name := in.Argument(ctx, "name").String()
out.Println(ctx, "<error>Hello</error> <info>", name, "</info>")
out.Info(ctx, "same trace info\n")
out.Debug(ctx, "have some question?\n")
out.Trace(ctx, "this message shows with -vvv\n")
return nil
},
Configure: func(_ context.Context, def *input.Definition) error {
def.SetArguments(
input.NewArgument("name", "Same name", argument.Default("World")),
)
return nil
},
}
}

View File

@@ -0,0 +1,22 @@
package command
import (
"context"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/output"
)
func Hidden() *console.Command {
return &console.Command{
Name: "fdevs:console:hidden",
Description: "hidden command exmale",
Hidden: true,
Execute: func(ctx context.Context, _ input.Input, out output.Output) error {
out.Println(ctx, "<info> call hidden command</info>")
return nil
},
}
}

View File

@@ -0,0 +1,50 @@
package command
import (
"context"
"time"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/input/option"
"gitoa.ru/go-4devs/console/output"
"gitoa.ru/go-4devs/console/validator"
)
const defaultTimeout = time.Second * 30
// Long example of a command that takes a long time to run.
func Long() *console.Command {
return &console.Command{
Name: "fdevs:command:long",
Execute: func(ctx context.Context, in input.Input, out output.Output) error {
timeout := in.Option(ctx, "timeout").Duration()
timer := time.NewTimer(timeout)
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case t := <-ticker.C:
out.Println(ctx, "ticker: <info>", t, "</info>")
case <-timer.C:
out.Println(ctx, "<error>stop timer</error>")
return nil
case <-ctx.Done():
out.Println(ctx, "<info>cancel context</info>")
return nil
}
}
},
Configure: func(ctx context.Context, def *input.Definition) error {
def.SetOptions(option.Duration("timeout", "set duration run command",
option.Default(defaultTimeout),
option.Short("t"),
option.Valid(validator.NotBlank(input.ValueDuration)),
))
return nil
},
}
}

View File

@@ -0,0 +1,21 @@
package command
import (
"context"
"gitoa.ru/go-4devs/console"
"gitoa.ru/go-4devs/console/input"
"gitoa.ru/go-4devs/console/output"
)
func Namespace() *console.Command {
return &console.Command{
Name: "app:start",
Description: "example command in other namespace",
Execute: func(ctx context.Context, _ input.Input, out output.Output) error {
out.Println(ctx, "example command in other namespace")
return nil
},
}
}