Skip to content

Commit 5b690a2

Browse files
committed
Initial implementation
1 parent f87acf6 commit 5b690a2

File tree

4 files changed

+98
-0
lines changed

4 files changed

+98
-0
lines changed

date.go

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package pflagdate
2+
3+
import (
4+
date "github.com/hardfinhq/go-date"
5+
)
6+
7+
type Date struct {
8+
date.Date
9+
}
10+
11+
// Implement pflag.Value interface
12+
13+
// Type implements pflag.Value.Type().
14+
// Returns "Date".
15+
func (*Date) Type() string {
16+
return "Date"
17+
}
18+
19+
// String implements pflag.Value.String().
20+
// Returns date formatted as time.DateOnly.
21+
func (d *Date) String() string {
22+
return d.Date.String()
23+
}
24+
25+
// Set implements pflag.Value.Set().
26+
func (d *Date) Set(value string) error {
27+
parsed, err := date.FromString(value)
28+
if err != nil {
29+
return err
30+
}
31+
d.Date = parsed
32+
return nil
33+
}

date_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package pflagdate
2+
3+
import (
4+
"testing"
5+
"time"
6+
7+
date "github.com/hardfinhq/go-date"
8+
"github.com/spf13/pflag"
9+
)
10+
11+
func TestDate(t *testing.T) {
12+
dt := new(Date)
13+
14+
if dt.Type() != "Date" {
15+
t.Errorf("unexpected type name %q", dt.Type())
16+
}
17+
18+
flag := &pflag.Flag{
19+
Name: "date",
20+
Shorthand: "d",
21+
Usage: "YYYY-MM-DD date",
22+
Value: dt,
23+
}
24+
25+
pfs := pflag.NewFlagSet("test", pflag.ContinueOnError)
26+
pfs.AddFlag(flag)
27+
28+
err := pfs.Parse([]string{"--date", "2001-03-06"})
29+
if err != nil {
30+
t.Errorf("unexpected error: %v", err)
31+
}
32+
33+
if !dt.Equal(date.NewDate(2001, time.March, 6)) {
34+
t.Errorf("unexpected date: %s", dt)
35+
}
36+
37+
if dt.String() != "2001-03-06" {
38+
t.Errorf("unexpected date: %s", dt)
39+
}
40+
41+
err2 := pfs.Parse([]string{"--date", "invalid"})
42+
if err2 == nil {
43+
t.Error("expected error, got nil")
44+
}
45+
}

go.mod

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module github.com/gbarr/pflag-date
2+
3+
go 1.23.2
4+
5+
require (
6+
github.com/hardfinhq/go-date v1.20240411.1
7+
github.com/spf13/pflag v1.0.5
8+
)

go.sum

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/hardfinhq/go-date v1.20240411.1 h1:UskRXxgD+4eCEa8CpiiWLiv2/Vnf1eB90Bojkf7AQ64=
4+
github.com/hardfinhq/go-date v1.20240411.1/go.mod h1:7oxaI9XX4W3/MRDeQXec0fLXFnSJDS7BrazIY2XqPXA=
5+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
6+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
7+
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
8+
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
9+
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
10+
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
11+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
12+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)