@@ -5,15 +5,16 @@ import (
5
5
6
6
"github.com/sirupsen/logrus"
7
7
8
+ "gopkg.in/launchdarkly/go-sdk-common.v1/ldvalue"
8
9
ld "gopkg.in/launchdarkly/go-server-sdk.v4"
9
10
"gopkg.in/launchdarkly/go-server-sdk.v4/ldlog"
10
11
)
11
12
12
13
type Client interface {
13
- Enabled (key , userID string ) bool
14
+ Enabled (key , userID string , attrs ... Attr ) bool
14
15
EnabledUser (key string , user ld.User ) bool
15
16
16
- Variation (key , defaultVal , userID string ) string
17
+ Variation (key , defaultVal , userID string , attrs ... Attr ) string
17
18
VariationUser (key string , defaultVal string , user ld.User ) string
18
19
19
20
AllEnabledFlags (key string ) []string
@@ -22,7 +23,8 @@ type Client interface {
22
23
23
24
type ldClient struct {
24
25
* ld.LDClient
25
- log logrus.FieldLogger
26
+ log logrus.FieldLogger
27
+ defaultAttrs []Attr
26
28
}
27
29
28
30
var _ Client = & ldClient {}
@@ -55,11 +57,16 @@ func NewClient(cfg *Config, logger logrus.FieldLogger) (Client, error) {
55
57
if err != nil {
56
58
logger .WithError (err ).Error ("Unable to construct LD client" )
57
59
}
58
- return & ldClient {inner , logger }, err
60
+
61
+ var defaultAttrs []Attr
62
+ for k , v := range cfg .DefaultUserAttrs {
63
+ defaultAttrs = append (defaultAttrs , StringAttr (k , v ))
64
+ }
65
+ return & ldClient {inner , logger , defaultAttrs }, err
59
66
}
60
67
61
- func (c * ldClient ) Enabled (key string , userID string ) bool {
62
- return c .EnabledUser (key , ld . NewUser (userID ))
68
+ func (c * ldClient ) Enabled (key string , userID string , attrs ... Attr ) bool {
69
+ return c .EnabledUser (key , c . userWithAttrs (userID , attrs ))
63
70
}
64
71
65
72
func (c * ldClient ) EnabledUser (key string , user ld.User ) bool {
@@ -70,8 +77,8 @@ func (c *ldClient) EnabledUser(key string, user ld.User) bool {
70
77
return res
71
78
}
72
79
73
- func (c * ldClient ) Variation (key , defaultVal , userID string ) string {
74
- return c .VariationUser (key , defaultVal , ld . NewUser (userID ))
80
+ func (c * ldClient ) Variation (key , defaultVal , userID string , attrs ... Attr ) string {
81
+ return c .VariationUser (key , defaultVal , c . userWithAttrs (userID , attrs ))
75
82
}
76
83
77
84
func (c * ldClient ) VariationUser (key string , defaultVal string , user ld.User ) string {
@@ -103,6 +110,26 @@ func (c *ldClient) AllEnabledFlagsUser(key string, user ld.User) []string {
103
110
return flags
104
111
}
105
112
113
+ func (c * ldClient ) userWithAttrs (id string , attrs []Attr ) ld.User {
114
+ b := ld .NewUserBuilder (id )
115
+ for _ , attr := range c .defaultAttrs {
116
+ b .Custom (attr .Name , attr .Value )
117
+ }
118
+ for _ , attr := range attrs {
119
+ b .Custom (attr .Name , attr .Value )
120
+ }
121
+ return b .Build ()
122
+ }
123
+
124
+ type Attr struct {
125
+ Name string
126
+ Value ldvalue.Value
127
+ }
128
+
129
+ func StringAttr (name , value string ) Attr {
130
+ return Attr {Name : name , Value : ldvalue .String (value )}
131
+ }
132
+
106
133
func configureLogger (ldLogger * ldlog.Loggers , log logrus.FieldLogger ) {
107
134
if log == nil {
108
135
l := logrus .New ()
0 commit comments