upper case the metadata

This commit is contained in:
Asim Aslam 2019-12-31 13:37:29 +00:00
parent 488dc31743
commit 60ea537bbc
2 changed files with 30 additions and 12 deletions

View File

@ -3,6 +3,7 @@ package metadata
import ( import (
"context" "context"
"strings"
) )
type metaKey struct{} type metaKey struct{}
@ -27,14 +28,32 @@ func Get(ctx context.Context, key string) (string, bool) {
if !ok { if !ok {
return "", ok return "", ok
} }
// attempt to get as is
val, ok := md[key] val, ok := md[key]
if ok {
return val, ok
}
// attempt to get lower case
val, ok = md[strings.Title(key)]
return val, ok return val, ok
} }
// FromContext returns metadata from the given context // FromContext returns metadata from the given context
func FromContext(ctx context.Context) (Metadata, bool) { func FromContext(ctx context.Context) (Metadata, bool) {
md, ok := ctx.Value(metaKey{}).(Metadata) md, ok := ctx.Value(metaKey{}).(Metadata)
return md, ok if !ok {
return nil, ok
}
// capitalise all values
newMD := make(map[string]string)
for k, v := range md {
newMD[strings.Title(k)] = v
}
return newMD, ok
} }
// NewContext creates a new context with the given metadata // NewContext creates a new context with the given metadata
@ -57,5 +76,4 @@ func MergeContext(ctx context.Context, patchMd Metadata, overwrite bool) context
} }
} }
return context.WithValue(ctx, metaKey{}, cmd) return context.WithValue(ctx, metaKey{}, cmd)
} }

View File

@ -8,7 +8,7 @@ import (
func TestMetadataCopy(t *testing.T) { func TestMetadataCopy(t *testing.T) {
md := Metadata{ md := Metadata{
"foo": "bar", "Foo": "bar",
"bar": "baz", "bar": "baz",
} }
@ -23,7 +23,7 @@ func TestMetadataCopy(t *testing.T) {
func TestMetadataContext(t *testing.T) { func TestMetadataContext(t *testing.T) {
md := Metadata{ md := Metadata{
"foo": "bar", "Foo": "bar",
} }
ctx := NewContext(context.TODO(), md) ctx := NewContext(context.TODO(), md)
@ -33,8 +33,8 @@ func TestMetadataContext(t *testing.T) {
t.Errorf("Unexpected error retrieving metadata, got %t", ok) t.Errorf("Unexpected error retrieving metadata, got %t", ok)
} }
if emd["foo"] != md["foo"] { if emd["Foo"] != md["Foo"] {
t.Errorf("Expected key: %s val: %s, got key: %s val: %s", "foo", md["foo"], "foo", emd["foo"]) t.Errorf("Expected key: %s val: %s, got key: %s val: %s", "Foo", md["Foo"], "Foo", emd["Foo"])
} }
if i := len(emd); i != 1 { if i := len(emd); i != 1 {
@ -56,20 +56,20 @@ func TestMergeContext(t *testing.T) {
{ {
name: "matching key, overwrite false", name: "matching key, overwrite false",
args: args{ args: args{
existing: Metadata{"foo": "bar", "sumo": "demo"}, existing: Metadata{"Foo": "bar", "Sumo": "demo"},
append: Metadata{"sumo": "demo2"}, append: Metadata{"Sumo": "demo2"},
overwrite: false, overwrite: false,
}, },
want: Metadata{"foo": "bar", "sumo": "demo"}, want: Metadata{"Foo": "bar", "Sumo": "demo"},
}, },
{ {
name: "matching key, overwrite true", name: "matching key, overwrite true",
args: args{ args: args{
existing: Metadata{"foo": "bar", "sumo": "demo"}, existing: Metadata{"Foo": "bar", "Sumo": "demo"},
append: Metadata{"sumo": "demo2"}, append: Metadata{"Sumo": "demo2"},
overwrite: true, overwrite: true,
}, },
want: Metadata{"foo": "bar", "sumo": "demo2"}, want: Metadata{"Foo": "bar", "Sumo": "demo2"},
}, },
} }
for _, tt := range tests { for _, tt := range tests {