From 7126ef97a4e24eeeaa69be9b506870128662857e Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 10 Mar 2025 14:53:59 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20Make=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the important one --- make.go | 15 +++++++++++++++ make_test.go | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 make.go create mode 100644 make_test.go diff --git a/make.go b/make.go new file mode 100644 index 0000000..3cd537a --- /dev/null +++ b/make.go @@ -0,0 +1,15 @@ +package nomino + +import "fmt" + +// Make generates a random filename. The behavior can be controlled by specifying Options +// In general, the final filename will be [prefix]_[generated_string]_[original_filename]_[suffix].[extension]. +// If the name generator returns an error (generally, it shouldn't), that will be returned instead. +func Make(conf Config) (string, error) { + name, err := conf.generator() + if err != nil { + return "", err + } + + return fmt.Sprintf("%s%s%s%s%s", conf.prefix, name, conf.original, conf.suffix, conf.original), nil +} diff --git a/make_test.go b/make_test.go new file mode 100644 index 0000000..e9cc006 --- /dev/null +++ b/make_test.go @@ -0,0 +1,23 @@ +package nomino + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestMake(t *testing.T) { + conf := NewConfig(WithGenerator(func() (string, error) { return "abc", nil })) + st, err := Make(conf) + assert.NoError(t, err) + assert.Equal(t, "abc", st) +} + +func TestMakeErr(t *testing.T) { + retErr := errors.New("oops") + conf := NewConfig(WithGenerator(func() (string, error) { return "foobar", retErr })) + st, err := Make(conf) + assert.Zero(t, st) + assert.ErrorIs(t, err, retErr) +}