-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathRuntimeConfigResolver.coffee
More file actions
112 lines (89 loc) · 2.96 KB
/
RuntimeConfigResolver.coffee
File metadata and controls
112 lines (89 loc) · 2.96 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
define [
'cord!errors'
'cord!utils/Future'
'eventemitter3'
'lodash'
], (errors, Future, EventEmitter, _) ->
class RuntimeConfigResolver extends EventEmitter
###
This service used to resolve runtime parameter in configs. Stores parameters in cookies
###
@inject: ['cookie']
@cookieName: '_runtime_config_values'
constructor: ->
@parameters = {}
init: ->
###
Init method fetch stored parameters from cookies
###
@_loadParameters()
setParameter: (nameOrObject, value, emitEvent = true) ->
###
Sets a parameter's value by it's name.
Or sets parameters object value
Name should be without % on edges
###
if typeof nameOrObject == 'string'
@parameters[nameOrObject] = value
else if nameOrObject
@parameters[key] = value for key, value of nameOrObject
Future.try =>
@_saveParameters()
.then =>
if emitEvent
@emit('setParameter',
name: nameOrObject,
value: value
)
getParameter: (name, defaultValue) ->
###
Gets a parameter's value by it's name.
Name should be without % on edges
###
if _.has(@parameters, name) then @parameters[name] else defaultValue
clearParameters: ->
###
This method should be called on user logout. Clears all parameters from current instance and cookies
###
@parameters = {}
@_saveParameters()
resolveConfig: (config, parameters = {}) ->
###
Make a try to resolve config. If try is successful, method returns resolved config, else it returns false
@param config Config to resolve
@param parameters optionally one-time used parameters.
###
@resolveConfigByParams(config, _.extend({}, @parameters, parameters))
resolveConfigByParams: (config, parameters = {}) ->
###
Make a try to resolve config. If try is successful, method returns resolved config, else it returns false
@param config Config to resolve
@param parameters optionally one-time used parameters.
###
resolvedConfig = _.cloneDeep config, (val) =>
if _.isString(val)
# Replace variables by regexp replace
val.replace /%%|%([^%\s]+)%/g, (matches...) =>
if matches[1] == undefined
# skip '%%'
'%%'
else
name = matches[1]
if parameters[name] != undefined
parameters[name]
else
throw new errors.ConfigError("Parameter #{name} is not defined")
resolvedConfig
_saveParameters: ->
###
Saves parameters to cookie storage
###
@cookie.set(RuntimeConfigResolver.cookieName, JSON.stringify(@parameters))
_loadParameters: ->
###
Loads parameters from cookie storage
###
@parameters = try
JSON.parse(@cookie.get(RuntimeConfigResolver.cookieName))
catch
{}