Skip to content

Commit 50f8698

Browse files
committed
fix(formulas) Create formula names that are valid identifiers
Signed-off-by: Jerome Simeon <[email protected]>
1 parent e1d30b2 commit 50f8698

File tree

10 files changed

+51
-32
lines changed

10 files changed

+51
-32
lines changed

packages/markdown-template/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
* @module markdown-template
2020
*/
2121

22+
module.exports.util = require('./lib/util');
23+
module.exports.datetimeutil = require('./lib/datetimeutil');
24+
module.exports.normalizeNLs = require('./lib/normalize').normalizeNLs;
2225
module.exports.ParserManager = require('./lib/parsermanager');
2326
module.exports.TemplateMarkTransformer = require('./lib/TemplateMarkTransformer');
24-
module.exports.normalizeNLs = require('./lib/normalize').normalizeNLs;
25-
module.exports.datetimeutil = require('./lib/datetimeutil');

packages/markdown-template/lib/TemplateMarkTransformer.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ class TemplateMarkTransformer {
246246
input.accept(visitor, parameters);
247247
const result = Object.assign({}, templateMarkManager.serializer.toJSON(input));
248248

249-
//console.log('DRAFT ' + JSON.stringify(result));
250249
return result;
251250
}
252251

packages/markdown-template/lib/ToCiceroMarkVisitor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
'use strict';
1616

17-
const flatten = require('./templatemarkutil').flatten;
17+
const flatten = require('./util').flatten;
1818
const generateJSON = require('./templatemarkutil').generateJSON;
1919
const { NS_PREFIX_CommonMarkModel } = require('@accordproject/markdown-common').CommonMarkModel;
2020
const { NS_PREFIX_CiceroMarkModel } = require('@accordproject/markdown-cicero').CiceroMarkModel;

packages/markdown-template/lib/ToParserVisitor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
const P = require('parsimmon');
1818

19-
const flatten = require('./templatemarkutil').flatten;
19+
const flatten = require('./util').flatten;
2020
const CommonMarkUtils = require('@accordproject/markdown-common').CommonMarkUtils;
2121
const FromCommonMarkVisitor = require('@accordproject/markdown-common').FromCommonMarkVisitor;
2222
const fromcommonmarkrules = require('@accordproject/markdown-common').fromcommonmarkrules;

packages/markdown-template/lib/combinators.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
const P = require('parsimmon');
1818
const uuid = require('uuid');
1919

20-
const flatten = require('./templatemarkutil').flatten;
20+
const flatten = require('./util').flatten;
2121
const CommonMarkUtils = require('@accordproject/markdown-common').CommonMarkUtils;
2222

2323
/**

packages/markdown-template/lib/templatemarkutil.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,6 @@ const MarkdownItTemplate = require('@accordproject/markdown-it-template');
2929
const FromMarkdownIt = require('@accordproject/markdown-common').FromMarkdownIt;
3030
const templaterules = require('./templaterules');
3131

32-
/**
33-
* Flatten an array of array
34-
* @param {*[]} arr the input array
35-
* @return {*[]} the flattened array
36-
*/
37-
function flatten(arr) {
38-
return arr.reduce((acc, val) => acc.concat(val), []);
39-
}
40-
4132
/**
4233
* Model manager for TemplateMark
4334
* @returns {object} model manager and utilities for TemplateMark
@@ -312,7 +303,6 @@ function generateJSON(modelManager,type) {
312303
}
313304
}
314305

315-
module.exports.flatten = flatten;
316306
module.exports.findTemplateModel = findTemplateModel;
317307
module.exports.templateMarkManager = templateMarkManager;
318308

packages/markdown-template/lib/templaterules.js

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,10 @@
1414

1515
'use strict';
1616

17-
const crypto = require('crypto');
17+
const formulaName = require('./util').formulaName;
1818
const { getAttr } = require('@accordproject/markdown-common').CommonMarkUtils;
1919
const NS_PREFIX_TemplateMarkModel = require('./externalModels/TemplateMarkModel').NS_PREFIX_TemplateMarkModel;
2020

21-
/**
22-
* Returns a unique chosen name for a formula
23-
* @param {string} code - the formula code
24-
* @return {string} the unique name
25-
*/
26-
function formulaName(code) {
27-
const hasher = crypto.createHash('sha256');
28-
hasher.update(code);
29-
return hasher.digest('hex');
30-
}
31-
3221
// Inline rules
3322
const variableRule = {
3423
tag: NS_PREFIX_TemplateMarkModel + 'VariableDefinition',
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
15+
'use strict';
16+
17+
const crypto = require('crypto');
18+
19+
/**
20+
* Flatten an array of array
21+
* @param {*[]} arr the input array
22+
* @return {*[]} the flattened array
23+
*/
24+
function flatten(arr) {
25+
return arr.reduce((acc, val) => acc.concat(val), []);
26+
}
27+
28+
/**
29+
* Returns a unique chosen name for a formula
30+
* @param {string} code - the formula code
31+
* @return {string} the unique name
32+
*/
33+
function formulaName(code) {
34+
const hasher = crypto.createHash('sha256');
35+
hasher.update(code);
36+
return 'formula_' + hasher.digest('hex');
37+
}
38+
39+
module.exports.flatten = flatten;
40+
module.exports.formulaName = formulaName;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"$class":"org.accordproject.commonmark.Document","xmlns":"http://commonmark.org/xml/1.0","nodes":[{"$class":"org.accordproject.templatemark.ContractDefinition","name":"top","elementType":"org.test.MyContract","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"This is contract text, followed by a clause:"}]},{"$class":"org.accordproject.templatemark.ClauseDefinition","name":"agreement","elementType":"org.test.MyClause","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"This is a contract between "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"seller","elementType":"String"},{"$class":"org.accordproject.commonmark.Text","text":" and "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"buyer","elementType":"String"},{"$class":"org.accordproject.commonmark.Text","text":" for the amount of "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"amount","elementType":"Double"},{"$class":"org.accordproject.commonmark.Text","text":" "},{"$class":"org.accordproject.templatemark.EnumVariableDefinition","enumValues":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UZS","VEF","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMW","ZWL"],"name":"currency","elementType":"org.accordproject.money.CurrencyCode"},{"$class":"org.accordproject.templatemark.ConditionalDefinition","whenTrue":[{"$class":"org.accordproject.commonmark.Text","text":", even in the presence of force majeure"}],"whenFalse":[],"name":"forceMajeure"},{"$class":"org.accordproject.commonmark.Text","text":"."}]}]},{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"There is a penalty of "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"penalty","elementType":"Double"},{"$class":"org.accordproject.commonmark.Text","text":"% for non compliance."},{"$class":"org.accordproject.commonmark.Softbreak"},{"$class":"org.accordproject.commonmark.Text","text":"And this: "},{"$class":"org.accordproject.templatemark.FormulaDefinition","dependencies":["seller","buyer","amount","currency","penalty"],"code":" 3.14+2.98 ","name":"f2fdbcfc705ed55d07f02e6ca8b5a9dc725eef44c32f77e4ce9307626fe09a63"},{"$class":"org.accordproject.commonmark.Text","text":" is a formula"}]},{"$class":"org.accordproject.commonmark.List","type":"bullet","tight":"true","nodes":[{"$class":"org.accordproject.commonmark.Item","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"And this is another formula in a list "},{"$class":"org.accordproject.templatemark.FormulaDefinition","dependencies":["seller","buyer","amount","currency","penalty"],"code":" firstName ++ \" \" ++ lastName ","name":"2906467fe4dc174f6c4bf9b01ea281014784c2a0581868fd5689675e367c362b"}]}]}]}]}]}
1+
{"$class":"org.accordproject.commonmark.Document","xmlns":"http://commonmark.org/xml/1.0","nodes":[{"$class":"org.accordproject.templatemark.ContractDefinition","name":"top","elementType":"org.test.MyContract","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"This is contract text, followed by a clause:"}]},{"$class":"org.accordproject.templatemark.ClauseDefinition","name":"agreement","elementType":"org.test.MyClause","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"This is a contract between "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"seller","elementType":"String"},{"$class":"org.accordproject.commonmark.Text","text":" and "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"buyer","elementType":"String"},{"$class":"org.accordproject.commonmark.Text","text":" for the amount of "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"amount","elementType":"Double"},{"$class":"org.accordproject.commonmark.Text","text":" "},{"$class":"org.accordproject.templatemark.EnumVariableDefinition","enumValues":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UZS","VEF","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMW","ZWL"],"name":"currency","elementType":"org.accordproject.money.CurrencyCode"},{"$class":"org.accordproject.templatemark.ConditionalDefinition","whenTrue":[{"$class":"org.accordproject.commonmark.Text","text":", even in the presence of force majeure"}],"whenFalse":[],"name":"forceMajeure"},{"$class":"org.accordproject.commonmark.Text","text":"."}]}]},{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"There is a penalty of "},{"$class":"org.accordproject.templatemark.VariableDefinition","name":"penalty","elementType":"Double"},{"$class":"org.accordproject.commonmark.Text","text":"% for non compliance."},{"$class":"org.accordproject.commonmark.Softbreak"},{"$class":"org.accordproject.commonmark.Text","text":"And this: "},{"$class":"org.accordproject.templatemark.FormulaDefinition","dependencies":["seller","buyer","amount","currency","penalty"],"code":" 3.14+2.98 ","name":"formula_f2fdbcfc705ed55d07f02e6ca8b5a9dc725eef44c32f77e4ce9307626fe09a63"},{"$class":"org.accordproject.commonmark.Text","text":" is a formula"}]},{"$class":"org.accordproject.commonmark.List","type":"bullet","tight":"true","nodes":[{"$class":"org.accordproject.commonmark.Item","nodes":[{"$class":"org.accordproject.commonmark.Paragraph","nodes":[{"$class":"org.accordproject.commonmark.Text","text":"And this is another formula in a list "},{"$class":"org.accordproject.templatemark.FormulaDefinition","dependencies":["seller","buyer","amount","currency","penalty"],"code":" firstName ++ \" \" ++ lastName ","name":"formula_2906467fe4dc174f6c4bf9b01ea281014784c2a0581868fd5689675e367c362b"}]}]}]}]}]}

packages/markdown-template/test/parsermanager.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ and monthly payments of {{% monthlyPaymentFormula(loanAmount,rate,loanDuration)
6565
`);
6666
parserManager.buildParser();
6767
parserManager.getFormulas().should.deep.equal([{
68-
name:'d02c8642fa12d6ed08dea71f0af7a77b0c7893804d0b43b537eb18ea6f666463',
68+
name:'formula_d02c8642fa12d6ed08dea71f0af7a77b0c7893804d0b43b537eb18ea6f666463',
6969
code:' monthlyPaymentFormula(loanAmount,rate,loanDuration) as "K0,0.00" ',
7070
}]);
7171
});
@@ -86,10 +86,10 @@ And this: {{% 3.14+2.98 %}} is a formula
8686
- And this is another formula in a list {{% firstName ++ " " ++ lastName %}}`);
8787
parserManager.buildParser();
8888
parserManager.getFormulas().should.deep.equal([{
89-
name:'f2fdbcfc705ed55d07f02e6ca8b5a9dc725eef44c32f77e4ce9307626fe09a63',
89+
name:'formula_f2fdbcfc705ed55d07f02e6ca8b5a9dc725eef44c32f77e4ce9307626fe09a63',
9090
code:' 3.14+2.98 ',
9191
},{
92-
name:'2906467fe4dc174f6c4bf9b01ea281014784c2a0581868fd5689675e367c362b',
92+
name:'formula_2906467fe4dc174f6c4bf9b01ea281014784c2a0581868fd5689675e367c362b',
9393
code:' firstName ++ " " ++ lastName ',
9494
}]);
9595
});

0 commit comments

Comments
 (0)