| @@ 27-63 (lines=37) @@ | ||
| 24 | * |
|
| 25 | * @author Bernhard Schussek <[email protected]> |
|
| 26 | */ |
|
| 27 | class KeyValueStoreChangeStreamGenerator implements ServiceGenerator |
|
| 28 | { |
|
| 29 | private static $defaultOptions = array( |
|
| 30 | 'store' => array( |
|
| 31 | 'type' => 'json', |
|
| 32 | ), |
|
| 33 | ); |
|
| 34 | ||
| 35 | /** |
|
| 36 | * {@inheritdoc} |
|
| 37 | */ |
|
| 38 | public function generateNewInstance($varName, Method $targetMethod, GeneratorRegistry $generatorRegistry, array $options = array()) |
|
| 39 | { |
|
| 40 | Assert::keyExists($options, 'root-dir', 'The "root-dir" option is missing.'); |
|
| 41 | ||
| 42 | $options = array_replace_recursive(self::$defaultOptions, $options); |
|
| 43 | ||
| 44 | Assert::stringNotEmpty($options['root-dir'], 'The "root-dir" option should be a non-empty string. Got: %s'); |
|
| 45 | Assert::isArray($options['store'], 'The "store" option should be an array. Got: %s'); |
|
| 46 | ||
| 47 | if (!isset($options['store']['path'])) { |
|
| 48 | $options['store']['path'] = $targetMethod->getClass()->getDirectory().'/change-stream.json'; |
|
| 49 | } |
|
| 50 | ||
| 51 | $kvsGenerator = $generatorRegistry->getServiceGenerator(GeneratorRegistry::KEY_VALUE_STORE, $options['store']['type']); |
|
| 52 | $kvsOptions = $options['store']; |
|
| 53 | $kvsOptions['root-dir'] = $options['root-dir']; |
|
| 54 | $kvsGenerator->generateNewInstance('store', $targetMethod, $generatorRegistry, $kvsOptions); |
|
| 55 | ||
| 56 | $targetMethod->getClass()->addImport(new Import('Puli\Repository\ChangeStream\KeyValueStoreChangeStream')); |
|
| 57 | ||
| 58 | $targetMethod->addBody(sprintf( |
|
| 59 | '$%s = new KeyValueStoreChangeStream($store);', |
|
| 60 | $varName |
|
| 61 | )); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 27-64 (lines=38) @@ | ||
| 24 | * |
|
| 25 | * @author Bernhard Schussek <[email protected]> |
|
| 26 | */ |
|
| 27 | class KeyValueStoreDiscoveryGenerator implements ServiceGenerator |
|
| 28 | { |
|
| 29 | private static $defaultOptions = array( |
|
| 30 | 'store' => array( |
|
| 31 | 'type' => 'json', |
|
| 32 | ), |
|
| 33 | ); |
|
| 34 | ||
| 35 | /** |
|
| 36 | * {@inheritdoc} |
|
| 37 | */ |
|
| 38 | public function generateNewInstance($varName, Method $targetMethod, GeneratorRegistry $generatorRegistry, array $options = array()) |
|
| 39 | { |
|
| 40 | Assert::keyExists($options, 'root-dir', 'The "root-dir" option is missing.'); |
|
| 41 | ||
| 42 | $options = array_replace_recursive(self::$defaultOptions, $options); |
|
| 43 | ||
| 44 | Assert::stringNotEmpty($options['root-dir'], 'The "root-dir" option should be a non-empty string. Got: %s'); |
|
| 45 | Assert::isArray($options['store'], 'The "store" option should be an array. Got: %s'); |
|
| 46 | ||
| 47 | if (!isset($options['store']['path'])) { |
|
| 48 | $options['store']['path'] = $targetMethod->getClass()->getDirectory().'/bindings.json'; |
|
| 49 | } |
|
| 50 | ||
| 51 | $kvsGenerator = $generatorRegistry->getServiceGenerator(GeneratorRegistry::KEY_VALUE_STORE, $options['store']['type']); |
|
| 52 | $kvsOptions = $options['store']; |
|
| 53 | $kvsOptions['root-dir'] = $options['root-dir']; |
|
| 54 | $kvsGenerator->generateNewInstance('store', $targetMethod, $generatorRegistry, $kvsOptions); |
|
| 55 | ||
| 56 | $targetMethod->getClass()->addImport(new Import('Puli\Discovery\KeyValueStoreDiscovery')); |
|
| 57 | $targetMethod->getClass()->addImport(new Import('Puli\Discovery\Binding\Initializer\ResourceBindingInitializer')); |
|
| 58 | ||
| 59 | $targetMethod->addBody(sprintf( |
|
| 60 | "$%s = new KeyValueStoreDiscovery(\$store, array(\n new ResourceBindingInitializer(\$repo),\n));", |
|
| 61 | $varName |
|
| 62 | )); |
|
| 63 | } |
|
| 64 | } |
|
| 65 | ||