vars/metadata/payload.go   A
last analyzed

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 19
eloc 49
dl 0
loc 90
rs 10
c 0
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A metadata.*Payload.AddList 0 3 1
A metadata.*Payload.AddTag 0 2 1
A metadata.*Payload.AddBool 0 2 1
A metadata.*Payload.ListTags 0 2 1
A metadata.*Payload.Tags 0 2 1
A metadata.filter 0 14 4
A metadata.Tags.Count 0 2 1
A metadata.Tags.Tag 0 4 1
A metadata.Separator 0 2 1
A metadata.New 0 2 1
A metadata.*Payload.UseSeparator 0 8 4
A metadata.*Payload.UpdateList 0 9 2
1
package metadata
2
3
import (
4
	"github.com/vvval/go-metadata-scanner/util"
5
	"strings"
6
)
7
8
const separator string = "<sep>"
9
10
type Tags map[string]interface{}
11
12
func (t Tags) Tag(tag string) (interface{}, bool) {
13
	v, ok := t[tag]
14
15
	return v, ok
16
}
17
18
func (t Tags) Count() int {
19
	return len(t)
20
}
21
22
type Payload struct {
23
	tags  Tags
24
	lists []string
25
}
26
27
func New() Payload {
28
	return Payload{tags: Tags{}}
29
}
30
31
func Separator() string {
32
	return separator
33
}
34
35
func (p *Payload) UseSeparator() bool {
36
	for _, tag := range p.lists {
37
		if strings.Contains(p.tags[tag].(string), separator) {
38
			return true
39
		}
40
	}
41
42
	return false
43
}
44
45
func (p *Payload) Tags() Tags {
46
	return p.tags
47
}
48
49
func (p *Payload) ListTags() []string {
50
	return p.lists
51
}
52
53
func (p *Payload) AddBool(tag string, value bool) {
54
	p.tags[tag] = value
55
}
56
57
func (p *Payload) AddList(tag string, value []string) {
58
	p.tags[tag] = strings.Join(util.UniqueValues(value), separator)
59
	p.lists = util.UniqueValues(append(p.lists, tag))
60
}
61
62
func (p *Payload) UpdateList(tag string, value []string) {
63
	keywords, ok := p.tags[tag].(string)
64
	if !ok {
65
		keywords = ""
66
	}
67
68
	values := strings.Split(keywords, separator)
69
	values = append(values, value...)
70
	p.AddList(tag, values)
71
}
72
73
func (p *Payload) AddTag(tag string, value string) {
74
	p.tags[tag] = filter(value)
75
}
76
77
func filter(value interface{}) interface{} {
78
	if str, ok := value.(string); ok {
79
		if strings.EqualFold(str, "true") {
80
			return true
81
		}
82
83
		if strings.EqualFold(str, "false") {
84
			return false
85
		}
86
87
		return str
88
	}
89
90
	return value
91
}
92