Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions splitio_platform_interface/lib/split_configuration.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart';
import 'package:splitio_platform_interface/split_sync_config.dart';
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';

class SplitConfiguration {
final Map<String, dynamic> configurationMap = {};
Expand Down Expand Up @@ -74,6 +75,7 @@ class SplitConfiguration {
SplitLogLevel? logLevel,
int? readyTimeout = 10,
CertificatePinningConfiguration? certificatePinningConfiguration,
RolloutCacheConfiguration? rolloutCacheConfiguration,
}) {
if (featuresRefreshRate != null) {
configurationMap['featuresRefreshRate'] = featuresRefreshRate;
Expand Down Expand Up @@ -186,6 +188,13 @@ class SplitConfiguration {
'pins': certificatePinningConfiguration.pins
};
}

if (rolloutCacheConfiguration != null) {
configurationMap['rolloutCacheConfiguration'] = {
'expirationDays': rolloutCacheConfiguration.expirationDays,
'clearOnInit': rolloutCacheConfiguration.clearOnInit
};
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class RolloutCacheConfiguration {

late int _expirationDays;
late bool _clearOnInit;

int get expirationDays => _expirationDays;
bool get clearOnInit => _clearOnInit;

RolloutCacheConfiguration({int expirationDays = 10, bool clearOnInit = false}) {
if (expirationDays < 1) {
expirationDays = 10;
}
_expirationDays = expirationDays;
_clearOnInit = clearOnInit;
}
}
60 changes: 39 additions & 21 deletions splitio_platform_interface/lib/split_view.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
import 'dart:core';

class SplitView {

static const String _keyName = 'name';
static const String _keyTrafficType = 'trafficType';
static const String _keyKilled = 'killed';
static const String _keyTreatments = 'treatments';
static const String _keyChangeNumber = 'changeNumber';
static const String _keyConfigs = 'configs';
static const String _keyDefaultTreatment = 'defaultTreatment';
static const String _keySets = 'sets';
static const String _keyImpressionsDisabled = 'impressionsDisabled';

String name;
String trafficType;
bool killed = false;
Expand All @@ -9,52 +20,59 @@ class SplitView {
Map<String, String> configs = {};
String defaultTreatment;
List<String> sets = [];
bool impressionsDisabled = false;

SplitView(this.name, this.trafficType, this.killed, this.treatments,
this.changeNumber, this.configs,
[this.defaultTreatment = '', this.sets = const []]);
[this.defaultTreatment = '', this.sets = const [], this.impressionsDisabled = false]);

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

final Map<String, String> mappedConfig = {};
entry['configs']?.entries.forEach((MapEntry<dynamic, dynamic> entry) => {
entry[_keyConfigs]?.entries.forEach((MapEntry<dynamic, dynamic> entry) => {
mappedConfig.addAll({entry.key.toString(): entry.value.toString()})
});

if (entry['treatments'] == null) {
entry['treatments'] = entry['treatments'] ?? [];
if (entry[_keyTreatments] == null) {
entry[_keyTreatments] = entry[_keyTreatments] ?? [];
}

if (entry[_keySets] == null) {
entry[_keySets] = [];
}

if (entry['sets'] == null) {
entry['sets'] = [];
if (entry[_keyImpressionsDisabled] == null) {
entry[_keyImpressionsDisabled] = false;
}

return SplitView(
entry['name'],
entry['trafficType'],
entry['killed'],
(entry['treatments'] as List).map((el) => el as String).toList(),
entry['changeNumber'],
entry[_keyName],
entry[_keyTrafficType],
entry[_keyKilled],
(entry[_keyTreatments] as List).map((el) => el as String).toList(),
entry[_keyChangeNumber],
mappedConfig,
entry['defaultTreatment'] ?? '',
(entry['sets'] as List).map((el) => el as String).toList()
entry[_keyDefaultTreatment] ?? '',
(entry[_keySets] as List).map((el) => el as String).toList(),
entry[_keyImpressionsDisabled] ?? false
);
}

@override
String toString() {
return '''SplitView = {
name: $name,
trafficType: $trafficType,
killed: $killed,
treatments: ${treatments.toString()},
changeNumber: $changeNumber,
config: $configs,
defaultTreatment: $defaultTreatment,
sets: ${sets.toString()}
$_keyName: $name,
$_keyTrafficType: $trafficType,
$_keyKilled: $killed,
$_keyTreatments: ${treatments.toString()},
$_keyChangeNumber: $changeNumber,
$_keyConfigs: $configs,
$_keyDefaultTreatment: $defaultTreatment,
$_keySets: ${sets.toString()},
$_keyImpressionsDisabled: $impressionsDisabled
}''';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';

void main() {
test('negative expirationDays defaults to 10', () {
var config = RolloutCacheConfiguration(expirationDays: -1);

expect(config.expirationDays, 10);
});

test('zero expirationDays defaults to 10', () {
var config = RolloutCacheConfiguration(expirationDays: 0);

expect(config.expirationDays, 10);
});

test('default values', () {
var config = RolloutCacheConfiguration();

expect(config.expirationDays, 10);
expect(config.clearOnInit, false);
});
}
2 changes: 2 additions & 0 deletions splitio_platform_interface/test/split_view_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ void main() {
'trafficType': 'default',
'defaultTreatment': 'on',
'sets': ['set1', 'set2'],
'impressionsDisabled': true,
});

expect(splitView?.name, 'my_split');
Expand All @@ -34,5 +35,6 @@ void main() {
expect(splitView?.trafficType, 'default');
expect(splitView?.defaultTreatment, 'on');
expect(splitView?.sets, ['set1', 'set2']);
expect(splitView?.impressionsDisabled, true);
});
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:splitio_platform_interface/split_certificate_pinning_configuration.dart';
import 'package:splitio_platform_interface/split_configuration.dart';
import 'package:splitio_platform_interface/split_rollout_cache_configuration.dart';
import 'package:splitio_platform_interface/split_sync_config.dart';

void main() {
Expand Down Expand Up @@ -34,7 +35,8 @@ void main() {
certificatePinningConfiguration: CertificatePinningConfiguration()
.addPin('host1', 'pin1')
.addPin('host2', 'pin3')
.addPin('host1', 'pin2'));
.addPin('host1', 'pin2'),
rolloutCacheConfiguration: RolloutCacheConfiguration(expirationDays: 15, clearOnInit: true));

expect(config.configurationMap['eventFlushInterval'], 2000);
expect(config.configurationMap['eventsPerPush'], 300);
Expand Down Expand Up @@ -71,6 +73,8 @@ void main() {
'host1': ['pin1', 'pin2'],
'host2': ['pin3']
});
expect(config.configurationMap['rolloutCacheConfiguration']['expirationDays'], 15);
expect(config.configurationMap['rolloutCacheConfiguration']['clearOnInit'], true);
});

test('no special values leaves map empty', () async {
Expand Down
Loading