🔀 Merge branch 'rel/0.1.1' into stable
This commit is contained in:
commit
84c144711a
9 changed files with 47 additions and 30 deletions
|
|
@ -1,5 +1,12 @@
|
|||
# Changelog
|
||||
|
||||
## [0.1.1] - 2026-03-01
|
||||
|
||||
- Add Time method to Date struct for accessing internal timestamp
|
||||
- Add Makefile targets for go vet and go fix
|
||||
- Use named struct fields in tests
|
||||
- Apply go fix improvements (use maps.Copy, strings.CutPrefix, bytes.Cut, range over int)
|
||||
|
||||
## [0.1.0] - 2026-02-28
|
||||
|
||||
- ✨ Move CLI commands to cli/ package for extensibility
|
||||
|
|
|
|||
7
Makefile
7
Makefile
|
|
@ -24,6 +24,13 @@ clean: ## Removes temporary and build files
|
|||
fmt: $(SOURCES) ## Runs go fmt
|
||||
go fmt ./...
|
||||
|
||||
.PHONY: fix ## Run go fix
|
||||
go fix ./...
|
||||
|
||||
.PHONY: vet ## Runs go vet
|
||||
vet: fmt fix
|
||||
go vet ./...
|
||||
|
||||
.PHONY: test
|
||||
test: ## Test application and generate coverage report
|
||||
$(MAKE) clean
|
||||
|
|
|
|||
|
|
@ -58,8 +58,8 @@ var DropCmd = &cobra.Command{
|
|||
for k, v := range fields {
|
||||
ms.AppendTo(k, tools.ParseString(v))
|
||||
}
|
||||
e := models.Entry{title, d.t, *ms}
|
||||
l := models.Log{log, []models.Entry{e}}
|
||||
e := models.Entry{Title: title, Date: d.Time(), Fields: *ms}
|
||||
l := models.Log{Name: log, Entries: []models.Entry{e}}
|
||||
err := files.Append(l)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -126,3 +126,7 @@ func (d *Date) Set(in string) (err error) {
|
|||
func (d *Date) Type() string {
|
||||
return "datetime"
|
||||
}
|
||||
|
||||
func (d Date) Time() time.Time {
|
||||
return d.t
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,8 +49,8 @@ func appendTestSingle(t *testing.T) {
|
|||
Title: "Jimmy",
|
||||
Date: when,
|
||||
Fields: []models.Meta{
|
||||
{"foo", 42},
|
||||
{"bar", true},
|
||||
{Key: "foo", Value: 42},
|
||||
{Key: "bar", Value: true},
|
||||
},
|
||||
}
|
||||
l := models.Log{
|
||||
|
|
@ -93,7 +93,7 @@ func appendTestAddNewLine(t *testing.T) {
|
|||
when := time.Now().Local()
|
||||
whens := when.Format(models.DateFormat)
|
||||
e := []models.Entry{
|
||||
{Title: "one", Date: when, Fields: models.Metas{{"id", "jimmy"}}},
|
||||
{Title: "one", Date: when, Fields: models.Metas{{Key: "id", Value: "jimmy"}}},
|
||||
}
|
||||
l := models.Log{
|
||||
Name: "test",
|
||||
|
|
@ -112,7 +112,7 @@ func appendTestDontAddNewLine(t *testing.T) {
|
|||
when := time.Now().Local()
|
||||
whens := when.Format(models.DateFormat)
|
||||
e := []models.Entry{
|
||||
{Title: "one", Date: when, Fields: models.Metas{{"id", "jimmy"}}},
|
||||
{Title: "one", Date: when, Fields: models.Metas{{Key: "id", Value: "jimmy"}}},
|
||||
}
|
||||
l := models.Log{
|
||||
Name: "test",
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ func TestJsonName(t *testing.T) {
|
|||
|
||||
func TestJsonMeta(t *testing.T) {
|
||||
f, _ := New("json")
|
||||
m := models.Meta{"foo", 42}
|
||||
m := models.Meta{Key: "foo", Value: 42}
|
||||
exp := `{"foo":42}`
|
||||
o, err := f.Meta(m)
|
||||
be.Err(t, err, nil)
|
||||
|
|
@ -27,7 +27,7 @@ func TestJsonMeta(t *testing.T) {
|
|||
func TestJsonEntry(t *testing.T) {
|
||||
when := time.Now()
|
||||
f, _ := New("json")
|
||||
m := models.Meta{"foo", 42}
|
||||
m := models.Meta{Key: "foo", Value: 42}
|
||||
e := models.Entry{
|
||||
Title: "Homer",
|
||||
Date: when,
|
||||
|
|
@ -42,13 +42,13 @@ func TestJsonEntry(t *testing.T) {
|
|||
func TestJsonLog(t *testing.T) {
|
||||
when := time.Now()
|
||||
f, _ := New("json")
|
||||
m := models.Meta{"foo", 42}
|
||||
m := models.Meta{Key: "foo", Value: 42}
|
||||
e := models.Entry{
|
||||
Title: "Homer",
|
||||
Date: when,
|
||||
Fields: []models.Meta{m},
|
||||
}
|
||||
l := models.Log{"stuff", []models.Entry{e}}
|
||||
l := models.Log{Name: "stuff", Entries: []models.Entry{e}}
|
||||
exp := fmt.Sprintf(`{"%s":[{"title":"%s","date":"%s","foo":42}]}`, l.Name, e.Title, when.Format(time.RFC3339))
|
||||
o, err := f.Log(l)
|
||||
be.Err(t, err, nil)
|
||||
|
|
@ -65,7 +65,7 @@ func TestJsonNoLogs(t *testing.T) {
|
|||
|
||||
func TestJsonErr(t *testing.T) {
|
||||
f, _ := New("json")
|
||||
o, err := f.Meta(models.Meta{"foo", make(chan bool)})
|
||||
o, err := f.Meta(models.Meta{Key: "foo", Value: make(chan bool)})
|
||||
var exp []byte
|
||||
be.Err(t, err)
|
||||
be.Equal(t, o, exp)
|
||||
|
|
@ -73,7 +73,7 @@ func TestJsonErr(t *testing.T) {
|
|||
|
||||
func TestJsonPretty(t *testing.T) {
|
||||
f := Json{true}
|
||||
o, err := f.Meta(models.Meta{"foo", 42})
|
||||
o, err := f.Meta(models.Meta{Key: "foo", Value: 42})
|
||||
exp := `{
|
||||
"foo": 42
|
||||
}`
|
||||
|
|
|
|||
|
|
@ -18,28 +18,28 @@ func TestNullName(t *testing.T) {
|
|||
|
||||
func TestNullMeta(t *testing.T) {
|
||||
f, _ := New("zero")
|
||||
o, err := f.Meta(models.Meta{"foo", 42})
|
||||
o, err := f.Meta(models.Meta{Key: "foo", Value: 42})
|
||||
be.Err(t, err, nil)
|
||||
be.Equal(t, o, empty)
|
||||
}
|
||||
|
||||
func TestNullEntry(t *testing.T) {
|
||||
f, _ := New("zero")
|
||||
o, err := f.Entry(models.Entry{"title", time.Now(), models.Metas{}})
|
||||
o, err := f.Entry(models.Entry{Title: "title", Date: time.Now()})
|
||||
be.Err(t, err, nil)
|
||||
be.Equal(t, o, empty)
|
||||
}
|
||||
|
||||
func TestNullLog(t *testing.T) {
|
||||
f, _ := New("zero")
|
||||
o, err := f.Log(models.Log{"jim", []models.Entry{{"title", time.Now(), models.Metas{}}}})
|
||||
o, err := f.Log(models.Log{Name: "jim", Entries: []models.Entry{{Title: "title", Date: time.Now()}}})
|
||||
be.Err(t, err, nil)
|
||||
be.Equal(t, o, empty)
|
||||
}
|
||||
|
||||
func TestNullLogs(t *testing.T) {
|
||||
f, _ := New("zero")
|
||||
o, err := f.Logs([]models.Log{{"jim", []models.Entry{{"title", time.Now(), models.Metas{}}}}})
|
||||
o, err := f.Logs([]models.Log{{Name: "jim", Entries: []models.Entry{{Title: "title", Date: time.Now()}}}})
|
||||
be.Err(t, err, nil)
|
||||
be.Equal(t, o, empty)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,19 +14,19 @@ import (
|
|||
|
||||
func TestPlainLogs(t *testing.T) {
|
||||
m := []models.Meta{
|
||||
{"foo", "bar"},
|
||||
{"baz", 42},
|
||||
{Key: "foo", Value: "bar"},
|
||||
{Key: "baz", Value: 42},
|
||||
}
|
||||
e := []models.Entry{
|
||||
{Title: "one", Date: time.Now(), Fields: m},
|
||||
{Title: "small", Date: time.Now()},
|
||||
}
|
||||
l := models.Log{"stuff", e}
|
||||
l := models.Log{Name: "stuff", Entries: e}
|
||||
e2 := models.Entry{
|
||||
Title: "three",
|
||||
Date: time.Now(),
|
||||
}
|
||||
l2 := models.Log{"more-stuff", []models.Entry{e2}}
|
||||
l2 := models.Log{Name: "more-stuff", Entries: []models.Entry{e2}}
|
||||
logs := []models.Log{l, l2}
|
||||
|
||||
f, err := New("plain")
|
||||
|
|
@ -115,14 +115,14 @@ func TestPlainLogNoEntries(t *testing.T) {
|
|||
|
||||
func TestPlainMetaEmpty(t *testing.T) {
|
||||
f, _ := New("plain")
|
||||
out, err := f.Meta(models.Meta{"foo", ""})
|
||||
out, err := f.Meta(models.Meta{Key: "foo", Value: ""})
|
||||
be.Err(t, err, nil)
|
||||
be.Equal(t, len(out), 0)
|
||||
}
|
||||
|
||||
func TestPlainMetaError(t *testing.T) {
|
||||
f, _ := New("plain")
|
||||
out, err := f.Meta(models.Meta{"foo", make(chan bool)})
|
||||
out, err := f.Meta(models.Meta{Key: "foo", Value: make(chan bool)})
|
||||
be.Err(t, err)
|
||||
be.Equal(t, len(out), 0)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"maps"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
|
@ -34,7 +35,7 @@ func (e Entry) getFieldMarshalChan() chan metaRes {
|
|||
ch := make(chan metaRes, size)
|
||||
var wg sync.WaitGroup
|
||||
|
||||
for i := 0; i < size; i++ {
|
||||
for i := range size {
|
||||
wg.Add(1)
|
||||
go func(m Meta) {
|
||||
defer wg.Done()
|
||||
|
|
@ -139,8 +140,8 @@ func scanEntry(data []byte, atEOF bool) (advance int, token []byte, err error) {
|
|||
if atEOF {
|
||||
end := []byte{32, 64, 101, 110, 100}
|
||||
token = data
|
||||
if i := bytes.Index(data, end); i >= 0 {
|
||||
token = data[0:i]
|
||||
if before, _, ok := bytes.Cut(data, end); ok {
|
||||
token = before
|
||||
}
|
||||
return len(data), token, nil
|
||||
}
|
||||
|
|
@ -198,9 +199,7 @@ func (e Entry) MarshalJSON() ([]byte, error) {
|
|||
out := map[string]any{}
|
||||
out["title"] = e.Title
|
||||
out["date"] = e.Date.Format(time.RFC3339)
|
||||
for k, v := range e.Fields.Map() {
|
||||
out[k] = v
|
||||
}
|
||||
maps.Copy(out, e.Fields.Map())
|
||||
return json.Marshal(out)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ func WriteValue(buff *bytes.Buffer, val any) (n int, err error) {
|
|||
return buff.Write(o)
|
||||
}
|
||||
case string:
|
||||
if strings.HasPrefix(v, "!") {
|
||||
return buff.WriteString(strings.TrimPrefix(v, "!"))
|
||||
if after, ok := strings.CutPrefix(v, "!"); ok {
|
||||
return buff.WriteString(after)
|
||||
}
|
||||
return buff.WriteString(v)
|
||||
case int:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue