:cogs: Ajout du type booléen dans la syntaxe

pull/281/head
Mael 2018-08-07 20:46:26 +02:00
parent bc893afca6
commit d0726b616c
3 changed files with 46 additions and 11 deletions

View File

@ -3,6 +3,7 @@
main ->
CalcExpression {% id %}
| Boolean {% id %}
| Variable {% id %}
| NegatedVariable {% id %}
| ModifiedVariable {% id %}
@ -54,7 +55,6 @@ ArithmeticOperator -> "+" {% id %}
| "/" {% id %}
# BooleanVariableExpression -> ("!" _):? Variable {% d => (['BooleanVariableExpression', ...d]) %}
Variable -> VariableFragment (_ Dot _ VariableFragment {% d => d[3] %}):* {% d => ({
@ -82,3 +82,9 @@ _ -> [\s] {% d => null %}
number -> [0-9]:+ ([\.] [0-9]:+):? {% d => ({category: 'value', nodeValue: parseFloat(d[0].join("")+(d[1]?(d[1][0]+d[1][1].join("")):""))}) %}
percentage -> [0-9]:+ ([\.] [0-9]:+):? [\%] {% d => ({category: 'percentage', nodeValue: parseFloat(d[0].join("")+(d[1]?(d[1][0]+d[1][1].join("")):""))/100}) %}
Boolean -> "oui" {% d=> ({category: 'boolean', nodeValue: true}) %}
| "non" {% d=> ({category: 'boolean', nodeValue: false}) %}

View File

@ -60,10 +60,18 @@ export let treatString = (rules, rule) => rawNode => {
let [parseResult, ...additionnalResults] = nearley().feed(rawNode).results
if (additionnalResults && additionnalResults.length > 0)
throw "Attention ! L'expression <" +
rawNode +
'> ne peut être traitée de façon univoque'
if (
additionnalResults &&
additionnalResults.length > 0 &&
parseResult.category !== 'boolean'
) {
// booleans, 'oui' and 'non', have an exceptional resolving precedence
throw new Error(
"Attention ! L'expression <" +
rawNode +
'> ne peut être traitée de façon univoque'
)
}
if (
!contains(parseResult.category)([
@ -72,10 +80,13 @@ export let treatString = (rules, rule) => rawNode => {
'filteredVariable',
'comparison',
'negatedVariable',
'percentage'
'percentage',
'boolean'
])
)
throw "Attention ! Erreur de traitement de l'expression : " + rawNode
throw new Error(
"Attention ! Erreur de traitement de l'expression : " + rawNode
)
if (parseResult.category == 'variable')
return treatVariable(rules, rule)(parseResult)
@ -90,6 +101,14 @@ export let treatString = (rules, rule) => rawNode => {
treatVariable(rules, rule)(parseResult.variable)
)
if (parseResult.category == 'boolean') {
return {
nodeValue: parseResult.nodeValue,
// eslint-disable-next-line
jsx: () => <span className="boolean">{rawNode}</span>
}
}
// We don't need to handle category == 'value' because YAML then returns it as
// numerical value, not a String: it goes to treatNumber
if (parseResult.category == 'percentage')

View File

@ -681,13 +681,23 @@
- CDD
par défaut: CDI
- espace: contrat salarié
nom: assimilé salarié
description: |
Certains dirigeants d'entreprise (c'est notamment le cas pour les SASU) sont considérés par la sécurité sociale comme assimilés aux salariés. Ils sont alors au régime général de la sécurité sociale.
question: Le salarié est-il considéré comme "assimilé salarié" ?
références:
Le régime des dirigeants: https://www.urssaf.fr/portail/home/employeur/creer/choisir-une-forme-juridique/le-statut-du-dirigeant/les-dirigeants-rattaches-au-regi.html
- espace: contrat salarié
nom: type de contrat
formule:
variations:
- si: assimilé
- si: assimilé salarié
alors: CDI
- sinon: choix type de contrat
- sinon: choix du type de contrat
- espace: contrat salarié . type de contrat
nom: CDD
@ -809,8 +819,8 @@
nom: statut cadre
formule:
variations:
- si: assimilé
alors: 'oui'
- si: assimilé salarié
alors: oui
- sinon: choix statut cadre
- espace: contrat salarié