-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtitle.go
46 lines (40 loc) · 1.25 KB
/
title.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main
import (
"strings"
"github.com/childe/gohangout/field_setter"
"github.com/childe/gohangout/value_render"
)
// TitleFilter implents github.com/childe/gohangout/filter.Filter interface
type TitleFilter struct {
config map[interface{}]interface{}
fields map[field_setter.FieldSetter]value_render.ValueRender
}
// New returns a filter.Filter interface
func New(config map[interface{}]interface{}) interface{} {
plugin := &TitleFilter{
config: config,
fields: make(map[field_setter.FieldSetter]value_render.ValueRender),
}
if fieldsValue, ok := config["fields"]; ok {
for _, f := range fieldsValue.([]interface{}) {
fieldSetter := field_setter.NewFieldSetter(f.(string))
if fieldSetter == nil {
panic("could build field setter from " + f.(string))
}
plugin.fields[fieldSetter] = value_render.GetValueRender2(f.(string))
}
} else {
panic("fields must be set in title filter plugin")
}
return plugin
}
// Filter titles fields in the config
func (plugin *TitleFilter) Filter(event map[string]interface{}) (map[string]interface{}, bool) {
for fs, v := range plugin.fields {
valueI := v.Render(event)
if value, ok := valueI.(string); ok {
event = fs.SetField(event, strings.Title(value), "", true)
}
}
return event, true
}