Skip to content
This repository has been archived by the owner on Feb 24, 2022. It is now read-only.

Commit

Permalink
add instance
Browse files Browse the repository at this point in the history
  • Loading branch information
k88hudson committed Jul 15, 2016
1 parent 3e0a015 commit 1b88019
Showing 1 changed file with 47 additions and 30 deletions.
77 changes: 47 additions & 30 deletions parser.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,57 @@
const {dom, rule, ruleset} = require('fathom-web');
const DEFAULT_RULESET = require('./lib/default-ruleset');

const MetadataParser = {
metadataRules: Object.assign({}, DEFAULT_RULESET),
buildRuleset(name, rules) {
const reversedRules = Array.from(rules).reverse();
const builtRuleset = ruleset(...reversedRules.map(([query, handler], order) => rule(
dom(query),
node => [{
score: order,
flavor: name,
notes: handler(node),
}]
)));
function buildRuleset(name, rules) {
const reversedRules = Array.from(rules).reverse();
const builtRuleset = ruleset(...reversedRules.map(([query, handler], order) => rule(
dom(query),
node => [{
score: order,
flavor: name,
notes: handler(node),
}]
)));

return doc => {
const kb = builtRuleset.score(doc);
const maxNode = kb.max(name);
if (maxNode) {
const value = maxNode.flavors.get(name);
if (value) {
return value.trim();
}
return doc => {
const kb = builtRuleset.score(doc);
const maxNode = kb.max(name);
if (maxNode) {
const value = maxNode.flavors.get(name);
if (value) {
return value.trim();
}
};
},
getMetadata(doc) {
const metadata = {};

Object.keys(MetadataParser.metadataRules).forEach(metadataKey => {
const metadataRule = MetadataParser.buildRuleset(metadataKey, MetadataParser.metadataRules[metadataKey]);
metadata[metadataKey] = metadataRule(doc);
});
}
};
}

function getMetadata(doc, rules) {
return Object.keys(rules).reduce((metadata, key) => {
metadata[key] = buildRuleset(key, rules[key])(doc);
return metadata;
}, {});
}

class MetadataParser {
constructor(customRules = {}, options = {}) {
this._rules = options.replace ? customRules : Object.assign({}, MetadataParser.metadataRules, customRules);
}
get rules() {
return this._rules;
}
extend(key, rules, prepend) {
if (!this._rules[key]) this._rules[key] = [];
if (prepend) {
this._rules[key] = rules.concat(this._rules[key]);
} else {
this._rules[key] = this._rules[key].concat(rules);
}
}
getMetadata(doc) {
return getMetadata(doc, this._rules);
}
};
}

MetadataParser.metadataRules = Object.assign({}, DEFAULT_RULESET);
MetadataParser.buildRuleset = buildRuleset;
MetadataParser.getMetadata = doc => getMetadata(doc, MetadataParser.metadataRules);
module.exports = MetadataParser;

0 comments on commit 1b88019

Please sign in to comment.