~repos /gromer
git clone https://pyrossh.dev/repos/gromer.git
gromer is a framework and cli to build multipage web apps in golang using htmx and alpinejs.
fix merge
go.mod
CHANGED
|
@@ -12,12 +12,12 @@ require (
|
|
|
12
12
|
github.com/google/uuid v1.3.0
|
|
13
13
|
github.com/gorilla/mux v1.8.0
|
|
14
14
|
github.com/iancoleman/strcase v0.2.0
|
|
15
|
-
github.com/imdario/mergo v0.3.12
|
|
15
|
+
github.com/imdario/mergo v0.3.12
|
|
16
16
|
github.com/lib/pq v1.10.4
|
|
17
17
|
github.com/markbates/inflect v1.0.4
|
|
18
|
-
github.com/microcosm-cc/bluemonday v1.0.
|
|
18
|
+
github.com/microcosm-cc/bluemonday v1.0.16 // indirect
|
|
19
19
|
github.com/pkg/errors v0.9.1
|
|
20
|
-
github.com/rs/zerolog v1.26.
|
|
20
|
+
github.com/rs/zerolog v1.26.1
|
|
21
21
|
github.com/sergi/go-diff v1.2.0 // indirect
|
|
22
22
|
github.com/shurcooL/github_flavored_markdown v0.0.0-20210228213109-c3a9aa474629
|
|
23
23
|
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636 // indirect
|
|
@@ -30,5 +30,5 @@ require (
|
|
|
30
30
|
github.com/stretchr/testify v1.7.0
|
|
31
31
|
gocloud.dev v0.24.0
|
|
32
32
|
golang.org/x/mod v0.5.1
|
|
33
|
-
golang.org/x/net v0.0.0-
|
|
33
|
+
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f
|
|
34
34
|
)
|
go.sum
CHANGED
|
@@ -98,7 +98,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
|
|
|
98
98
|
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
|
99
99
|
github.com/apex/gateway/v2 v2.0.0 h1:tJwKiB7ObbXuF3yoqTf/CfmaZRhHB+GfilTNSCf1Wnc=
|
|
100
100
|
github.com/apex/gateway/v2 v2.0.0/go.mod h1:y+uuK0JxdvTHZeVns501/7qklBhnDHtGU0hfUQ6QIfI=
|
|
101
|
-
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
|
102
101
|
github.com/aws/aws-lambda-go v1.17.0 h1:Ogihmi8BnpmCNktKAGpNwSiILNNING1MiosnKUfU8m0=
|
|
103
102
|
github.com/aws/aws-lambda-go v1.17.0/go.mod h1:FEwgPLE6+8wcGBTe5cJN3JWurd1Ztm9zN4jsXsjzKKw=
|
|
104
103
|
github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
|
@@ -314,8 +313,8 @@ github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP
|
|
|
314
313
|
github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
|
|
315
314
|
github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
|
|
316
315
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
|
317
|
-
github.com/microcosm-cc/bluemonday v1.0.
|
|
316
|
+
github.com/microcosm-cc/bluemonday v1.0.16 h1:kHmAq2t7WPWLjiGvzKa5o3HzSfahUKiOq7fAPUiMNIc=
|
|
318
|
-
github.com/microcosm-cc/bluemonday v1.0.
|
|
317
|
+
github.com/microcosm-cc/bluemonday v1.0.16/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM=
|
|
319
318
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
|
320
319
|
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
|
321
320
|
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
|
@@ -334,8 +333,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
|
|
|
334
333
|
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
|
|
335
334
|
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
|
336
335
|
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
|
337
|
-
github.com/rs/zerolog v1.26.
|
|
336
|
+
github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc=
|
|
338
|
-
github.com/rs/zerolog v1.26.
|
|
337
|
+
github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc=
|
|
339
338
|
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
|
340
339
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
|
341
340
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
|
@@ -410,8 +409,9 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh
|
|
|
410
409
|
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
|
411
410
|
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
|
412
411
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
413
|
-
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
|
|
414
412
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
413
|
+
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e h1:1SzTfNOXwIS2oWiMF+6qu0OUDKb0dauo6MoDUQyu+yU=
|
|
414
|
+
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
|
415
415
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
416
416
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
|
417
417
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
|
@@ -491,8 +491,8 @@ golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|
|
491
491
|
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
492
492
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
493
493
|
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
494
|
-
golang.org/x/net v0.0.0-
|
|
494
|
+
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM=
|
|
495
|
-
golang.org/x/net v0.0.0-
|
|
495
|
+
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
496
496
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
|
497
497
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
498
498
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
@@ -797,6 +797,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
|
797
797
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
798
798
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
799
799
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
800
|
+
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
|
800
801
|
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
801
802
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
802
803
|
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
utils.go
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
package gromer
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"reflect"
|
|
4
5
|
"regexp"
|
|
5
6
|
"strings"
|
|
7
|
+
"time"
|
|
6
8
|
|
|
7
9
|
"github.com/go-playground/validator/v10"
|
|
8
10
|
"github.com/iancoleman/strcase"
|
|
@@ -15,8 +17,26 @@ var ValidatorErrorMap = map[string]string{
|
|
|
15
17
|
}
|
|
16
18
|
var upperRegex = regexp.MustCompile("^[^a-z]*$")
|
|
17
19
|
|
|
20
|
+
type timeTransformer struct {
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
func (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {
|
|
24
|
+
if typ == reflect.TypeOf(time.Time{}) {
|
|
25
|
+
return func(dst, src reflect.Value) error {
|
|
26
|
+
if dst.CanSet() {
|
|
27
|
+
srcResult := src.MethodByName("IsZero").Call([]reflect.Value{})
|
|
28
|
+
if !srcResult[0].Bool() {
|
|
29
|
+
dst.Set(src)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return nil
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return nil
|
|
36
|
+
}
|
|
37
|
+
|
|
18
38
|
func Merge(dst interface{}, src interface{}) error {
|
|
19
|
-
err := mergo.Merge(dst, src, mergo.
|
|
39
|
+
err := mergo.Merge(dst, src, mergo.WithOverride, mergo.WithTransformers(timeTransformer{}))
|
|
20
40
|
if err != nil {
|
|
21
41
|
return err
|
|
22
42
|
}
|
utils_test.go
CHANGED
|
@@ -91,6 +91,7 @@ func TestMerge(t *testing.T) {
|
|
|
91
91
|
Text: "2",
|
|
92
92
|
CreatedAt: time.Date(2020, 11, 11, 0, 0, 0, 0, time.UTC),
|
|
93
93
|
}, note)
|
|
94
|
+
// TODO: look at this merge
|
|
94
95
|
err = Merge(note, &Note{
|
|
95
96
|
ID: "2",
|
|
96
97
|
Text: "",
|
|
@@ -99,7 +100,7 @@ func TestMerge(t *testing.T) {
|
|
|
99
100
|
assert.NoError(t, err)
|
|
100
101
|
assert.EqualValues(t, &Note{
|
|
101
102
|
ID: "2",
|
|
102
|
-
Text: "",
|
|
103
|
+
Text: "2",
|
|
103
|
-
CreatedAt: time.
|
|
104
|
+
CreatedAt: time.Date(2020, 11, 11, 0, 0, 0, 0, time.UTC),
|
|
104
105
|
}, note)
|
|
105
106
|
}
|