diff --git a/src/MicrodataParser.php b/src/MicrodataParser.php index 0e5eb22..19d32a5 100644 --- a/src/MicrodataParser.php +++ b/src/MicrodataParser.php @@ -4,24 +4,34 @@ namespace YusufKandemir\MicrodataParser; class MicrodataParser { + /** @var callable|null */ + protected $absoluteUriHandler; + + /** + * @param callable|null $absoluteUriHandler + * + * @see MicrodataElementParser::$absoluteUriHandler + */ + public function __construct(callable $absoluteUriHandler = null) + { + $this->absoluteUriHandler = $absoluteUriHandler; + } + /** * Parses HTML string, extracts microdata from it * * @param string $html HTML string to be parsed * @param string $documentURI DocumentURI to be used in absolutizing URIs - * @param callable|null $absoluteUriHandler - * - * @see MicrodataElementParser::$absoluteUriHandler * * @return \stdClass */ - public function parseHTML(string $html, string $documentURI = '', callable $absoluteUriHandler = null) : \stdClass + public function parseHTML(string $html, string $documentURI = '') : \stdClass { $dom = new \DOMDocument; $dom->loadHTML($html, \LIBXML_NOERROR); $dom->documentURI = $documentURI; - return $this->parse($dom, $absoluteUriHandler); + return $this->parse($dom); } /** @@ -29,19 +39,16 @@ class MicrodataParser * * @param string $path Path to the file to be parsed * @param string $documentURI DocumentURI to be used in absolutizing URIs - * @param callable|null $absoluteUriHandler - * - * @see MicrodataElementParser::$absoluteUriHandler * * @return \stdClass */ - public function parseHTMLFile(string $path, string $documentURI = '', callable $absoluteUriHandler = null) : \stdClass + public function parseHTMLFile(string $path, string $documentURI = '') : \stdClass { $dom = new \DOMDocument; $dom->loadHTMLFile($path, \LIBXML_NOERROR); $dom->documentURI = $documentURI; - return $this->parse($dom, $absoluteUriHandler); + return $this->parse($dom); } /** @@ -65,17 +72,30 @@ class MicrodataParser /** * @param \DOMDocument $dom - * @param callable|null $absoluteUriHandler * * @see MicrodataElementParser::$absoluteUriHandler * * @return \stdClass */ - protected function parse(\DOMDocument $dom, callable $absoluteUriHandler = null) : \stdClass + protected function parse(\DOMDocument $dom) : \stdClass { - $elementParser = new MicrodataElementParser($absoluteUriHandler); + $elementParser = new MicrodataElementParser($this->absoluteUriHandler); $documentParser = new MicrodataDocumentParser($dom, $elementParser); return $documentParser->parse(); } + + /** + * @param callable|null $absoluteUriHandler + * + * @see MicrodataElementParser::$absoluteUriHandler + * + * @return MicrodataParser + */ + public function setAbsoluteUriHandler(callable $absoluteUriHandler = null) : self + { + $this->absoluteUriHandler = $absoluteUriHandler; + + return $this; + } } diff --git a/tests/MicrodataParserTest.php b/tests/MicrodataParserTest.php index dd5094e..1cc2988 100644 --- a/tests/MicrodataParserTest.php +++ b/tests/MicrodataParserTest.php @@ -68,7 +68,9 @@ class MicrodataParserTest extends DataDrivenTestCase return $baseUri . $value; }; - $resultAfter = $parser->parseHTML($data['source'], $data['uri'], $absoluteUriHandler); + $resultAfter = $parser + ->setAbsoluteUriHandler($absoluteUriHandler) + ->parseHTML($data['source'], $data['uri']); $resultAfterUri = $resultAfter->items[0]->properties->work[0]; $this->assertContains($baseUri, $resultAfterUri);