Skip to content

Commit

Permalink
[ Add ] added comments for contorllers
Browse files Browse the repository at this point in the history
  • Loading branch information
anasfik committed Dec 6, 2023
1 parent 6e7e74f commit 84716b6
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 14 deletions.
23 changes: 15 additions & 8 deletions lib/src/etc/controllers/config_file.dart
Original file line number Diff line number Diff line change
@@ -1,31 +1,37 @@
import 'dart:io';

import 'package:args/src/arg_results.dart';
import 'package:langsync/src/etc/controllers/json.dart';
import 'package:langsync/src/etc/controllers/yaml.dart';
import 'package:langsync/src/etc/extensions.dart';
import 'package:mason_logger/mason_logger.dart';
import 'package:meta/meta.dart';

import 'package:langsync/src/etc/controllers/json.dart';
import 'package:langsync/src/etc/controllers/yaml.dart';

/// Decided and manages the LangSync config file controller.
abstract class ConfigFileController {
/// Created the convenable [ConfigFileController] from the [argResults] of the CLI call.
/// Created the convenable [ConfigFileController] from the [argResults].
/// If no [argResults] are provided, the default controller is returned.
static ConfigFileController fromArgResults(ArgResults argResults) {
final isJson = argResults['json'] == true;
final isYaml = argResults['yaml'] == true;

if (isJson) {
return JsonController();
} else if (isYaml) {
return YamlController();
final existentsControllers = _controllers.entries
.where(
(entry) =>
isJson && entry.key.contains('json') ||
isYaml && entry.key.contains('yaml'),
)
.toList();

if (existentsControllers.isNotEmpty) {
return existentsControllers.first.value;
} else {
return defaultController;
}
}

/// The controllers that are supported by LangSync, the goal of this implementation is to make it easy to locate the expected config file name of each and to be able to add more in the future.
@protected
static final Map<String, ConfigFileController> _controllers = [
YamlController(),
JsonController(),
Expand Down Expand Up @@ -88,6 +94,7 @@ abstract class ConfigFileController {
}

/// Validates the config file fields of LangSync, this is universal and static because it relies on the config file content parsed as a map.
@mustCallSuper
bool validateConfigFields(Map<dynamic, dynamic> parsedConfigAsMap) {
final langsyncConfig = parsedConfigAsMap['langsync'] as Map?;

Expand Down
3 changes: 3 additions & 0 deletions lib/src/etc/controllers/json.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import 'package:langsync/src/etc/extensions.dart';

/// A JSON config file controller.
class JsonController extends ConfigFileController {
/// The config file reference.
@override
File get configFileRef => File('./langsync.json');

/// The config parsed as a [Map].
@override
Future<Map<dynamic, dynamic>> parsed() {
return super.parsedConfigFileControllerContent(
Expand All @@ -18,6 +20,7 @@ class JsonController extends ConfigFileController {
);
}

/// Writes the new [config] to the config file.
@override
void writeNewConfig(Map<String, dynamic> config) {
return super.writeToConfigFileController(
Expand Down
16 changes: 10 additions & 6 deletions lib/src/etc/controllers/yaml.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import 'package:langsync/src/etc/controllers/config_file.dart';
import 'package:langsync/src/etc/extensions.dart';
import 'package:yaml/yaml.dart' as yaml;

/// A YAML config file controller.
class YamlController extends ConfigFileController {
/// The config file reference.
@override
File get configFileRef => File('./langsync.yaml');

/// The config parsed as a [Map].
@override
Future<Map<dynamic, dynamic>> parsed() async {
return super.parsedConfigFileControllerContent(
Expand All @@ -17,19 +20,20 @@ class YamlController extends ConfigFileController {
);
}

/// Writes the new [config] to the config file.
@override
void writeNewConfig(Map<String, dynamic> config) async {
super.writeToConfigFileController('langsync:\n');

await _iterateAndWriteToConfigFileController(config);
return _iterateAndWriteToConfigFileController(config);
}

Future<void> _iterateAndWriteToConfigFileController(
/// Iterates over the [config] and writes it to the config file.
void _iterateAndWriteToConfigFileController(
Map<dynamic, dynamic> config,
) async {
super.iterateOverConfig(
) {
return super.iterateOverConfig(
config,
callback: (entry) async {
callback: (entry) {
if (entry.value is String) {
if ((entry.value as String).isPathToFileOrFolder()) {
super.writeToConfigFileController(
Expand Down

0 comments on commit 84716b6

Please sign in to comment.