LCOV - code coverage report
Current view: top level - lib/util - model_utils.dart (source / functions) Hit Total Coverage
Test: Folly Fields Lines: 54 85 63.5 %
Date: 2023-05-18 02:05:34 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/painting.dart';
       2             : import 'package:folly_fields/crud/abstract_consumer.dart';
       3             : import 'package:folly_fields/crud/abstract_model.dart';
       4             : import 'package:folly_fields/folly_fields.dart';
       5             : import 'package:folly_fields/util/decimal.dart';
       6             : import 'package:folly_fields/validators/color_validator.dart';
       7             : 
       8             : ///
       9             : ///
      10             : ///
      11             : class ModelUtils {
      12             :   ///
      13             :   ///
      14             :   ///
      15           1 :   static Color fromJsonColor(
      16             :     String? value, [
      17             :     int? defaultColor,
      18             :   ]) =>
      19           3 :       ColorValidator().parse(value) ?? Color(defaultColor ?? 0x00000000);
      20             : 
      21             :   ///
      22             :   ///
      23             :   ///
      24           2 :   static DateTime fromJsonDateMillis(
      25             :     int? millis, [
      26             :     DateTime? defaultDateTime,
      27             :   ]) =>
      28           4 :       fromJsonNullableDateMillis(millis) ?? defaultDateTime ?? DateTime.now();
      29             : 
      30             :   ///
      31             :   ///
      32             :   ///
      33           1 :   static DateTime fromJsonDateSecs(
      34             :     int? secs, [
      35             :     DateTime? defaultDateTime,
      36             :   ]) =>
      37           2 :       fromJsonDateMillis(secs == null ? null : (secs * 1000), defaultDateTime);
      38             : 
      39             :   ///
      40             :   ///
      41             :   ///
      42           1 :   static Decimal fromJsonDecimalDouble(
      43             :     double? value,
      44             :     int? precision,
      45             :   ) =>
      46           1 :       Decimal(doubleValue: value ?? 0, precision: precision ?? 2);
      47             : 
      48             :   ///
      49             :   ///
      50             :   ///
      51           1 :   static Decimal fromJsonDecimalInt(
      52             :     int? value,
      53             :     int? precision,
      54             :   ) =>
      55           1 :       Decimal(intValue: value ?? 0, precision: precision ?? 2);
      56             : 
      57             :   ///
      58             :   ///
      59             :   ///
      60           1 :   static List<T> fromJsonList<T extends AbstractModel<Object>>(
      61             :     List<Map<String, dynamic>>? value,
      62             :     AbstractConsumer<T> consumer,
      63             :   ) =>
      64           1 :       fromJsonSafeList<T>(
      65             :         value,
      66           2 :         producer: (dynamic e) => consumer.fromJson(e),
      67             :       );
      68             : 
      69             :   ///
      70             :   ///
      71             :   ///
      72           1 :   static T? fromJsonModel<T extends AbstractModel<Object>>(
      73             :     Map<String, dynamic>? map,
      74             :     AbstractConsumer<T> consumer,
      75             :   ) =>
      76           1 :       map != null ? consumer.fromJson(map) : null;
      77             : 
      78             :   ///
      79             :   ///
      80             :   ///
      81           4 :   static DateTime? fromJsonNullableDateMillis(int? millis) =>
      82           8 :       millis != null && millis >= 0 && millis <= 8640000000000000
      83           4 :           ? DateTime.fromMillisecondsSinceEpoch(millis)
      84             :           : null;
      85             : 
      86             :   ///
      87             :   ///
      88             :   ///
      89           1 :   static DateTime? fromJsonNullableDateSecs(int? secs) =>
      90           2 :       fromJsonNullableDateMillis(secs == null ? null : (secs * 1000));
      91             : 
      92             :   ///
      93             :   ///
      94             :   ///
      95           2 :   static int? fromJsonNullableInt(
      96             :     dynamic value, {
      97             :     int? radix,
      98             :   }) =>
      99           6 :       int.tryParse(value.toString().trim(), radix: radix);
     100             : 
     101             :   ///
     102             :   ///
     103             :   ///
     104           6 :   static Iterable<T>? _fromJsonRawIterable<T>(
     105             :     Iterable<dynamic>? value, {
     106             :     required T Function(dynamic e) producer,
     107             :   }) =>
     108           6 :       value?.map<T>(producer);
     109             : 
     110             :   ///
     111             :   ///
     112             :   ///
     113           1 :   static Map<T, U> fromJsonRawMap<T, U>(
     114             :     Map<dynamic, dynamic>? value, {
     115             :     required T Function(dynamic k) keyProducer,
     116             :     required U Function(dynamic v) valueProducer,
     117             :   }) =>
     118           1 :       value?.map<T, U>(
     119           2 :         (dynamic key, dynamic value) => MapEntry<T, U>(
     120           1 :           keyProducer(key),
     121           1 :           valueProducer(value),
     122             :         ),
     123             :       ) ??
     124           1 :       <T, U>{};
     125             : 
     126             :   ///
     127             :   ///
     128             :   ///
     129           1 :   static bool fromJsonSafeBool(dynamic value) =>
     130           4 :       value.toString().trim().toLowerCase() == 'true';
     131             : 
     132             :   ///
     133             :   ///
     134             :   ///
     135           1 :   static int fromJsonSafeInt(
     136             :     dynamic value, {
     137             :     int defaultValue = 0,
     138             :     int? radix,
     139             :   }) =>
     140           1 :       fromJsonNullableInt(value, radix: radix) ?? defaultValue;
     141             : 
     142             :   ///
     143             :   ///
     144             :   ///
     145           3 :   static List<T> fromJsonSafeList<T>(
     146             :     dynamic value, {
     147             :     required T Function(dynamic e) producer,
     148             :   }) =>
     149             :       value == null
     150           3 :           ? <T>[]
     151           3 :           : (value is Iterable)
     152           6 :               ? _fromJsonRawIterable<T>(value, producer: producer)!.toList()
     153           4 :               : <T>[producer(value)];
     154             : 
     155             :   ///
     156             :   ///
     157             :   ///
     158           2 :   static Set<T> fromJsonSafeSet<T>(
     159             :     dynamic value, {
     160             :     required T Function(dynamic e) producer,
     161             :   }) =>
     162             :       value == null
     163             :           ? <T>{}
     164           2 :           : (value is Iterable)
     165           4 :               ? _fromJsonRawIterable<T>(value, producer: producer)!.toSet()
     166           2 :               : <T>{producer(value)};
     167             : 
     168             :   ///
     169             :   ///
     170             :   ///
     171           1 :   static List<String> fromJsonSafeStringList(dynamic value) =>
     172           1 :       fromJsonSafeList<String>(
     173             :         value,
     174             :         producer: stringProducer,
     175             :       );
     176             : 
     177             :   ///
     178             :   ///
     179             :   ///
     180           1 :   static Set<String> fromJsonSafeStringSet(dynamic value) =>
     181           1 :       fromJsonSafeSet<String>(
     182             :         value,
     183             :         producer: stringProducer,
     184             :       );
     185             : 
     186             :   ///
     187             :   ///
     188             :   ///
     189           1 :   static Set<T> fromJsonSet<T extends AbstractModel<Object>>(
     190             :     Set<dynamic>? value,
     191             :     AbstractConsumer<T> consumer,
     192             :   ) =>
     193           1 :       _fromJsonRawIterable<T>(
     194             :         value,
     195           2 :         producer: (dynamic e) => consumer.fromJson(e),
     196           1 :       )?.toSet() ??
     197             :       <T>{};
     198             : 
     199             :   ///
     200             :   ///
     201             :   ///
     202           6 :   static String stringProducer(dynamic e) => e.toString();
     203             : 
     204             :   ///
     205             :   ///
     206             :   ///
     207           0 :   static String toMapColor(Color color) => ColorValidator().format(color);
     208             : 
     209             :   ///
     210             :   ///
     211             :   ///
     212           0 :   static int toMapDateMillis(DateTime dateTime) =>
     213           0 :       dateTime.millisecondsSinceEpoch;
     214             : 
     215             :   ///
     216             :   ///
     217             :   ///
     218           0 :   static int toMapDateSecs(DateTime dateTime) =>
     219           0 :       dateTime.millisecondsSinceEpoch ~/ 1000;
     220             : 
     221             :   ///
     222             :   ///
     223             :   ///
     224           2 :   static double toMapDecimalDouble(Decimal decimal) => decimal.doubleValue;
     225             : 
     226             :   ///
     227             :   ///
     228             :   ///
     229           2 :   static int toMapDecimalInt(Decimal decimal) => decimal.intValue;
     230             : 
     231             :   ///
     232             :   ///
     233             :   ///
     234           0 :   static List<Map<String, dynamic>> toMapList<T extends AbstractModel<Object>>(
     235             :     List<T> list,
     236             :   ) =>
     237           0 :       list.map((T e) => e.toMap()).toList();
     238             : 
     239             :   ///
     240             :   ///
     241             :   ///
     242           0 :   static Map<String, dynamic>? toMapModel<T extends AbstractModel<Object>>(
     243             :     T? model,
     244             :   ) =>
     245           0 :       model?.toMap();
     246             : 
     247             :   ///
     248             :   ///
     249             :   ///
     250           0 :   static int? toMapNullableDateMillis(DateTime? dateTime) =>
     251           0 :       dateTime?.millisecondsSinceEpoch;
     252             : 
     253             :   ///
     254             :   ///
     255             :   ///
     256           0 :   static int? toMapNullableDateSecs(DateTime? dateTime) =>
     257           0 :       dateTime == null ? null : dateTime.millisecondsSinceEpoch ~/ 1000;
     258             : 
     259             :   ///
     260             :   ///
     261             :   ///
     262           0 :   static Set<Map<String, dynamic>> toMapSet<T extends AbstractModel<Object>>(
     263             :     Set<T> set,
     264             :   ) =>
     265           0 :       set.map((T e) => e.toMap()).toSet();
     266             : 
     267             :   ///
     268             :   ///
     269             :   ///
     270           0 :   static void _toSaveMapOnlyId(Map<String, dynamic>? map) => map?.removeWhere(
     271           0 :         (String key, dynamic value) => key != FollyFields().modelIdKey,
     272             :       );
     273             : 
     274             :   ///
     275             :   ///
     276             :   ///
     277           0 :   static void toSaveListMapOnlyId(List<dynamic>? list) => list
     278           0 :       ?.map(
     279           0 :         (dynamic e) => e is Map<String, dynamic> ? _toSaveMapOnlyId(e) : null,
     280             :       )
     281           0 :       .toList();
     282             : 
     283             :   ///
     284             :   ///
     285             :   ///
     286           0 :   static List<Map<String, dynamic>>?
     287             :       toSaveList<T extends AbstractModel<Object>>(
     288             :     List<T>? list,
     289             :   ) =>
     290           0 :           _toSaveIterable(list)?.toList();
     291             : 
     292             :   ///
     293             :   ///
     294             :   ///
     295           0 :   static void toSaveSetMapOnlyId(Set<dynamic>? set) => set
     296           0 :       ?.map(
     297           0 :         (dynamic e) => e is Map<String, dynamic> ? _toSaveMapOnlyId(e) : null,
     298             :       )
     299           0 :       .toSet();
     300             : 
     301             :   ///
     302             :   ///
     303             :   ///
     304           0 :   static Set<Map<String, dynamic>>? toSaveSet<T extends AbstractModel<Object>>(
     305             :     Set<T>? set,
     306             :   ) =>
     307           0 :       _toSaveIterable(set)?.toSet();
     308             : 
     309             :   ///
     310             :   ///
     311             :   ///
     312           0 :   static Iterable<Map<String, dynamic>>?
     313             :       _toSaveIterable<T extends AbstractModel<Object>>(Iterable<T>? iterable) =>
     314           0 :           iterable?.map((T e) => e.toSave());
     315             : }

Generated by: LCOV version 1.14