diff --git a/parser.js b/parser.js index a144eb3..2942ed3 100644 --- a/parser.js +++ b/parser.js @@ -33,7 +33,11 @@ function getMetadata(doc, rules) { class MetadataParser { constructor(customRules = {}, options = {}) { - this._rules = options.replace ? customRules : Object.assign({}, MetadataParser.metadataRules, customRules); + if (options.replace) { + this._rules = customRules; + } else { + this._rules = Object.assign({}, MetadataParser.metadataRules, customRules); + } } get rules() { return this._rules; diff --git a/tests/MetadataParser.test.js b/tests/MetadataParser.test.js new file mode 100644 index 0000000..a20de8c --- /dev/null +++ b/tests/MetadataParser.test.js @@ -0,0 +1,26 @@ +const {assert} = require('chai'); +const MetadataParser = require('../parser'); +const {stringToDom} = require('./test-utils'); +const DEFAULT_RULESET = require("../lib/default-ruleset"); + +describe("MetadataParser", () => { + it("should extend the normal rules", () => { + const parser = new MetadataParser({ + site_name: [['meta[property="og:site_name"]', node => node.element.content]] + }); + const result = parser.getMetadata(stringToDom('')); + assert.equal(result.site_name, "foo"); + }); + + it("should should replace the normal rules", () => { + const newRules = { + foo: [['meta[property="og:foo"]', node => node.element.content]] + }; + const parser = new MetadataParser(newRules, {replace: true}); + const result = parser.getMetadata(stringToDom(` + + + `)); + assert.deepEqual(result, {foo: "bar"}); + }); +});