Exemple #1
0
 static void ModifierToNotSameAsMeta(PartialFieldType fieldType, ObganismModifier obganismModifier)
 {
     if (GetModifierParameterStringValue(obganismModifier, 0) is string stringValue)
     {
         fieldType.Meta[NapBuiltInMeta.NotSameAs] = stringValue;
     }
 }
Exemple #2
0
        static void ModifierParameterToIsInclusiveMeta(PartialFieldType fieldType, ObganismModifier obganismModifier, int parameterIndex, string metaName, bool defaultInclusivity)
        {
            var explicitInclusivity = GetModifierParameterStringValue(obganismModifier, parameterIndex);

            fieldType.Meta[metaName] = explicitInclusivity != null
                                ? explicitInclusivity.StartsWith("in", StringComparison.InvariantCultureIgnoreCase)
                                : defaultInclusivity;
        }
Exemple #3
0
        static void ModifierParameterToMinMaxMeta(PartialFieldType fieldType, ObganismModifier obganismModifier, int parameterIndex, string metaName)
        {
            fieldType.Meta[metaName] = fieldType.Name switch {
                NapBuiltInTypes.Float => GetModifierParameterFloatValue(obganismModifier, parameterIndex),
                NapBuiltInTypes.Date => GetModifierParameterDateValue(obganismModifier, parameterIndex),
                NapBuiltInTypes.Datetime => GetModifierParameterDateTimeValue(obganismModifier, parameterIndex),
                NapBuiltInTypes.Duration => GetModifierParameterTimeSpanValue(obganismModifier, parameterIndex),

                _ => GetModifierParameterIntValue(obganismModifier, parameterIndex)
            };
        }
Exemple #4
0
 static void ModifierToPatternMeta(PartialFieldType fieldType, ObganismModifier obganismModifier)
 {
     if (GetModifierParameterStringValue(obganismModifier, 0) is string pattern)
     {
         fieldType.Meta[NapBuiltInMeta.Pattern] = new Regex(
             pattern,
             string.Equals(GetModifierParameterStringValue(obganismModifier, 1), "ignore case", StringComparison.InvariantCultureIgnoreCase)
                                         ? RegexOptions.IgnoreCase
                                         : RegexOptions.None
             );
     }
 }
Exemple #5
0
        static void ModifierToDefaultMeta(PartialFieldType fieldType, ObganismModifier obganismModifier)
        {
            fieldType.Meta[NapBuiltInMeta.Default] = fieldType.Name switch {
                NapBuiltInTypes.Bool => GetModifierParameterBoolValue(obganismModifier, 0),
                NapBuiltInTypes.Int => GetModifierParameterIntValue(obganismModifier, 0),
                NapBuiltInTypes.Float => GetModifierParameterFloatValue(obganismModifier, 0),
                NapBuiltInTypes.Char => GetModifierParameterCharValue(obganismModifier, 0),
                NapBuiltInTypes.String => GetModifierParameterStringValue(obganismModifier, 0),
                NapBuiltInTypes.Date => GetModifierParameterDateValue(obganismModifier, 0),
                NapBuiltInTypes.Datetime => GetModifierParameterDateTimeValue(obganismModifier, 0),
                NapBuiltInTypes.Duration => GetModifierParameterTimeSpanValue(obganismModifier, 0),

                _ => GetModifierParameterValue(obganismModifier, 0)
            };
        }
Exemple #6
0
        //static void ModifierToCustomMeta(PartialFieldType fieldType, ObganismModifier obganismModifier) {
        //	if (obganismModifier.Parameters.Count == 0)
        //		fieldType.Meta[obganismModifier.Name] = true;

        //	else fieldType.Meta[obganismModifier.Name] = obganismModifier.Parameters[0] switch {
        //		ObganismModifierParameter.Integer integerParameter => integerParameter.Value,
        //		ObganismModifierParameter.Real realParameter => realParameter.Value,
        //		ObganismModifierParameter.String stringParameter => stringParameter.Value,
        //		ObganismModifierParameter.Name nameParameter => nameParameter.Value,
        //		ObganismModifierParameter.Type typeParameter => typeParameter.Value,

        //		_ => null
        //	};
        //}

        // Modifier Parameters
        // ----

        static IReadOnlyCollection <T> GetModifierParameterValues <T>(ObganismModifier obganismModifier, Func <ObganismModifier, int, T> getModifierParameterValue)
        {
            var values = new List <T>(obganismModifier.Parameters.Count);

            for (int i = 0; i < obganismModifier.Parameters.Count; ++i)
            {
                var value = getModifierParameterValue.Invoke(obganismModifier, i);

                if (value != null)
                {
                    values.Add(value);
                }
            }

            return(values);
        }
Exemple #7
0
        static void ModifierToMinMaxMeta(PartialFieldType fieldType, ObganismModifier obganismModifier, bool defaultInclusivity)
        {
            // range(min, max)
            if (obganismModifier.Parameters.Count == 2)
            {
                ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 0, NapBuiltInMeta.Min);
                ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 1, NapBuiltInMeta.Max);

                fieldType.Meta[NapBuiltInMeta.MinIsInclusive]     =
                    fieldType.Meta[NapBuiltInMeta.MaxIsInclusive] = defaultInclusivity;
            }

            else if (obganismModifier.Parameters.Count == 3)
            {
                ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 0, NapBuiltInMeta.Min);

                // range(min, min_inclusive, max)
                if (GetModifierParameterValue(obganismModifier, 1) is string minInclusivity)
                {
                    fieldType.Meta[NapBuiltInMeta.MinIsInclusive] = minInclusivity.StartsWith("in", StringComparison.InvariantCultureIgnoreCase);

                    ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 2, NapBuiltInMeta.Max);

                    fieldType.Meta[NapBuiltInMeta.MaxIsInclusive] = defaultInclusivity;
                }

                // range(min, max, max_inclusive)
                else
                {
                    fieldType.Meta[NapBuiltInMeta.MinIsInclusive] = defaultInclusivity;

                    ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 1, NapBuiltInMeta.Max);
                    ModifierParameterToIsInclusiveMeta(fieldType, obganismModifier, 2, NapBuiltInMeta.MaxIsInclusive, defaultInclusivity);
                }
            }

            // range(min, min_inclusive, max, max_inclusive)
            else if (4 <= obganismModifier.Parameters.Count)
            {
                ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 0, NapBuiltInMeta.Min);
                ModifierParameterToIsInclusiveMeta(fieldType, obganismModifier, 1, NapBuiltInMeta.MinIsInclusive, defaultInclusivity);
                ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 2, NapBuiltInMeta.Max);
                ModifierParameterToIsInclusiveMeta(fieldType, obganismModifier, 3, NapBuiltInMeta.MaxIsInclusive, defaultInclusivity);
            }
        }
Exemple #8
0
        static void ModifierToForbiddenValuesMeta(PartialFieldType fieldType, ObganismModifier obganismModifier)
        {
            if (obganismModifier.Parameters.Count != 0)
            {
                fieldType.Meta[NapBuiltInMeta.ForbiddenValues] = fieldType.Name switch {
                    NapBuiltInTypes.Int => GetModifierParameterValues(obganismModifier, GetModifierParameterIntValue),
                    NapBuiltInTypes.Float => GetModifierParameterValues(obganismModifier, GetModifierParameterFloatValue),
                    NapBuiltInTypes.Char => GetModifierParameterValues(obganismModifier, GetModifierParameterCharValue),
                    NapBuiltInTypes.String => GetModifierParameterValues(obganismModifier, GetModifierParameterStringValue),
                    NapBuiltInTypes.Date => GetModifierParameterValues(obganismModifier, GetModifierParameterDateValue),
                    NapBuiltInTypes.Datetime => GetModifierParameterValues(obganismModifier, GetModifierParameterDateTimeValue),
                    NapBuiltInTypes.Duration => GetModifierParameterValues(obganismModifier, GetModifierParameterTimeSpanValue),

                    _ => GetModifierParameterValues(obganismModifier, GetModifierParameterValue)
                }
            }
            ;
        }
Exemple #9
0
 static bool?GetModifierParameterBoolValue(ObganismModifier obganismModifier, int parameterIndex) =>
 obganismModifier.Parameters.ElementAtOrDefault(parameterIndex) is ObganismModifierParameter.Name
 {
Exemple #10
0
 static void ModifierToMaxMeta(PartialFieldType fieldType, ObganismModifier obganismModifier, bool defaultInclusivity)
 {
     ModifierParameterToMinMaxMeta(fieldType, obganismModifier, 0, NapBuiltInMeta.Max);
     ModifierParameterToIsInclusiveMeta(fieldType, obganismModifier, 1, NapBuiltInMeta.MaxIsInclusive, defaultInclusivity);
 }
Exemple #11
0
        // Modifiers to Meta
        // ----

        static void ModifierToMeta(PartialFieldType fieldType, ObganismModifier obganismModifier)
        {
            switch (obganismModifier.Name)
            {
            // Built-in Meta
            // ----

            case "min":
            case "at least":
            case "not below":
            case "not before":
                ModifierToMinMeta(fieldType, obganismModifier, true); break;

            case "above":
            case "after":
                ModifierToMinMeta(fieldType, obganismModifier, false); break;

            case "max":
            case "at most":
            case "not after":
            case "not above":
                ModifierToMaxMeta(fieldType, obganismModifier, true); break;

            case "below":
            case "before":
                ModifierToMaxMeta(fieldType, obganismModifier, false); break;

            case "between": ModifierToMinMaxMeta(fieldType, obganismModifier, false); break;

            case "in": ModifierToMinMaxMeta(fieldType, obganismModifier, true); break;

            case "enum":
            case "one of":
            case "amongst":
                ModifierToAllowedValuesMeta(fieldType, obganismModifier); break;

            case "not one of":
            case "not amongst":
                ModifierToForbiddenValuesMeta(fieldType, obganismModifier); break;

            case "allow empty": fieldType.Meta[NapBuiltInMeta.AllowEmpty] = true; break;

            case "not empty": fieldType.Meta[NapBuiltInMeta.AllowEmpty] = false; break;

            case "multiline": fieldType.Meta[NapBuiltInMeta.AllowMultiline] = true; break;

            case "not multiline": fieldType.Meta[NapBuiltInMeta.AllowMultiline] = false; break;

            case "pattern": ModifierToPatternMeta(fieldType, obganismModifier); break;

            case "same as": ModifierToSameAsMeta(fieldType, obganismModifier); break;

            case "not same as": ModifierToNotSameAsMeta(fieldType, obganismModifier); break;

            case "self": fieldType.Meta[NapBuiltInMeta.SelfReference] = SelfReference.Enforce; break;

            case "not self": fieldType.Meta[NapBuiltInMeta.SelfReference] = SelfReference.Forbid; break;

            case "optional": fieldType.Meta[NapBuiltInMeta.IsOptional] = true; break;

            case "not optional": fieldType.Meta[NapBuiltInMeta.IsOptional] = false; break;

            case "default": ModifierToDefaultMeta(fieldType, obganismModifier); break;

            case "allow duplicates": fieldType.Meta[NapBuiltInMeta.AllowDuplicates] = true; break;

            case "no duplicates": fieldType.Meta[NapBuiltInMeta.AllowDuplicates] = false; break;

            // Collection Generic Meta
            // ----

            case "all min":
            case "all at least":
            case "not any below":
            case "not any before":
                ModifierToMinMeta(GetMetaTargetGeneric(fieldType), obganismModifier, true); break;

            case "all above":
            case "all after":
                ModifierToMinMeta(GetMetaTargetGeneric(fieldType), obganismModifier, false); break;

            case "all max":
            case "all at most":
            case "not any after":
            case "not any above":
                ModifierToMaxMeta(GetMetaTargetGeneric(fieldType), obganismModifier, true); break;

            case "all below":
            case "all before":
                ModifierToMaxMeta(GetMetaTargetGeneric(fieldType), obganismModifier, false); break;

            case "all between": ModifierToMinMaxMeta(GetMetaTargetGeneric(fieldType), obganismModifier, false); break;

            case "all in": ModifierToMinMaxMeta(GetMetaTargetGeneric(fieldType), obganismModifier, true); break;

            case "all one of":
            case "all amongst":
                ModifierToAllowedValuesMeta(GetMetaTargetGeneric(fieldType), obganismModifier); break;

            case "not any one of":
            case "not any amongst":
                ModifierToForbiddenValuesMeta(GetMetaTargetGeneric(fieldType), obganismModifier); break;

            case "any empty": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.AllowEmpty] = true; break;

            case "not any empty": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.AllowEmpty] = false; break;

            case "all multiline": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.AllowMultiline] = true; break;

            case "not any multiline": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.AllowMultiline] = false; break;

            case "all pattern": ModifierToPatternMeta(GetMetaTargetGeneric(fieldType), obganismModifier); break;

            case "all same as": ModifierToSameAsMeta(GetMetaTargetGeneric(fieldType), obganismModifier); break;

            case "not any same as": ModifierToNotSameAsMeta(GetMetaTargetGeneric(fieldType), obganismModifier); break;

            case "all self": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.SelfReference] = SelfReference.Enforce; break;

            case "not any self": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.SelfReference] = SelfReference.Forbid; break;

            case "all optional": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.IsOptional] = true; break;

            case "not any optional": GetMetaTargetGeneric(fieldType).Meta[NapBuiltInMeta.IsOptional] = false; break;

                // Custom Meta
                // ----

                //default: ModifierToCustomMeta(fieldType, obganismModifier); break;
            }
        }
Exemple #12
0
 static void AssertObo(JsonObject expected, ObganismModifier actual)
 {
     Assert.AreEqual(expected.Qs("name"), actual.Name, "Modifiers names are not the same.");
     AssertObo(expected.Qa("parameters"), actual.Parameters);
 }