parse static method

RoleModel parse(
  1. String configYaml,
  2. Set<String> allKeys
)

Reads the config, expanding platformOnlyKeys, tenantKeys and allBut: against the keys the Blueprint uses (allKeys).

Implementation

static RoleModel parse(String configYaml, Set<String> allKeys) {
  final cfg = loadYaml(configYaml) as YamlMap;
  final platformOnly = {
    for (final k in cfg['platformOnlyKeys'] as YamlList) '$k',
  };
  final tenant = allKeys.difference(platformOnly);
  final roleKeys = <String, Set<String>>{};
  (cfg['roleKeys'] as YamlMap).forEach((role, keys) {
    final set = <String>{};
    for (final k in keys as YamlList) {
      if (k == 'platformOnlyKeys') {
        set.addAll(platformOnly);
      } else if (k == 'tenantKeys') {
        set.addAll(tenant);
      } else {
        set.add('$k');
      }
    }
    roleKeys['$role'] = set;
  });
  final roles = roleKeys.keys.toSet();
  Set<String> roleSet(Object? v) => v is YamlMap
      ? roles.difference({for (final r in v['allBut'] as YamlList) '$r'})
      : {for (final r in v as YamlList) '$r'};
  final handlers = <String, Set<String>>{};
  (cfg['handlerRoles'] as YamlMap).forEach(
    (h, v) => handlers['$h'] = roleSet(v),
  );
  final actors = <String, Set<String>>{};
  (cfg['actorRoles'] as YamlMap).forEach((a, v) => actors['$a'] = roleSet(v));
  return RoleModel(
    roleKeys,
    handlers,
    actors,
    {for (final o in cfg['otherActorOperations'] as YamlList) '$o'},
    [for (final q in cfg['pendingQuestions'] as YamlList) '$q'],
  );
}