Skip to content

Commit

Permalink
Merge pull request #4 from kashifkhan0771/feature/metadata-map
Browse files Browse the repository at this point in the history
Added metadata map support
  • Loading branch information
kashifkhan0771 authored Feb 26, 2024
2 parents fdeaff3 + 5a2c2e2 commit 12cbfbc
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 4 deletions.
28 changes: 28 additions & 0 deletions maps/maps.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,31 @@ func (s StateMap) HasState(stateType string) bool {

return ok
}

type Metadata map[string]string

func NewMetadata() Metadata {
return make(map[string]string)
}

func (m Metadata) Update(key, value string) {
if m == nil {
m = NewMetadata()
}

m[key] = value
}

func (m Metadata) Has(key string) bool {
_, ok := m[key]

return ok
}

func (m Metadata) Value(key string) string {
if !m.Has(key) {
return ""
}

return m[key]
}
103 changes: 103 additions & 0 deletions maps/maps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,106 @@ func TestStateMap_ToggleState(t *testing.T) {
})
}
}

func TestMetadata_Update(t *testing.T) {
type args struct {
key string
value string
}
tests := []struct {
name string
m Metadata
args args
}{
{
name: "success - update key and value",
m: map[string]string{"key1": "value2"},
args: args{key: "key1", value: "value1"},
},
{
name: "success - add a new key and value",
m: map[string]string{"key1": "value2"},
args: args{key: "key2", value: "value1"},
},
{
name: "success - update key and value with nil map",
m: nil,
args: args{key: "key1", value: "value1"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.m.Update(tt.args.key, tt.args.value)
})
}
}

func TestMetadata_Has(t *testing.T) {
type args struct {
key string
}
tests := []struct {
name string
m Metadata
args args
want bool
}{
{
name: "success - key exist",
m: map[string]string{"key1": "value1"},
args: args{key: "key1"},
want: true,
},
{
name: "success - key does not exist",
m: map[string]string{"key1": "value1"},
args: args{key: "key2"},
want: false,
},
{
name: "success - check in nil map",
m: nil,
args: args{key: "key2"},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.m.Has(tt.args.key); got != tt.want {
t.Errorf("Has() = %v, want %v", got, tt.want)
}
})
}
}

func TestMetadata_Value(t *testing.T) {
type args struct {
key string
}
tests := []struct {
name string
m Metadata
args args
want string
}{
{
name: "success - get a value of the key",
m: map[string]string{"key1": "value1"},
args: args{key: "key1"},
want: "value1",
},
{
name: "success - get a value of the non existing key",
m: map[string]string{"key1": "value1"},
args: args{key: "key2"},
want: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.m.Value(tt.args.key); got != tt.want {
t.Errorf("Value() = %v, want %v", got, tt.want)
}
})
}
}
7 changes: 3 additions & 4 deletions strings/strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ Package strings defines strings helpers.
package strings

import (
"golang.org/x/text/language"
"regexp"
"strings"

"golang.org/x/text/cases"
"golang.org/x/text/language"
)

var c = cases.Title(language.English)

// SubstringSearchOptions contains options for substring search.
type SubstringSearchOptions struct {
CaseInsensitive bool // Perform case-insensitive search
Expand Down Expand Up @@ -51,10 +53,7 @@ func SubstringSearch(input, substring string, options SubstringSearchOptions) []

// Title return string in title case with English language-specific title
func Title(input string) string {
c := cases.Title(language.English)

return c.String(input)

}

// ToTitle converts a string to title case, capitalizing the first letter of each word.
Expand Down

0 comments on commit 12cbfbc

Please sign in to comment.