platform/packages/config/example/config_example.dart
2024-12-15 22:51:33 -07:00

104 lines
3 KiB
Dart

import 'package:platform_config/platform_config.dart';
void main() {
// Create a new Repository instance with some initial configuration
final config = Repository({
'app': {
'name': 'Protevus Demo App',
'version': '1.0.0',
'debug': true,
},
'database': {
'default': 'mysql',
'connections': {
'mysql': {
'host': 'localhost',
'port': 3306,
'database': 'protevus_demo',
'username': 'demo_user',
'password': 'secret',
},
'redis': {
'host': 'localhost',
'port': 6379,
},
},
},
'cache': {
'default': 'redis',
'stores': {
'redis': {
'driver': 'redis',
'connection': 'default',
},
'file': {
'driver': 'file',
'path': '/tmp/cache',
},
},
},
'logging': {
'channels': ['file', 'console'],
'level': 'info',
},
});
// Demonstrate usage of various methods
print('Application Name: ${config.string('app.name')}');
print('Debug Mode: ${config.boolean('app.debug') ? 'Enabled' : 'Disabled'}');
// Using get with a default value
print('API Version: ${config.get('app.api_version', 'v1')}');
// Accessing nested configuration
final dbConfig = config.get('database.connections.mysql');
print('Database Configuration:');
print(' Host: ${dbConfig['host']}');
print(' Port: ${dbConfig['port']}');
print(' Database: ${dbConfig['database']}');
// Using type-specific getters
final redisPort = config.integer('database.connections.redis.port');
print('Redis Port: $redisPort');
// Checking for existence of a key
if (config.has('cache.stores.memcached')) {
print('Memcached configuration exists');
} else {
print('Memcached configuration does not exist');
}
// Setting a new value
config.set('app.timezone', 'UTC');
print('Timezone: ${config.string('app.timezone')}');
// Getting multiple values at once
final loggingConfig = config.getMany(['logging.channels', 'logging.level']);
print('Logging Configuration:');
print(' Channels: ${loggingConfig['logging.channels']}');
print(' Level: ${loggingConfig['logging.level']}');
// Using array method
final logChannels = config.array('logging.channels');
print('Log Channels: $logChannels');
// Demonstrating error handling
try {
config.integer('app.name');
} catch (e) {
print('Error: $e');
}
// Using the Repository as a Map
config['new.feature.enabled'] = true;
print('New Feature Enabled: ${config['new.feature.enabled']}');
// Demonstrating Macroable functionality
Repository.macro('getConnectionUrl', (Repository repo, String connection) {
final conn = repo.get('database.connections.$connection');
return 'mysql://${conn['username']}:${conn['password']}@${conn['host']}:${conn['port']}/${conn['database']}';
});
final mysqlUrl = config.callMacro('getConnectionUrl', ['mysql']);
print('MySQL Connection URL: $mysqlUrl');
}