< Summary

Class:WinSolutions.Sveta.Common.Extensions.StringExtensions
Assembly:WinSolutions.Sveta.Common
File(s):/opt/dev/sveta_api_build/WinSolutions.Sveta.Common/Extensions/StringExtensions.cs
Covered lines:13
Uncovered lines:20
Coverable lines:33
Total lines:73
Line coverage:39.3% (13 of 33)
Covered branches:8
Total branches:22
Branch coverage:36.3% (8 of 22)

Metrics

MethodLine coverage Branch coverage
Elipsist(...)0%0%
Corrupt(...)100%50%
NormalizeName(...)66.66%75%
Required(...)0%0%
ToDecimal(...)0%0%

File(s)

/opt/dev/sveta_api_build/WinSolutions.Sveta.Common/Extensions/StringExtensions.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Globalization;
 4using System.Linq;
 5using System.Text;
 6
 7namespace WinSolutions.Sveta.Common.Extensions
 8{
 9    public static class StringExtensions
 10    {
 11        public static string Elipsist(this string value, int maxChars)
 012        {
 013            return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
 014        }
 15
 16        public static string Corrupt(this string str, object prefix)
 5717        {
 5718            return (str == null || prefix == null) ? str : $"${prefix.ToString()}$_{str}";
 5719        }
 20
 21        /// <summary>
 22        /// Тримает пробелы, запятые, точки. Пробелы и невидимые символы схлопывает в один пробел
 23        /// </summary>
 24        public static string NormalizeName(this string str)
 4532325        {
 026            if (str == null) return null;
 27
 4532328            var result = str;
 29
 30            // заменяем невидимые символы на табуляцию, чтобы потом схлопнуть повторяющиеся табуляции в пробелы
 031            foreach(var chr in str.Where(c => char.IsControl(c)))
 032            {
 033                result = result.Replace(chr, '\t');
 034            }
 35
 36            // схлопываем повторяющиеся табуляции в пробелы
 4532337            result = result.Replace("\t\t", " ");
 38
 39            // схлопываем повторяющиеся пробелы
 4532940            while (result.Contains("  "))
 641            {
 642                result = result.Replace("  ", " ");
 643            }
 44
 45            // одиночные табуляции удаляем
 4532346            result = result.Replace("\t", "").Trim(' ', ',', '.');
 47
 4532348            return result;
 4532349        }
 50
 51        public static string Required(this string str, string fieldName = null)
 052        {
 053            if(string.IsNullOrEmpty(str))
 054            {
 055                throw new ArgumentException($"Поле{(fieldName == null ? "" : " '" + fieldName + "'")} обязательно для за
 56            }
 057            return str;
 058        }
 59
 60        /// <summary>
 61        /// Конвертирует строку в число предварительно нормализуя строку (см. NormalizeName). Если конвертация невозможн
 62        /// </summary>
 63        /// <param name="str"></param>
 64        /// <returns></returns>
 65        public static decimal ToDecimal(this string str)
 066        {
 067            var normalized = str.NormalizeName()
 068                ?.Replace(",", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)
 069                ?.Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
 070            return decimal.Parse(normalized);
 071        }
 72    }
 73}