/** * Does the work. Determines the appropriate path to write to, and executes * the class-specific reflector. * * @param OutputInterface $output The command-line output. * @return void */ public function process(OutputInterface $output) { $output->writeln($this->formatter->yellow->apply('WRITING CLASS DEFINITIONS')); // Resolve output path variables Dispatcher::get()->dispatch('parse.user.reflect.all.pre'); $this->path_pattern = str_replace('%STAGE%', ConsoleUtil::asciify(ConfigStore::get('vanity.stage')), $this->path_pattern); $this->path_pattern = str_replace('%VERSION%', ConsoleUtil::asciify(ConfigStore::get('vanity.version')), $this->path_pattern); $this->path_pattern = str_replace('%FORMAT%', 'json', $this->path_pattern); foreach ($this->classes as $class) { $reflect = new Reflect($class); $reflect->process(); $reflect->save($this->path_pattern, $output); } Dispatcher::get()->dispatch('parse.user.reflect.all.post'); // Count the classes echo PHP_EOL; $files = Find::files($this->path_pattern, '*.json'); $count = count($files['absolute']); $output->writeln('Wrote ' . $this->formatter->info->apply(" {$count} ") . ' class definition ' . ConsoleUtil::pluralize($count, 'file', 'files') . '.'); }
/** * Execute the logic for the command. * * @event EventStore vanity.command.parse.files.pre * @event EventStore vanity.command.parse.files.post * @event EventStore vanity.command.parse.classlist.pre * @event EventStore vanity.command.parse.classlist.post * @event EventStore vanity.command.parse.reflection.pre * @event EventStore vanity.command.parse.reflection.post * @event Event vanity.command.parse.warn.dependencies * @event Event vanity.command.parse.warn.inconsistencies * @event Event vanity.command.parse.report.dependencies * @event Event vanity.command.parse.report.inconsistencies * @event Event vanity.command.log_path * @event Event vanity.command.complete * @param InputInterface $input The command-line input. * @param OutputInterface $output The command-line output. * @return void */ protected function execute(InputInterface $input, OutputInterface $output) { echo PHP_EOL; // Resolve the configuration and display it $config = new ConfigResolve($input, __DIR__ . '/parse_configs.php'); $config->read(); $this->displayConfig($output); Logger::get()->{ConfigStore::get('log.commands')}('Running command:', array($this->getName())); if ($input->getOption('vanity.view_config')) { exit; } // Load the bootstrap, if any if (file_exists($bootstrap = ConfigStore::get('vanity.bootstrap'))) { include_once $bootstrap; } #--------------------------------------------------------------------------# $output->writeln($this->formatter->yellow->apply('MATCHED FILES:')); // Parse the pattern to determine the files to match $path = pathinfo(ConfigStore::get('source.input'), PATHINFO_DIRNAME); $pattern = pathinfo(ConfigStore::get('source.input'), PATHINFO_BASENAME); $files = Find::files($path, $pattern); $this->triggerEvent('vanity.command.parse.files.pre', new EventStore(array('files' => &$files))); // Display the list of matches foreach ($files['relative'] as $file) { $output->writeln(TAB . $this->formatter->green->apply('-> ') . $file); } // Count the matches echo PHP_EOL; $count = count($files['relative']); $output->writeln('Matched ' . $this->formatter->info->apply(" {$count} ") . ' ' . ConsoleUtil::pluralize($count, 'file', 'files') . '.'); echo PHP_EOL; // Trigger events $this->triggerEvent('vanity.command.parse.files.post', new EventStore(array('files' => &$files))); #--------------------------------------------------------------------------# // Find the classes $output->writeln($this->formatter->yellow->apply('MATCHED CLASSES:')); $classes = array_filter(Find::classes($files['absolute']), function ($class) { if ($regex = ConfigStore::get('source.exclude.classes')) { return !preg_match($regex, $class); } return true; }); $this->triggerEvent('vanity.command.parse.classlist.pre', new EventStore(array('classes' => &$classes))); // Display the classes foreach ($classes as $class) { $output->writeln(TAB . $this->formatter->green->apply('-> ') . $class); } // Count the classes echo PHP_EOL; $count = count($classes); $output->writeln('Found ' . $this->formatter->info->apply(" {$count} ") . ' ' . ConsoleUtil::pluralize($count, 'class', 'classes') . ' to document.'); echo PHP_EOL; $this->triggerEvent('vanity.command.parse.classlist.post', new EventStore(array('classes' => &$classes))); #--------------------------------------------------------------------------# $reflector = new ReflectAll($classes, ConfigStore::get('source.output')); $this->triggerEvent('vanity.command.parse.reflection.pre', new EventStore(array('reflector' => &$reflector))); $reflector->process($output); $this->triggerEvent('vanity.command.parse.reflection.post', new EventStore(array('reflector' => &$reflector))); #--------------------------------------------------------------------------# // Warnings if (ConfigStore::get('warn.dependencies')) { $this->triggerEvent('vanity.command.parse.warn.dependencies'); } if (ConfigStore::get('warn.inconsistencies')) { $this->triggerEvent('vanity.command.parse.warn.inconsistencies'); } // Reports if (ConfigStore::get('report.dependencies')) { $this->triggerEvent('vanity.command.parse.report.dependencies'); } if (ConfigStore::get('report.inconsistencies')) { $this->triggerEvent('vanity.command.parse.report.inconsistencies'); } $this->triggerLogMessageEvent(); $this->triggerEvent('vanity.command.complete'); echo PHP_EOL; }
/** * Execute the logic for the command. * * @event Event vanity.command.generate.files.pre * @event Event vanity.command.generate.files.post * @event Event vanity.command.complete * @param InputInterface $input The command-line input. * @param OutputInterface $output The command-line output. * @return void */ protected function execute(InputInterface $input, OutputInterface $output) { echo PHP_EOL; // Resolve the configuration and display it $config = new ConfigResolve($input, __DIR__ . '/generate_configs.php'); $config->read(); $this->displayConfig($output); Logger::get()->{ConfigStore::get('log.commands')}('Running command:', array($this->getName())); if ($input->getOption('vanity.view_config')) { exit; } // Load the bootstrap, if any if (file_exists($bootstrap = ConfigStore::get('vanity.bootstrap'))) { include_once $bootstrap; } $output->writeln($this->formatter->yellow->apply('SOURCE DEFINITIONS TO DOCUMENT:')); // Parse the pattern to determine the files to match $path = pathinfo(ConfigStore::get('generator.input'), PATHINFO_DIRNAME); $pattern = pathinfo(ConfigStore::get('generator.input'), PATHINFO_BASENAME); $path = str_replace('%STAGE%', ConsoleUtil::asciify(ConfigStore::get('vanity.stage')), $path); $path = str_replace('%VERSION%', ConsoleUtil::asciify(ConfigStore::get('vanity.version')), $path); $files = Find::files($path, $pattern); $this->triggerEvent('vanity.command.generate.files.pre', new EventStore(array('files' => &$files))); // Display the list of matches foreach ($files['relative'] as $file) { $output->writeln(TAB . $this->formatter->green->apply('-> ') . $file); } // Count the matches echo PHP_EOL; $count = count($files['relative']); $output->writeln('Matched ' . $this->formatter->info->apply(" {$count} ") . ' ' . ConsoleUtil::pluralize($count, 'file', 'files') . '.'); echo PHP_EOL; // Trigger events $this->triggerEvent('vanity.command.generate.files.post', new EventStore(array('files' => &$files))); #--------------------------------------------------------------------------# foreach (ConfigStore::get('generator.formats') as $format) { $this->triggerEvent("vanity.generate.format.{$format}.pre", new EventStore(array('files' => &$files, 'input' => ConfigStore::get('generator.input'), 'output' => ConfigStore::get('generator.output')))); $this->triggerEvent("vanity.generate.format.{$format}", new EventStore(array('files' => &$files, 'input' => ConfigStore::get('generator.input'), 'output' => ConfigStore::get('generator.output')))); $this->triggerEvent("vanity.generate.format.{$format}.post", new EventStore(array('files' => &$files, 'input' => ConfigStore::get('generator.input'), 'output' => ConfigStore::get('generator.output')))); } #--------------------------------------------------------------------------# $this->triggerLogMessageEvent(); $this->triggerEvent('vanity.command.complete'); echo PHP_EOL; }