/** * @param \Psr\Log\LoggerInterface $logger * @param string $buildFolder * @param string|null $file * * @return \Browscap\Writer\WriterCollection */ public function createCollection(LoggerInterface $logger, $buildFolder, $file = null) { $writerCollection = new WriterCollection(); if (null === $file) { $file = $buildFolder . '/full_php_browscap.ini'; } $fullFilter = new FullFilter(); $fullPhpWriter = new IniWriter($file); $formatter = new PhpFormatter(); $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); return $writerCollection->addWriter($fullPhpWriter); }
/** * @param \Psr\Log\LoggerInterface $logger * @param string $buildFolder * * @return \Browscap\Writer\WriterCollection */ public function createCollection(LoggerInterface $logger, $buildFolder) { $writerCollection = new WriterCollection(); $fullFilter = new FullFilter(); $stdFilter = new StandardFilter(); $liteFilter = new LiteFilter(); $fullAspWriter = new IniWriter($buildFolder . '/full_asp_browscap.ini'); $formatter = new AspFormatter(); $fullAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); $writerCollection->addWriter($fullAspWriter); $fullPhpWriter = new IniWriter($buildFolder . '/full_php_browscap.ini'); $formatter = new PhpFormatter(); $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); $writerCollection->addWriter($fullPhpWriter); $stdAspWriter = new IniWriter($buildFolder . '/browscap.ini'); $formatter = new AspFormatter(); $stdAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter); $writerCollection->addWriter($stdAspWriter); $stdPhpWriter = new IniWriter($buildFolder . '/php_browscap.ini'); $formatter = new PhpFormatter(); $stdPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter); $writerCollection->addWriter($stdPhpWriter); $liteAspWriter = new IniWriter($buildFolder . '/lite_asp_browscap.ini'); $formatter = new AspFormatter(); $liteAspWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter); $writerCollection->addWriter($liteAspWriter); $litePhpWriter = new IniWriter($buildFolder . '/lite_php_browscap.ini'); $formatter = new PhpFormatter(); $litePhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter); $writerCollection->addWriter($litePhpWriter); $csvWriter = new CsvWriter($buildFolder . '/browscap.csv'); $formatter = new CsvFormatter(); $csvWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); $writerCollection->addWriter($csvWriter); $xmlWriter = new XmlWriter($buildFolder . '/browscap.xml'); $formatter = new XmlFormatter(); $xmlWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter); $writerCollection->addWriter($xmlWriter); $jsonWriter = new JsonWriter($buildFolder . '/browscap.json'); $formatter = new JsonFormatter(); $jsonWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); $writerCollection->addWriter($jsonWriter); $liteJsonWriter = new JsonWriter($buildFolder . '/lite_browscap.json'); $formatter = new JsonFormatter(); $liteJsonWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter); $writerCollection->addWriter($liteJsonWriter); return $writerCollection; }
/** * @param \Psr\Log\LoggerInterface $logger * @param string $buildFolder * * @return \Browscap\Writer\WriterCollection */ public function createCollection(LoggerInterface $logger, $buildFolder) { $writerCollection = new WriterCollection(); $fullFilter = new FullFilter(); $stdFilter = new StandardFilter(); $liteFilter = new LiteFilter(); $fullPhpWriter = new IniWriter($buildFolder . '/full_php_browscap.ini'); $formatter = new PhpFormatter(); $fullPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($fullFilter))->setFilter($fullFilter); $writerCollection->addWriter($fullPhpWriter); $stdPhpWriter = new IniWriter($buildFolder . '/php_browscap.ini'); $formatter = new PhpFormatter(); $stdPhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($stdFilter))->setFilter($stdFilter); $writerCollection->addWriter($stdPhpWriter); $litePhpWriter = new IniWriter($buildFolder . '/lite_php_browscap.ini'); $formatter = new PhpFormatter(); $litePhpWriter->setLogger($logger)->setFormatter($formatter->setFilter($liteFilter))->setFilter($liteFilter); $writerCollection->addWriter($litePhpWriter); return $writerCollection; }
/** * @param \Psr\Log\LoggerInterface $logger * @param string $buildFolder * @param string|null $file * @param array $fields * @param string $format * * @return \Browscap\Writer\WriterCollection */ public function createCollection(LoggerInterface $logger, $buildFolder, $file = null, $fields = array(), $format = self::OUTPUT_FORMAT_PHP) { $writerCollection = new WriterCollection(); if (null === $file) { switch ($format) { case self::OUTPUT_FORMAT_ASP: $file = $buildFolder . '/full_browscap.ini'; break; case self::OUTPUT_FORMAT_CSV: $file = $buildFolder . '/browscap.csv'; break; case self::OUTPUT_FORMAT_XML: $file = $buildFolder . '/browscap.xml'; break; case self::OUTPUT_FORMAT_JSON: $file = $buildFolder . '/browscap.json'; break; case self::OUTPUT_FORMAT_PHP: default: $file = $buildFolder . '/full_php_browscap.ini'; break; } } $filter = new CustomFilter($fields); switch ($format) { case self::OUTPUT_FORMAT_ASP: $writer = new Writer\IniWriter($file); $formatter = new Formatter\AspFormatter(); break; case self::OUTPUT_FORMAT_CSV: $writer = new Writer\CsvWriter($file); $formatter = new Formatter\CsvFormatter(); break; case self::OUTPUT_FORMAT_XML: $writer = new Writer\XmlWriter($file); $formatter = new Formatter\XmlFormatter(); break; case self::OUTPUT_FORMAT_JSON: $writer = new Writer\JsonWriter($file); $formatter = new Formatter\JsonFormatter(); break; case self::OUTPUT_FORMAT_PHP: default: $writer = new Writer\IniWriter($file); $formatter = new Formatter\PhpFormatter(); break; } $writer->setLogger($logger)->setFormatter($formatter->setFilter($filter))->setFilter($filter); $writerCollection->addWriter($writer); return $writerCollection; }
/** * tests rendering the footer after all divisions * * @group writer * @group sourcetest */ public function testRenderAllDivisionsFooter() { $mockWriter = $this->getMock('\\Browscap\\Writer\\CsvWriter', array(), array(), '', false); self::assertSame($this->object, $this->object->addWriter($mockWriter)); self::assertSame($this->object, $this->object->renderAllDivisionsFooter()); }
/** * Entry point for generating builds for a specified version * * @param string $version * @param string $resourceFolder * @param \Psr\Log\LoggerInterface $logger * @param \Browscap\Writer\WriterCollection $writerCollection * @param \Browscap\Helper\CollectionCreator $collectionCreator * * @throws \Exception */ public static function run($version, $resourceFolder, LoggerInterface $logger, WriterCollection $writerCollection, CollectionCreator $collectionCreator) { $logger->info('started creating a data collection'); $dataCollection = new DataCollection($version); $dataCollection->setLogger($logger); $collectionCreator->setLogger($logger)->setDataCollection($dataCollection); $collection = $collectionCreator->createDataCollection($resourceFolder); $logger->info('finished creating a data collection'); $logger->info('started initialisation of writers'); $expander = new Expander(); $expander->setDataCollection($collection)->setLogger($logger); $logger->info('finished initialisation of writers'); $logger->info('started output of header and version'); $comments = ['Provided courtesy of http://browscap.org/', 'Created on ' . $collection->getGenerationDate()->format('l, F j, Y \\a\\t h:i A T'), 'Keep up with the latest goings-on with the project:', 'Follow us on Twitter <https://twitter.com/browscap>, or...', 'Like us on Facebook <https://facebook.com/browscap>, or...', 'Collaborate on GitHub <https://github.com/browscap>, or...', 'Discuss on Google Groups <https://groups.google.com/forum/#!forum/browscap>.']; $writerCollection->setExpander($expander)->fileStart()->renderHeader($comments)->renderVersion($version, $collection); $logger->info('finished output of header and version'); $output = []; $logger->info('started output of divisions'); $division = $collection->getDefaultProperties(); $logger->info('handle division ' . $division->getName()); $writerCollection->renderAllDivisionsHeader($collection)->renderDivisionHeader($division->getName()); $ua = $division->getUserAgents(); $sections = [$ua[0]['userAgent'] => $ua[0]['properties']]; foreach (array_keys($sections) as $sectionName) { $section = $sections[$sectionName]; $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName); } $writerCollection->renderDivisionFooter(); foreach ($collection->getDivisions() as $division) { /** @var \Browscap\Data\Division $division */ // run checks on division before expanding versions because the checked properties do not change between // versions $sections = $expander->expand($division, $division->getName()); $logger->info('checking division ' . $division->getName()); foreach (array_keys($sections) as $sectionName) { $section = $sections[$sectionName]; $collection->checkProperty($sectionName, $section); } $writerCollection->setSilent($division); $versions = $division->getVersions(); foreach ($versions as $version) { list($majorVer, $minorVer) = $expander->getVersionParts($version); $divisionName = $expander->parseProperty($division->getName(), $majorVer, $minorVer); $logger->info('handle division ' . $divisionName); $encodedSections = json_encode($sections); $encodedSections = $expander->parseProperty($encodedSections, $majorVer, $minorVer); $sectionsWithVersion = json_decode($encodedSections, true); $firstElement = current($sectionsWithVersion); $writerCollection->renderDivisionHeader($divisionName, $firstElement['Parent']); foreach (array_keys($sectionsWithVersion) as $sectionName) { if (array_key_exists($sectionName, $output)) { $logger->error('tried to add section "' . $sectionName . '" more than once -> skipped'); continue; } $section = $sectionsWithVersion[$sectionName]; $writerCollection->setSilentSection($section); $writerCollection->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sectionsWithVersion, $sectionName)->renderSectionFooter($sectionName); $output[$sectionName] = $sectionName; } $writerCollection->renderDivisionFooter(); unset($divisionName, $majorVer, $minorVer); } } $division = $collection->getDefaultBrowser(); $logger->info('handle division ' . $division->getName()); $writerCollection->renderDivisionHeader($division->getName()); $ua = $division->getUserAgents(); $sections = [$ua[0]['userAgent'] => array_merge(['Parent' => 'DefaultProperties'], $ua[0]['properties'])]; foreach (array_keys($sections) as $sectionName) { $section = $sections[$sectionName]; $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName); } $writerCollection->renderDivisionFooter()->renderAllDivisionsFooter(); $logger->info('finished output of divisions'); $logger->info('started closing writers'); $writerCollection->fileEnd()->close(); $logger->info('finished closing writers'); }
/** * tests rendering the footer after all divisions * * @group writer * @group sourcetest */ public function testRenderAllDivisionsFooter() { $mockWriter = $this->createMock(\Browscap\Writer\CsvWriter::class); self::assertSame($this->object, $this->object->addWriter($mockWriter)); self::assertSame($this->object, $this->object->renderAllDivisionsFooter()); }