Passed
Pull Request — main (#40)
by Serhii
01:18
created

langset.go   A

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 12
eloc 58
dl 0
loc 88
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A timeago.newLangSet 0 20 3
A timeago.mergeLangForms 0 7 3
A timeago.applyCustomTranslations 0 26 4
A timeago.mergeSetValue 0 3 2
1
package timeago
2
3
import (
4
	"fmt"
5
	"path"
6
	"runtime"
7
)
8
9
type LangForms map[string]string
10
11
type LangSet struct {
12
	Lang    string    `json:"lang"`
13
	Format  string    `json:"format"`
14
	Ago     string    `json:"ago"`
15
	Online  string    `json:"online"`
16
	JustNow string    `json:"justnow"`
17
	Second  LangForms `json:"second"`
18
	Minute  LangForms `json:"minute"`
19
	Hour    LangForms `json:"hour"`
20
	Day     LangForms `json:"day"`
21
	Week    LangForms `json:"week"`
22
	Month   LangForms `json:"month"`
23
	Year    LangForms `json:"year"`
24
}
25
26
func newLangSet() (*LangSet, error) {
27
	_, filename, _, ok := runtime.Caller(0)
28
29
	if !ok {
30
		return nil, errorf("No called information")
31
	}
32
33
	rootPath := path.Dir(filename)
34
	filePath := fmt.Sprintf(rootPath+"/langs/%s.json", conf.Language)
35
36
	if cache, ok := cachedJsonRes[filePath]; ok {
37
		return cache, nil
38
	}
39
40
	langSet := parseLangSet(filePath)
41
	langSet = applyCustomTranslations(langSet)
42
43
	cachedJsonRes[filePath] = langSet
44
45
	return langSet, nil
46
}
47
48
func applyCustomTranslations(langSet *LangSet) *LangSet {
49
	if len(conf.Translations) == 0 {
50
		return langSet
51
	}
52
53
	for _, trans := range conf.Translations {
54
		if trans.Lang != langSet.Lang {
55
			continue
56
		}
57
58
		mergeSetValue(trans.Lang, &langSet.Lang)
59
		mergeSetValue(trans.Format, &langSet.Format)
60
		mergeSetValue(trans.Ago, &langSet.Ago)
61
		mergeSetValue(trans.Online, &langSet.Online)
62
		mergeSetValue(trans.JustNow, &langSet.JustNow)
63
64
		mergeLangForms(langSet.Second, trans.Second)
65
		mergeLangForms(langSet.Minute, trans.Minute)
66
		mergeLangForms(langSet.Hour, trans.Hour)
67
		mergeLangForms(langSet.Day, trans.Day)
68
		mergeLangForms(langSet.Week, trans.Week)
69
		mergeLangForms(langSet.Month, trans.Month)
70
		mergeLangForms(langSet.Year, trans.Year)
71
	}
72
73
	return langSet
74
}
75
76
func mergeSetValue(newVal string, currVal *string) {
77
	if newVal != "" {
78
		*currVal = newVal
79
	}
80
}
81
82
func mergeLangForms(curr, langForms LangForms) {
83
	if len(langForms) == 0 {
84
		return
85
	}
86
87
	for k, v := range langForms {
88
		curr[k] = v
89
	}
90
}
91