104 lines
3 KiB
Dart
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');
|
|
}
|