diff --git a/src/diagrams/er/erDb.js b/src/diagrams/er/erDb.js index d43442ad7..556eb2f4f 100644 --- a/src/diagrams/er/erDb.js +++ b/src/diagrams/er/erDb.js @@ -35,12 +35,18 @@ const addEntity = function(name) { const getEntities = () => entities; -const addRelationship = function(entA, rolA, entB, rolB, card) { +/** + * Add a relationship + * @param entA The first entity in the relationship + * @param rolA The role played by the first entity in relation to the second + * @param entB The second entity in the relationship + * @param card The cardinality of the relationship between the two entities + */ +const addRelationship = function(entA, rolA, entB, card) { let rel = { entityA: entA, roleA: rolA, entityB: entB, - roleB: rolB, cardinality: card }; diff --git a/src/diagrams/er/erRenderer.js b/src/diagrams/er/erRenderer.js index 2e18b678c..1ae5a8d6a 100644 --- a/src/diagrams/er/erRenderer.js +++ b/src/diagrams/er/erRenderer.js @@ -100,7 +100,7 @@ const adjustEntities = function(svgNode, graph) { }; const getEdgeName = function(rel) { - return (rel.entityA + rel.roleA + rel.roleB + rel.entityB).replace(/\s/g, ''); + return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ''); }; /** diff --git a/src/diagrams/er/parser/erDiagram.jison b/src/diagrams/er/parser/erDiagram.jison index cdd6090cd..52ac48d3e 100644 --- a/src/diagrams/er/parser/erDiagram.jison +++ b/src/diagrams/er/parser/erDiagram.jison @@ -46,12 +46,12 @@ document ; statement - : entityName relationship entityName ':' role ',' role + : entityName relationship entityName ':' role { yy.addEntity($1); yy.addEntity($3); - yy.addRelationship($1, $5, $3, $7, $2); - /*console.log($1 + $2 + $3 + ':' + $5 + ',' + $7);*/ + yy.addRelationship($1, $5, $3, $2); + /*console.log($1 + $2 + $3 + ':' + $5);*/ }; entityName diff --git a/src/diagrams/er/parser/erDiagram.spec.js b/src/diagrams/er/parser/erDiagram.spec.js index e04c7130d..accdc4a40 100644 --- a/src/diagrams/er/parser/erDiagram.spec.js +++ b/src/diagrams/er/parser/erDiagram.spec.js @@ -15,7 +15,7 @@ describe('when parsing ER diagram it...', function() { }); it('should associate two entities correctly', function() { - erDiagram.parser.parse('erDiagram\nCAR !-?< DRIVER : "insured for", "can drive"'); + erDiagram.parser.parse('erDiagram\nCAR !-?< DRIVER : "insured for"'); const entities = erDb.getEntities(); const relationships = erDb.getRelationships(); const carEntity = entities.CAR; @@ -28,33 +28,31 @@ describe('when parsing ER diagram it...', function() { }); it('should not create duplicate entities', function() { - const line1 = 'CAR !-?< DRIVER : "insured for", "can drive"'; - const line2 = 'DRIVER !-! LICENSE : has, "belongs to"'; + const line1 = 'CAR !-?< DRIVER : "insured for"'; + const line2 = 'DRIVER !-! LICENSE : has'; erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); const entities = erDb.getEntities(); expect(Object.keys(entities).length).toBe(3); }); - it('should create the roles specified', function() { + it('should create the role specified', function() { const teacherRole = 'is teacher of'; - const studentRole = 'is student of'; - const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}", "${studentRole}"`; + const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}"`; erDiagram.parser.parse(`erDiagram\n${line1}`); const rels = erDb.getRelationships(); expect(rels[0].roleA).toBe(`${teacherRole}`); - expect(rels[0].roleB).toBe(`${studentRole}`); }); it('should allow recursive relationships', function() { - erDiagram.parser.parse('erDiagram\nNODE !-?< NODE : "leads to", "comes from"'); + erDiagram.parser.parse('erDiagram\nNODE !-?< NODE : "leads to"'); expect(Object.keys(erDb.getEntities()).length).toBe(1); }); it('should allow more than one relationship between the same two entities', function() { - const line1 = 'CAR !-?< PERSON : "insured for", "may drive"'; - const line2 = 'CAR >?-! PERSON : "owned by", "owns"'; + const line1 = 'CAR !-?< PERSON : "insured for"'; + const line2 = 'CAR >?-! PERSON : "owned by"'; erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); const entities = erDb.getEntities(); const rels = erDb.getRelationships(); @@ -67,12 +65,12 @@ describe('when parsing ER diagram it...', function() { /* TODO */ }); - it ('should not allow relationships between the same two entities unless the roles are different', function() { + it ('should not allow multiple relationships between the same two entities unless the roles are different', function() { /* TODO */ }); it('should handle only-one-to-one-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA !-!< B : has, has'); + erDiagram.parser.parse('erDiagram\nA !-!< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -81,7 +79,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle only-one-to-zero-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA !-?< B : has, has'); + erDiagram.parser.parse('erDiagram\nA !-?< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -91,7 +89,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-one-to-zero-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA ?-?< B : has, has'); + erDiagram.parser.parse('erDiagram\nA ?-?< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -100,7 +98,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-one-to-one-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA ?-!< B : has, has'); + erDiagram.parser.parse('erDiagram\nA ?-!< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -109,7 +107,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle one-or-more-to-only-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA >!-! B : has, has'); + erDiagram.parser.parse('erDiagram\nA >!-! B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -118,7 +116,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-more-to-only-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA >?-! B : has, has'); + erDiagram.parser.parse('erDiagram\nA >?-! B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -127,7 +125,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-more-to-zero-or-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA >?-? B : has, has'); + erDiagram.parser.parse('erDiagram\nA >?-? B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -136,7 +134,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle one-or-more-to-zero-or-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA >!-? B : has, has'); + erDiagram.parser.parse('erDiagram\nA >!-? B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -145,7 +143,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-one-to-only-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA ?-! B : has, has'); + erDiagram.parser.parse('erDiagram\nA ?-! B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -154,7 +152,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle only-one-to-only-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA !-! B : has, has'); + erDiagram.parser.parse('erDiagram\nA !-! B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -163,7 +161,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle only-one-to-zero-or-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA !-? B : has, has'); + erDiagram.parser.parse('erDiagram\nA !-? B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -172,7 +170,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-one-to-zero-or-one relationships', function() { - erDiagram.parser.parse('erDiagram\nA ?-? B : has, has'); + erDiagram.parser.parse('erDiagram\nA ?-? B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -181,7 +179,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-more-to-zero-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA >?-?< B : has, has'); + erDiagram.parser.parse('erDiagram\nA >?-?< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -190,7 +188,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle one-or-more-to-one-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA >!-!< B : has, has'); + erDiagram.parser.parse('erDiagram\nA >!-!< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -199,7 +197,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle zero-or-more-to-one-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA >?-!< B : has, has'); + erDiagram.parser.parse('erDiagram\nA >?-!< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -208,7 +206,7 @@ describe('when parsing ER diagram it...', function() { }); it('should handle one-or-more-to-zero-or-more relationships', function() { - erDiagram.parser.parse('erDiagram\nA >!-?< B : has, has'); + erDiagram.parser.parse('erDiagram\nA >!-?< B : has'); const rels = erDb.getRelationships(); expect(Object.keys(erDb.getEntities()).length).toBe(2); @@ -217,7 +215,7 @@ describe('when parsing ER diagram it...', function() { }); it('should not accept a syntax error', function() { - const doc = 'erDiagram\nA xxx B : has, has'; + const doc = 'erDiagram\nA xxx B : has'; expect(() => { erDiagram.parser.parse(doc); }).toThrowError();