• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

optimizely / optimizely-flutter-sdk / 12072954613

28 Nov 2024 04:55PM CUT coverage: 84.898%. Remained the same
12072954613

push

github

web-flow
chore: version updated (#79)

624 of 735 relevant lines covered (84.9%)

1.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

52.41
/lib/src/data_objects/optimizely_config.dart
1
/// **************************************************************************
2
/// Copyright 2022-2023, Optimizely, Inc. and contributors                   *
3
///                                                                          *
4
/// Licensed under the Apache License, Version 2.0 (the "License");          *
5
/// you may not use this file except in compliance with the License.         *
6
/// You may obtain a copy of the License at                                  *
7
///                                                                          *
8
///    http://www.apache.org/licenses/LICENSE-2.0                            *
9
///                                                                          *
10
/// Unless required by applicable law or agreed to in writing, software      *
11
/// distributed under the License is distributed on an "AS IS" BASIS,        *
12
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13
/// See the License for the specific language governing permissions and      *
14
/// limitations under the License.                                           *
15
///**************************************************************************/
16

17
import 'dart:convert';
18

19
import 'package:optimizely_flutter_sdk/src/utils/constants.dart';
20

21
class OptimizelyConfig {
22
  Map<String, OptimizelyExperiment> experimentsMap = {};
23
  Map<String, OptimizelyFeature> featuresMap = {};
24
  List<OptimizelyAttribute> attributes = [];
25
  List<OptimizelyEvent> events = [];
26
  List<OptimizelyAudience> audiences = [];
27
  String? revision;
28
  String? sdkKey;
29
  String? environmentKey;
30
  String? datafile;
31

32
  OptimizelyConfig(Map<String, dynamic> optimizelyConfig) {
1✔
33
    if (optimizelyConfig[Constants.experimentsMap] is Map<dynamic, dynamic>) {
2✔
34
      final experimentsMapDynamic =
35
          Map<String, dynamic>.from(optimizelyConfig[Constants.experimentsMap]);
2✔
36
      // ignore: unnecessary_set_literal
37
      experimentsMapDynamic.forEach((k, v) => {
2✔
38
            if (v is Map<dynamic, dynamic>)
1✔
39
              {
1✔
40
                experimentsMap[k] =
2✔
41
                    OptimizelyExperiment.fromJson(Map<String, dynamic>.from(v))
2✔
42
              }
43
          });
44
    }
45

46
    if (optimizelyConfig[Constants.featuresMap] is Map<dynamic, dynamic>) {
2✔
47
      final featuresMapDynamic =
48
          Map<String, dynamic>.from(optimizelyConfig[Constants.featuresMap]);
2✔
49
      // ignore: unnecessary_set_literal
50
      featuresMapDynamic.forEach((k, v) => {
2✔
51
            if (v is Map<dynamic, dynamic>)
1✔
52
              {
1✔
53
                featuresMap[k] =
2✔
54
                    OptimizelyFeature.fromJson(Map<String, dynamic>.from(v))
2✔
55
              }
56
          });
57
    }
58

59
    if (optimizelyConfig[Constants.attributes] is List<dynamic>) {
2✔
60
      var attributesDynamic = optimizelyConfig[Constants.attributes] as List;
1✔
61
      attributes = attributesDynamic
1✔
62
          .map((attribute) => OptimizelyAttribute.fromJson(
3✔
63
              Map<String, dynamic>.from(attribute)))
1✔
64
          .toList();
1✔
65
    }
66

67
    if (optimizelyConfig[Constants.events] is List<dynamic>) {
2✔
68
      var eventsDynamic = optimizelyConfig[Constants.events] as List;
1✔
69
      events = eventsDynamic
1✔
70
          .map((event) =>
2✔
71
              OptimizelyEvent.fromJson(Map<String, dynamic>.from(event)))
2✔
72
          .toList();
1✔
73
    }
74

75
    if (optimizelyConfig[Constants.audiences] is List<dynamic>) {
2✔
76
      var audiencesDynamic = optimizelyConfig[Constants.audiences] as List;
1✔
77
      audiences = audiencesDynamic
1✔
78
          .map((audience) =>
2✔
79
              OptimizelyAudience.fromJson(Map<String, dynamic>.from(audience)))
2✔
80
          .toList();
1✔
81
    }
82

83
    if (optimizelyConfig[Constants.revision] is String) {
2✔
84
      revision = optimizelyConfig[Constants.revision] as String;
2✔
85
    }
86

87
    if (optimizelyConfig[Constants.sdkKey] is String) {
2✔
88
      sdkKey = optimizelyConfig[Constants.sdkKey] as String;
2✔
89
    }
90

91
    if (optimizelyConfig[Constants.environmentKey] is String) {
2✔
92
      environmentKey = optimizelyConfig[Constants.environmentKey] as String;
2✔
93
    }
94

95
    if (optimizelyConfig[Constants.datafile] is String) {
2✔
96
      datafile = optimizelyConfig[Constants.datafile] as String;
2✔
97
    }
98
  }
99

100
  Map<String, dynamic> toJson() {
×
101
    Map<String, dynamic> dynamicExpMap = {};
×
102
    experimentsMap.forEach((k, v) => dynamicExpMap[k] = v.toJson());
×
103
    Map<String, dynamic> dynamicFeaturesMap = {};
×
104
    featuresMap.forEach((k, v) => dynamicFeaturesMap[k] = v.toJson());
×
105
    var dynamicAttributes = [];
×
106
    for (var attribute in attributes) {
×
107
      dynamicAttributes.add(attribute.toJson());
×
108
    }
109
    var dynamicEvents = [];
×
110
    for (var event in events) {
×
111
      dynamicEvents.add(event.toJson());
×
112
    }
113
    var dynamicAudiences = [];
×
114
    for (var audience in audiences) {
×
115
      dynamicAudiences.add(audience.toJson());
×
116
    }
117

118
    return {
×
119
      'experimentsMap': dynamicExpMap,
120
      'featuresMap': dynamicFeaturesMap,
121
      'attributes': dynamicAttributes,
122
      'events': dynamicEvents,
123
      'audiences': dynamicAudiences,
124
      'revision': revision,
×
125
      'sdkKey': sdkKey,
×
126
      'environmentKey': environmentKey,
×
127
      'datafile': datafile
×
128
    };
129
  }
130

131
  @override
×
132
  String toString() {
133
    var encodedExperimentsMap = json.encode(experimentsMap);
×
134
    var encodedFeaturesMap = json.encode(featuresMap);
×
135
    var encodedAttributes = json.encode(attributes);
×
136
    var encodedEvents = json.encode(events);
×
137
    var encodedAudiences = json.encode(audiences);
×
138
    return 'OptimizelyConfig {revision="$revision",'
×
139
        ' sdkKey="$sdkKey",'
×
140
        ' environmentKey="$environmentKey",'
×
141
        ' events="$encodedEvents",'
142
        ' audiences="$encodedAudiences",'
143
        ' attributes="$encodedAttributes",'
144
        ' featuresMap="$encodedFeaturesMap",'
145
        ' experimentsMap="$encodedExperimentsMap"}';
146
  }
147
}
148

149
// Represents the Audiences list in {@link OptimizelyConfigResponse}
150
class OptimizelyAudience {
151
  final String? id;
152
  final String? name;
153
  final String? conditions;
154
  OptimizelyAudience({this.id, this.name, this.conditions});
1✔
155

156
  factory OptimizelyAudience.fromJson(Map<String, dynamic> parsedJson) {
1✔
157
    return OptimizelyAudience(
1✔
158
        id: parsedJson[Constants.id],
1✔
159
        name: parsedJson[Constants.name],
1✔
160
        conditions: parsedJson[Constants.conditions]);
1✔
161
  }
162

163
  Map<String, dynamic> toJson() =>
×
164
      {'id': id, 'name': name, 'conditions': conditions};
×
165

166
  @override
×
167
  String toString() {
168
    return 'OptimizelyAudience {id="$id", name="$name", conditions="$conditions"}';
×
169
  }
170
}
171

172
// Represents the Events's map in {@link OptimizelyConfigResponse}
173
class OptimizelyEvent {
174
  final String? id;
175
  final String? key;
176
  final List<String> experimentIds;
177
  OptimizelyEvent({this.id, this.key, this.experimentIds = const []});
1✔
178

179
  factory OptimizelyEvent.fromJson(Map<String, dynamic> parsedJson) {
1✔
180
    return OptimizelyEvent(
1✔
181
        id: parsedJson[Constants.id],
1✔
182
        key: parsedJson[Constants.key],
1✔
183
        experimentIds: List<String>.from(parsedJson[Constants.experimentIds]));
2✔
184
  }
185

186
  Map<String, dynamic> toJson() =>
×
187
      {'id': id, 'key': key, 'experimentIds': experimentIds};
×
188

189
  @override
×
190
  String toString() {
191
    var encodedExperimentIds = json.encode(experimentIds);
×
192
    return 'OptimizelyEvent {id="$id", key="$key", experimentIds="$encodedExperimentIds"}';
×
193
  }
194
}
195

196
// Represents the Attribute's map in {@link OptimizelyConfigResponse}
197
class OptimizelyAttribute {
198
  final String? id;
199
  final String? key;
200

201
  OptimizelyAttribute({this.id, this.key});
1✔
202

203
  factory OptimizelyAttribute.fromJson(Map<String, dynamic> parsedJson) {
1✔
204
    return OptimizelyAttribute(
1✔
205
        id: parsedJson[Constants.id], key: parsedJson[Constants.key]);
2✔
206
  }
207
  Map<String, dynamic> toJson() => {'id': id, 'key': key};
×
208

209
  @override
×
210
  String toString() {
211
    return 'OptimizelyAttribute {id="$id", key="$key"}';
×
212
  }
213
}
214

215
// Represents the feature's map in {@link OptimizelyConfigResponse}
216
class OptimizelyFeature {
217
  final String? id;
218
  final String? key;
219
  final List<OptimizelyExperiment> deliveryRules;
220
  final List<OptimizelyExperiment> experimentRules;
221

222
  OptimizelyFeature(
1✔
223
      {this.id,
224
      this.key,
225
      this.deliveryRules = const [],
226
      this.experimentRules = const []});
227

228
  factory OptimizelyFeature.fromJson(Map<String, dynamic> parsedJson) {
1✔
229
    List<OptimizelyExperiment> tempDeliveryRules = [];
1✔
230
    List<OptimizelyExperiment> tempExperimentRules = [];
1✔
231
    if (parsedJson[Constants.deliveryRules] is List<dynamic>) {
2✔
232
      var deliveryRulesDynamic = parsedJson[Constants.deliveryRules] as List;
1✔
233
      tempDeliveryRules = deliveryRulesDynamic
234
          .map((experiment) => OptimizelyExperiment.fromJson(
3✔
235
              Map<String, dynamic>.from(experiment)))
1✔
236
          .toList();
1✔
237
    }
238
    if (parsedJson[Constants.experimentRules] is List<dynamic>) {
2✔
239
      var experimentRulesDynamic =
240
          parsedJson[Constants.experimentRules] as List;
1✔
241
      tempExperimentRules = experimentRulesDynamic
242
          .map((experiment) => OptimizelyExperiment.fromJson(
3✔
243
              Map<String, dynamic>.from(experiment)))
1✔
244
          .toList();
1✔
245
    }
246
    return OptimizelyFeature(
1✔
247
        id: parsedJson[Constants.id],
1✔
248
        key: parsedJson[Constants.key],
1✔
249
        deliveryRules: tempDeliveryRules,
250
        experimentRules: tempExperimentRules);
251
  }
252

253
  Map<String, dynamic> toJson() {
×
254
    var dynamicDeliveryRules = [];
×
255
    for (var deliveryRule in deliveryRules) {
×
256
      dynamicDeliveryRules.add(deliveryRule.toJson());
×
257
    }
258

259
    var dynamicExperimentRules = [];
×
260
    for (var experimentRule in experimentRules) {
×
261
      dynamicExperimentRules.add(experimentRule.toJson());
×
262
    }
263
    return {
×
264
      'id': id,
×
265
      'key': key,
×
266
      'deliveryRules': dynamicDeliveryRules,
267
      'experimentRules': dynamicExperimentRules
268
    };
269
  }
270

271
  @override
×
272
  String toString() {
273
    var encodedDeliveryRules = json.encode(deliveryRules);
×
274
    var encodedExperimentRules = json.encode(experimentRules);
×
275
    return 'OptimizelyFeature {id="$id", key="$key", deliveryRules="$encodedDeliveryRules", experimentRules="$encodedExperimentRules"}';
×
276
  }
277
}
278

279
// Represents the experiment's map in {@link OptimizelyConfigResponse}
280
class OptimizelyExperiment {
281
  final String? id;
282
  final String? key;
283
  final String audiences;
284
  final Map<String, OptimizelyVariation> variationsMap;
285

286
  OptimizelyExperiment(
1✔
287
      {this.id, this.key, this.audiences = "", this.variationsMap = const {}});
288
  factory OptimizelyExperiment.fromJson(Map<String, dynamic> parsedJson) {
1✔
289
    Map<String, OptimizelyVariation>? tempVariationsMap = {};
1✔
290
    if (parsedJson[Constants.variationsMap] is Map<dynamic, dynamic>) {
2✔
291
      final variationsMapDynamic =
292
          Map<String, dynamic>.from(parsedJson[Constants.variationsMap]);
2✔
293
      // ignore: unnecessary_set_literal
294
      variationsMapDynamic.forEach((k, v) => {
2✔
295
            if (v is Map<dynamic, dynamic>)
1✔
296
              {
1✔
297
                tempVariationsMap[k] =
1✔
298
                    OptimizelyVariation.fromJson(Map<String, dynamic>.from(v))
2✔
299
              }
300
          });
301
    }
302
    return OptimizelyExperiment(
1✔
303
        id: parsedJson[Constants.id],
1✔
304
        key: parsedJson[Constants.key],
1✔
305
        audiences: parsedJson[Constants.audiences],
1✔
306
        variationsMap: tempVariationsMap);
307
  }
308

309
  Map<String, dynamic> toJson() {
×
310
    Map<String, dynamic> dynamicVariationsMap = {};
×
311
    variationsMap.forEach((k, v) => dynamicVariationsMap[k] = v.toJson());
×
312

313
    return {
×
314
      'id': id,
×
315
      'key': key,
×
316
      'audiences': audiences,
×
317
      'variationsMap': dynamicVariationsMap
318
    };
319
  }
320

321
  @override
×
322
  String toString() {
323
    var encodedVariationsMap = json.encode(variationsMap);
×
324
    return 'OptimizelyExperiment {id="$id", key="$key", audiences="$audiences", variationsMap="$encodedVariationsMap"}';
×
325
  }
326
}
327

328
// Details of variation in {@link OptimizelyExperiment}
329
class OptimizelyVariation {
330
  final String? id;
331
  final String? key;
332
  final bool featureEnabled;
333
  final Map<String, OptimizelyVariable> variablesMap;
334

335
  OptimizelyVariation(
1✔
336
      {this.id, this.key, bool? featureEnabled, this.variablesMap = const {}})
337
      : featureEnabled = featureEnabled ?? false;
338

339
  factory OptimizelyVariation.fromJson(Map<String, dynamic> parsedJson) {
1✔
340
    Map<String, OptimizelyVariable>? tempVariablesMap = {};
1✔
341
    if (parsedJson[Constants.variablesMap] is Map<dynamic, dynamic>) {
2✔
342
      final variablesMapDynamic =
343
          Map<String, dynamic>.from(parsedJson[Constants.variablesMap]);
2✔
344
      // ignore: unnecessary_set_literal
345
      variablesMapDynamic.forEach((k, v) => {
1✔
346
            if (v is Map<dynamic, dynamic>)
×
347
              {
×
348
                tempVariablesMap[k] =
×
349
                    OptimizelyVariable.fromJson(Map<String, dynamic>.from(v))
×
350
              }
351
          });
352
    }
353
    return OptimizelyVariation(
1✔
354
        id: parsedJson[Constants.id],
1✔
355
        key: parsedJson[Constants.key],
1✔
356
        featureEnabled: parsedJson[Constants.featureEnabled],
1✔
357
        variablesMap: tempVariablesMap);
358
  }
359

360
  Map<String, dynamic> toJson() {
×
361
    Map<String, dynamic> dynamicVariablesMap = {};
×
362
    variablesMap.forEach((k, v) => dynamicVariablesMap[k] = v.toJson());
×
363

364
    return {
×
365
      'id': id,
×
366
      'key': key,
×
367
      'featureEnabled': featureEnabled,
×
368
      'variablesMap': dynamicVariablesMap
369
    };
370
  }
371

372
  @override
×
373
  String toString() {
374
    var encodedVariablesMap = json.encode(variablesMap);
×
375
    return 'OptimizelyVariation {id="$id", key="$key", featureEnabled="$featureEnabled", variablesMap="$encodedVariablesMap"}';
×
376
  }
377
}
378

379
// Details of feature variable in {@link OptimizelyVariation}
380
class OptimizelyVariable {
381
  final String? id;
382
  final String? key;
383
  final String? type;
384
  final String? value;
385

386
  OptimizelyVariable({this.id, this.key, this.type, this.value});
×
387

388
  factory OptimizelyVariable.fromJson(Map<String, dynamic> parsedJson) {
×
389
    return OptimizelyVariable(
×
390
        id: parsedJson[Constants.id],
×
391
        key: parsedJson[Constants.key],
×
392
        type: parsedJson[Constants.type],
×
393
        value: parsedJson[Constants.value]);
×
394
  }
395

396
  Map<String, dynamic> toJson() =>
×
397
      {'id': id, 'key': key, 'type': type, 'value': value};
×
398

399
  @override
×
400
  String toString() {
401
    return 'OptimizelyVariable {id="$id", key="$key", type="$type", value="$value"}';
×
402
  }
403
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc