summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-01-27 22:51:07 +0100
committerSamy Pessé <samypesse@gmail.com>2016-01-27 22:51:07 +0100
commit36f2f5d52e54c03036f05225df3f58e9833f3e71 (patch)
tree67fe034938ba51a09fcaf6a4bf134631be09f20b
parentddc99104d4394cc21eaa615b01d73ec001ac7a16 (diff)
downloadgitbook-36f2f5d52e54c03036f05225df3f58e9833f3e71.zip
gitbook-36f2f5d52e54c03036f05225df3f58e9833f3e71.tar.gz
gitbook-36f2f5d52e54c03036f05225df3f58e9833f3e71.tar.bz2
Add method glossary.find
-rw-r--r--lib/backbone/glossary.js19
-rw-r--r--test/glossary.js23
2 files changed, 24 insertions, 18 deletions
diff --git a/lib/backbone/glossary.js b/lib/backbone/glossary.js
index 0f5e567..22c4d42 100644
--- a/lib/backbone/glossary.js
+++ b/lib/backbone/glossary.js
@@ -2,6 +2,15 @@ var _ = require('lodash');
var util = require('util');
var BackboneFile = require('./file');
+// Normalize a glossary entry name into a unique id
+function nameToId(name) {
+ return name.toLowerCase()
+ .replace(/[\/\\\?\%\*\:\;\|\"\'\\<\\>\#\$\(\)\!\.\@]/g, '')
+ .replace(/ /g, '_')
+ .trim();
+}
+
+
/*
A glossary entry is represented by a name and a short description
An unique id for the entry is generated using its name
@@ -19,10 +28,7 @@ function GlossaryEntry(name, description) {
// Normalizes a glossary entry's name to create an ID
GlossaryEntry.prototype.getId = function() {
- return this.name.toLowerCase()
- .replace(/[\/\\\?\%\*\:\;\|\"\'\\<\\>\#\$\(\)\!\.\@]/g, '')
- .replace(/ /g, '_')
- .trim();
+ return nameToId(this.name);
};
@@ -54,6 +60,11 @@ Glossary.prototype.get = function(id) {
});
};
+// Find an entry by its name
+Glossary.prototype.find = function(name) {
+ return this.get(nameToId(name));
+};
+
// Return false if glossary has entries (and exists)
Glossary.prototype.isEmpty = function(id) {
return _.size(this.entries) === 0;
diff --git a/test/glossary.js b/test/glossary.js
index e2c9e2b..116eabf 100644
--- a/test/glossary.js
+++ b/test/glossary.js
@@ -55,22 +55,17 @@ describe('Glossary', function() {
should.not.exist(entry);
});
});
- });
-
- it('should parse glossary entries', function() {
- return mock.setupDefaultBook({
- 'GLOSSARY.md': '# Glossary\n\n### Hello World\n\nThis is an entry'
- })
- .then(function(book) {
- return book.prepareConfig()
-
- .then(function() {
- return book.glossary.load();
- })
- .then(function() {
-
+ describe('glossary.find', function() {
+ it('should return an existing entry', function() {
+ var entry = book.glossary.find('HeLLo World');
+ should.exist(entry);
+ entry.id.should.equal('hello_world');
+ });
+ it('should undefined return non existing entry', function() {
+ var entry = book.glossary.find('Hello');
+ should.not.exist(entry);
});
});
});