Skip to content

Commit 111d0e4

Browse files
authored
RolloutCacheConfiguration & SplitView updates in platform_interface (#143)
1 parent c195d67 commit 111d0e4

File tree

6 files changed

+94
-22
lines changed

6 files changed

+94
-22
lines changed

splitio_platform_interface/lib/split_configuration.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart';
22
import 'package:splitio_platform_interface/split_sync_config.dart';
3+
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';
34

45
class SplitConfiguration {
56
final Map<String, dynamic> configurationMap = {};
@@ -74,6 +75,7 @@ class SplitConfiguration {
7475
SplitLogLevel? logLevel,
7576
int? readyTimeout = 10,
7677
CertificatePinningConfiguration? certificatePinningConfiguration,
78+
RolloutCacheConfiguration? rolloutCacheConfiguration,
7779
}) {
7880
if (featuresRefreshRate != null) {
7981
configurationMap['featuresRefreshRate'] = featuresRefreshRate;
@@ -186,6 +188,13 @@ class SplitConfiguration {
186188
'pins': certificatePinningConfiguration.pins
187189
};
188190
}
191+
192+
if (rolloutCacheConfiguration != null) {
193+
configurationMap['rolloutCacheConfiguration'] = {
194+
'expirationDays': rolloutCacheConfiguration.expirationDays,
195+
'clearOnInit': rolloutCacheConfiguration.clearOnInit
196+
};
197+
}
189198
}
190199
}
191200

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class RolloutCacheConfiguration {
2+
3+
late int _expirationDays;
4+
late bool _clearOnInit;
5+
6+
int get expirationDays => _expirationDays;
7+
bool get clearOnInit => _clearOnInit;
8+
9+
RolloutCacheConfiguration({int expirationDays = 10, bool clearOnInit = false}) {
10+
if (expirationDays < 1) {
11+
expirationDays = 10;
12+
}
13+
_expirationDays = expirationDays;
14+
_clearOnInit = clearOnInit;
15+
}
16+
}
Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
import 'dart:core';
22

33
class SplitView {
4+
5+
static const String _keyName = 'name';
6+
static const String _keyTrafficType = 'trafficType';
7+
static const String _keyKilled = 'killed';
8+
static const String _keyTreatments = 'treatments';
9+
static const String _keyChangeNumber = 'changeNumber';
10+
static const String _keyConfigs = 'configs';
11+
static const String _keyDefaultTreatment = 'defaultTreatment';
12+
static const String _keySets = 'sets';
13+
static const String _keyImpressionsDisabled = 'impressionsDisabled';
14+
415
String name;
516
String trafficType;
617
bool killed = false;
@@ -9,52 +20,59 @@ class SplitView {
920
Map<String, String> configs = {};
1021
String defaultTreatment;
1122
List<String> sets = [];
23+
bool impressionsDisabled = false;
1224

1325
SplitView(this.name, this.trafficType, this.killed, this.treatments,
1426
this.changeNumber, this.configs,
15-
[this.defaultTreatment = '', this.sets = const []]);
27+
[this.defaultTreatment = '', this.sets = const [], this.impressionsDisabled = false]);
1628

1729
static SplitView? fromEntry(Map<dynamic, dynamic>? entry) {
1830
if (entry == null || entry.isEmpty) {
1931
return null;
2032
}
2133

2234
final Map<String, String> mappedConfig = {};
23-
entry['configs']?.entries.forEach((MapEntry<dynamic, dynamic> entry) => {
35+
entry[_keyConfigs]?.entries.forEach((MapEntry<dynamic, dynamic> entry) => {
2436
mappedConfig.addAll({entry.key.toString(): entry.value.toString()})
2537
});
2638

27-
if (entry['treatments'] == null) {
28-
entry['treatments'] = entry['treatments'] ?? [];
39+
if (entry[_keyTreatments] == null) {
40+
entry[_keyTreatments] = entry[_keyTreatments] ?? [];
41+
}
42+
43+
if (entry[_keySets] == null) {
44+
entry[_keySets] = [];
2945
}
3046

31-
if (entry['sets'] == null) {
32-
entry['sets'] = [];
47+
if (entry[_keyImpressionsDisabled] == null) {
48+
entry[_keyImpressionsDisabled] = false;
3349
}
3450

3551
return SplitView(
36-
entry['name'],
37-
entry['trafficType'],
38-
entry['killed'],
39-
(entry['treatments'] as List).map((el) => el as String).toList(),
40-
entry['changeNumber'],
52+
entry[_keyName],
53+
entry[_keyTrafficType],
54+
entry[_keyKilled],
55+
(entry[_keyTreatments] as List).map((el) => el as String).toList(),
56+
entry[_keyChangeNumber],
4157
mappedConfig,
42-
entry['defaultTreatment'] ?? '',
43-
(entry['sets'] as List).map((el) => el as String).toList()
58+
entry[_keyDefaultTreatment] ?? '',
59+
(entry[_keySets] as List).map((el) => el as String).toList(),
60+
entry[_keyImpressionsDisabled] ?? false
4461
);
4562
}
4663

4764
@override
4865
String toString() {
4966
return '''SplitView = {
50-
name: $name,
51-
trafficType: $trafficType,
52-
killed: $killed,
53-
treatments: ${treatments.toString()},
54-
changeNumber: $changeNumber,
55-
config: $configs,
56-
defaultTreatment: $defaultTreatment,
57-
sets: ${sets.toString()}
67+
$_keyName: $name,
68+
$_keyTrafficType: $trafficType,
69+
$_keyKilled: $killed,
70+
$_keyTreatments: ${treatments.toString()},
71+
$_keyChangeNumber: $changeNumber,
72+
$_keyConfigs: $configs,
73+
$_keyDefaultTreatment: $defaultTreatment,
74+
$_keySets: ${sets.toString()},
75+
$_keyImpressionsDisabled: $impressionsDisabled
5876
}''';
5977
}
6078
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';
3+
4+
void main() {
5+
test('negative expirationDays defaults to 10', () {
6+
var config = RolloutCacheConfiguration(expirationDays: -1);
7+
8+
expect(config.expirationDays, 10);
9+
});
10+
11+
test('zero expirationDays defaults to 10', () {
12+
var config = RolloutCacheConfiguration(expirationDays: 0);
13+
14+
expect(config.expirationDays, 10);
15+
});
16+
17+
test('default values', () {
18+
var config = RolloutCacheConfiguration();
19+
20+
expect(config.expirationDays, 10);
21+
expect(config.clearOnInit, false);
22+
});
23+
}

splitio_platform_interface/test/split_view_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ void main() {
2424
'trafficType': 'default',
2525
'defaultTreatment': 'on',
2626
'sets': ['set1', 'set2'],
27+
'impressionsDisabled': true,
2728
});
2829

2930
expect(splitView?.name, 'my_split');
@@ -34,5 +35,6 @@ void main() {
3435
expect(splitView?.trafficType, 'default');
3536
expect(splitView?.defaultTreatment, 'on');
3637
expect(splitView?.sets, ['set1', 'set2']);
38+
expect(splitView?.impressionsDisabled, true);
3739
});
3840
}

splitio_platform_interface/test/splitio_configuration_test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter_test/flutter_test.dart';
22
import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart';
33
import 'package:splitio_platform_interface/split_configuration.dart';
4+
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';
45
import 'package:splitio_platform_interface/split_sync_config.dart';
56

67
void main() {
@@ -34,7 +35,8 @@ void main() {
3435
certificatePinningConfiguration: CertificatePinningConfiguration()
3536
.addPin('host1', 'pin1')
3637
.addPin('host2', 'pin3')
37-
.addPin('host1', 'pin2'));
38+
.addPin('host1', 'pin2'),
39+
rolloutCacheConfiguration: RolloutCacheConfiguration(expirationDays: 15, clearOnInit: true));
3840

3941
expect(config.configurationMap['eventFlushInterval'], 2000);
4042
expect(config.configurationMap['eventsPerPush'], 300);
@@ -71,6 +73,8 @@ void main() {
7173
'host1': ['pin1', 'pin2'],
7274
'host2': ['pin3']
7375
});
76+
expect(config.configurationMap['rolloutCacheConfiguration']['expirationDays'], 15);
77+
expect(config.configurationMap['rolloutCacheConfiguration']['clearOnInit'], true);
7478
});
7579

7680
test('no special values leaves map empty', () async {

0 commit comments

Comments
 (0)