diff --git a/CHANGELOG.md b/CHANGELOG.md index c21a656..c2674b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,96 +1,84 @@ # Changelog -### [0.5.0] - 2025-03-19 - ✨ Different types of UUIDs +### [0.4.0] - 2025-03-15 #### Features -- ✨ Allow for different types of UUIDs in the UUID `Generator` -- ✨ `Config.AddOptions` method -- ✨ `Generator.MakeWithConfig` method - -#### Support - -- 📝 Some better examples` - -### [0.4.0] - 2025-03-15 - ✨ More Generators, and `Generator.Make` method - -#### Features - -- ✨ Add Random Generator -- ✨ Add Make method to Generator -- ✨ Add MultiGeneratorRandomOrder +- Add Random Generator +- Add Make method to Generator +- Add MultiGeneratorRandomOrder #### Changes -- 💔 Breaking changes: Replace HashType with Hasher: This supports all crypto.Hash +- Replace HashType with Hasher: This supports all crypto.Hash #### Support -- 📝 Add some missing doc comments +- Add some missing doc comments -### [0.3.0] - 2025-03-14 - ♻️ Refactor multiple Generators into one +### [0.3.0] - 2025-03-14 #### Features -- ♻️ Simplified multiple `Generator` functions to single function with options -- 📝 Added a lot of examples for docs -- ✨ Can add extra `Option`s to `Make` +- Simplified multiple Generator functions to single function with options +- Added a lot of examples for docs +- Can add extra Options to Make Multiple breaking changes around Generators. #### Bugs -- 🐛 Fixed date formats +- Fixed date formats -### [0.2.1] - 2025-03-14 - ✨ New Hash Generator +### [0.2.1] - 2025-03-14 #### Features -- ✨ Add Hash Generator +- Add Hash Generator #### Dev Tooling -- 🛠 Added a task to serve docs -- 🛠 Added tasts to check code complexity +- Added a task to serve docs +- Added tasts to check code complexity #### Miscellaneous -- 💚 Fixed some `go vet` complaints +- Fixed some `go vet` complaints -### [0.2.0] - 2025-03-14 - ✨ New `Generator`s +### [0.2.0] - 2025-03-14 #### Features -- ✨ Add `IncrementalFormat`* Generators -- ✨ Add `Slug`* Generators -- ✨ Add `WithOriginalSlug`* Options -- 💔 Change signature of `Generator` function +- Add `IncrementalFormat`* Generators +- Add `Slug`* Generators +- Add `WithOriginalSlug`* Options +- Change signature of `Generator` function Note that this last change **is** a breaking change from 0.0.3, but only for custom Generators. -## [0.0.3] - 2025-03-11 - ✨ `WithSeparator` +## [0.0.3] - 2025-03-11 ### Features -- ✨ Added `WithSeparator` to allow for different separators between the parts of the generated filename. +- Added `WithSeparator` to allow for different separators between the parts of the generated filename. -## [0.0.2] - 2025-03-11 - 🐛 Bugfix +## [0.0.2] - 2025-03-11 Bugfix release ### Fixes -- 🐛 Extension being ignored. Original included twice. +- Extension being ignored. Original included twice. -## [0.0.1] - 2025-03-10 - 🚀 Initial Release +## [0.0.1] - 2025-03-10 Initial Release! Hope you like it! ### Added -- ✨ `nomino.Make`` -- ✨ `nomino.Config` -- ✨ `nomino.Generator` +- nomino.Make +- nomino.Config +- nomino.Generator + We needs more of these until I'm ready -- ✅ Lots of tests! +- Lots of tests! diff --git a/config.go b/config.go index c889a06..a7da5f5 100644 --- a/config.go +++ b/config.go @@ -14,18 +14,10 @@ func NewConfig(options ...Option) Config { conf := Config{ extension: ".txt", separator: "_", - generator: UUID(nil), + generator: uuidGen, } for _, opt := range options { opt(&conf) } return conf } - -// AddOptions creates a new Config with options added. -func (c Config) AddOptions(options ...Option) Config { - for _, opt := range options { - opt(&c) - } - return c -} diff --git a/config_test.go b/config_test.go index f6ed21d..adc35e6 100644 --- a/config_test.go +++ b/config_test.go @@ -20,12 +20,3 @@ func TestNewConfWithOpts(t *testing.T) { assert.Equal(t, "", c.extension) assert.Equal(t, "foobar", c.prefix) } - -func TestConfAddOpts(t *testing.T) { - c := Config{original: "hi"} - c2 := c.AddOptions(WithOriginalSlug("Hello, my dear"), WithPrefix("yo")) - assert.Equal(t, "", c.prefix) - assert.Equal(t, "hi", c.original) - assert.Equal(t, "hello-my-dear", c2.original) - assert.Equal(t, "yo", c2.prefix) -} diff --git a/gen_rand.go b/gen_rand.go index de71723..8b4ce5a 100644 --- a/gen_rand.go +++ b/gen_rand.go @@ -8,44 +8,17 @@ import ( "github.com/google/uuid" ) -// UUIDer is an interface for generating UUIDs. -// It is recommended that you use either the UUIDv4 or UUIDv7 variables. -type UUIDer interface { - UUID() (uuid.UUID, error) +func uuidGen(*Config) (string, error) { + u, err := uuid.NewRandom() + if err != nil { + return "", err + } + return u.String(), nil } -// UUIDFunc is a function that generates a UUID. -type UUIDFunc func() (uuid.UUID, error) - -// UUID allows UUIDFunc to be used as a UUIDer. -func (u UUIDFunc) UUID() (uuid.UUID, error) { - return u() -} - -var ( - // UUIDv1. You probably don't want to use this. It is included for completeness sake. - UUIDv1 = UUIDFunc(uuid.NewUUID) - // UUIDv4 is the default. - UUIDv4 = UUIDFunc(uuid.NewRandom) - // UUIDv6 is primarily a replacement for UUIDv1. You probably should use 4 or 7. - UUIDv6 = UUIDFunc(uuid.NewV6) - // UUIDv7 should be used if you want it sortable by time. - UUIDv7 = UUIDFunc(uuid.NewV7) -) - -// UUID generates a UUID. If nil.is passed as an argument, -// a UUIDv4 is generated. -func UUID(u UUIDer) Generator { - if u == nil { - u = UUIDv4 - } - return func(*Config) (string, error) { - uu, err := u.UUID() - if err != nil { - return "", err - } - return uu.String(), nil - } +// UUID generates a UUIDv4. +func UUID() Generator { + return uuidGen } type randConf struct { diff --git a/gen_rand_examples_test.go b/gen_rand_examples_test.go index 29737fa..45cb7fe 100644 --- a/gen_rand_examples_test.go +++ b/gen_rand_examples_test.go @@ -7,34 +7,30 @@ import ( ) func ExampleUUID() { - gen := nomino.UUID(nil) + option := nomino.WithGenerator(nomino.UUID()) - str, _ := gen.Make() + str, _ := nomino.Make(nomino.NewConfig(option)) fmt.Println(str) - str, _ = gen.Make() - fmt.Println(str) -} - -func ExampleUUID_v7() { - gen := nomino.UUID(nomino.UUIDv7) - - str, _ := gen.Make() + str, _ = nomino.Make(nomino.NewConfig(option)) fmt.Println(str) - str, _ = gen.Make() - fmt.Println(str) - - str, _ = gen.Make() + str, _ = nomino.Make(nomino.NewConfig(option)) fmt.Println(str) } func ExampleRandom() { - str, _ := nomino.Random().Make() + option := nomino.WithGenerator(nomino.Random()) + + str, _ := nomino.Make(nomino.NewConfig(option)) fmt.Println(str) } func ExampleRandomLength() { - str, _ := nomino.Random(nomino.RandomLength(32)).Make() + option := nomino.WithGenerator(nomino.Random( + nomino.RandomLength(32), + )) + + str, _ := nomino.Make(nomino.NewConfig(option)) fmt.Println(str) } diff --git a/gen_rand_test.go b/gen_rand_test.go index 51fc73f..832275b 100644 --- a/gen_rand_test.go +++ b/gen_rand_test.go @@ -9,7 +9,7 @@ import ( ) func TestUUID(t *testing.T) { - st, err := UUID(nil)(nil) + st, err := UUID()(nil) assert.NoError(t, err) _, parseErr := uuid.Parse(st) assert.NoError(t, parseErr) @@ -25,7 +25,7 @@ func TestUUIDFail(t *testing.T) { uuid.SetRand(badRead{}) defer uuid.SetRand(nil) - _, err := UUID(nil)(nil) + _, err := UUID()(nil) assert.Equal(t, errors.New("sorry"), err) } diff --git a/gen_ts_examples_test.go b/gen_ts_examples_test.go index 26f8a91..2f49392 100644 --- a/gen_ts_examples_test.go +++ b/gen_ts_examples_test.go @@ -9,7 +9,8 @@ import ( func ExampleTimestamp() { gen := nomino.Timestamp() - s, _ := gen.Make() + conf := nomino.NewConfig(nomino.WithGenerator(gen)) + s, _ := nomino.Make(conf) fmt.Println(s) } @@ -17,7 +18,8 @@ func ExampleTimestampTime() { tz, _ := time.LoadLocation("America/New_York") ts := time.Date(2009, time.January, 20, 12, 5, 0, 0, tz) gen := nomino.Timestamp(nomino.TimestampTime(ts)) - s, _ := gen.Make() + conf := nomino.NewConfig(nomino.WithGenerator(gen)) + s, _ := nomino.Make(conf) fmt.Println(s) // Output: 2009-01-20T12-05-00-0500.txt } @@ -26,7 +28,8 @@ func ExampleTimestampFormat() { tz, _ := time.LoadLocation("America/New_York") ts := time.Date(2009, time.January, 20, 12, 5, 0, 0, tz) gen := nomino.Timestamp(nomino.TimestampTime(ts), nomino.TimestampFormat("2006#01#02<>15|04|05-0700")) - s, _ := gen.Make() + conf := nomino.NewConfig(nomino.WithGenerator(gen)) + s, _ := nomino.Make(conf) fmt.Println(s) // Output: 2009#01#20<>12|05|00-0500.txt } @@ -35,7 +38,8 @@ func ExampleTimestampUTC() { tz, _ := time.LoadLocation("America/New_York") ts := time.Date(2009, time.January, 20, 12, 5, 0, 0, tz) gen := nomino.Timestamp(nomino.TimestampTime(ts), nomino.TimestampUTC()) - s, _ := gen.Make() + conf := nomino.NewConfig(nomino.WithGenerator(gen)) + s, _ := nomino.Make(conf) fmt.Println(s) // Output: 2009-01-20T17-05-00.txt } diff --git a/generators.go b/generators.go index e01ccc6..c7ad4e8 100644 --- a/generators.go +++ b/generators.go @@ -10,15 +10,10 @@ import ( // for example. type Generator func(conf *Config) (string, error) -// Make allows you to generate a new string directly from a Generator. +// Make allows you to generate a new string directly from a generator. func (g Generator) Make(opts ...Option) (string, error) { - return g.MakeWithConfig(NewConfig(opts...)) -} - -// MakeWithConfig allows you to generate a new string directly from a Generator -// with a pre-existing Config. -func (g Generator) MakeWithConfig(c Config) (string, error) { - return Make(c.AddOptions(WithGenerator(g))) + opts = append(opts, WithGenerator(g)) + return Make(NewConfig(opts...)) } // WithGenerator sets the specified generator