Compare commits

..

No commits in common. "c17f23595ce0ec4d079becafc78e42235dcf42b6" and "55038ea2959a8833ba8aebcedcc38911c7aed863" have entirely different histories.

8 changed files with 65 additions and 126 deletions

View file

@ -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!

View file

@ -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
}

View file

@ -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)
}

View file

@ -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 {

View file

@ -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)
}

View file

@ -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)
}

View file

@ -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
}

View file

@ -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