LCOV - code coverage report
Current view: top level - lib/util - model_utils.dart (source / functions) Hit Total Coverage
Test: Folly Fields Lines: 19 86 22.1 %
Date: 2023-05-11 23:59:26 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           0 :   static Color fromJsonColor(
      16             :     String? value, [
      17             :     int defaultColor = 0x00000000,
      18             :   ]) =>
      19           0 :       ColorValidator().parse(value) ?? Color(defaultColor);
      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             :   // TODO(edufolly): Remove in version 1.0.0.
      43           0 :   @Deprecated('Use fromJsonDecimalInt instead. '
      44             :       'This method will be removed in version 1.0.0.')
      45             :   static Decimal fromJsonDecimal(
      46             :     int? value,
      47             :     int? precision,
      48             :   ) =>
      49           0 :       fromJsonDecimalInt(value, precision);
      50             : 
      51             :   ///
      52             :   ///
      53             :   ///
      54           0 :   static Decimal fromJsonDecimalDouble(
      55             :     double? value,
      56             :     int? precision,
      57             :   ) =>
      58           0 :       Decimal(doubleValue: value ?? 0, precision: precision ?? 2);
      59             : 
      60             :   ///
      61             :   ///
      62             :   ///
      63           0 :   static Decimal fromJsonDecimalInt(
      64             :     int? value,
      65             :     int? precision,
      66             :   ) =>
      67           0 :       Decimal(intValue: value ?? 0, precision: precision ?? 2);
      68             : 
      69             :   ///
      70             :   ///
      71             :   ///
      72           0 :   static List<T> fromJsonList<T extends AbstractModel<Object>>(
      73             :     List<dynamic>? value,
      74             :     AbstractConsumer<T> consumer,
      75             :   ) =>
      76           0 :       _fromJsonRawIterable<T>(
      77             :         value,
      78           0 :         producer: (dynamic e) => consumer.fromJson(e),
      79           0 :       )?.toList() ??
      80           0 :       <T>[];
      81             : 
      82             :   ///
      83             :   ///
      84             :   ///
      85           0 :   static T? fromJsonModel<T extends AbstractModel<Object>>(
      86             :     Map<String, dynamic>? map,
      87             :     AbstractConsumer<T> consumer,
      88             :   ) =>
      89           0 :       map != null ? consumer.fromJson(map) : null;
      90             : 
      91             :   ///
      92             :   ///
      93             :   ///
      94           4 :   static DateTime? fromJsonNullableDateMillis(int? millis) =>
      95           8 :       millis != null && millis >= 0 && millis <= 8640000000000000
      96           4 :           ? DateTime.fromMillisecondsSinceEpoch(millis)
      97             :           : null;
      98             : 
      99             :   ///
     100             :   ///
     101             :   ///
     102           1 :   static DateTime? fromJsonNullableDateSecs(int? secs) =>
     103           2 :       fromJsonNullableDateMillis(secs == null ? null : (secs * 1000));
     104             : 
     105             :   ///
     106             :   ///
     107             :   ///
     108           2 :   static Iterable<T>? _fromJsonRawIterable<T>(
     109             :     Iterable<dynamic>? value, {
     110             :     required T Function(dynamic e) producer,
     111             :   }) =>
     112           2 :       value?.map<T>(producer);
     113             : 
     114             :   ///
     115             :   ///
     116             :   ///
     117           0 :   static Map<T, U> fromJsonRawMap<T, U>(
     118             :     Map<dynamic, dynamic>? value, {
     119             :     required T Function(dynamic k) keyProducer,
     120             :     required U Function(dynamic v) valueProducer,
     121             :   }) =>
     122           0 :       value?.map<T, U>(
     123           0 :         (dynamic key, dynamic value) => MapEntry<T, U>(
     124           0 :           keyProducer(key),
     125           0 :           valueProducer(value),
     126             :         ),
     127             :       ) ??
     128           0 :       <T, U>{};
     129             : 
     130             :   ///
     131             :   ///
     132             :   ///
     133           0 :   static List<T> fromJsonSafeList<T>(
     134             :     dynamic value, {
     135             :     required T Function(dynamic e) producer,
     136             :   }) =>
     137             :       value == null
     138           0 :           ? <T>[]
     139           0 :           : (value is Iterable)
     140           0 :               ? _fromJsonRawIterable<T>(value, producer: producer)?.toList() ??
     141           0 :                   <T>[]
     142           0 :               : <T>[producer(value)];
     143             : 
     144             :   ///
     145             :   ///
     146             :   ///
     147           1 :   static Set<T> fromJsonSafeSet<T>(
     148             :     dynamic value, {
     149             :     required T Function(dynamic e) producer,
     150             :   }) =>
     151             :       value == null
     152             :           ? <T>{}
     153           1 :           : (value is Iterable)
     154           2 :               ? _fromJsonRawIterable<T>(value, producer: producer)?.toSet() ??
     155             :                   <T>{}
     156           1 :               : <T>{producer(value)};
     157             : 
     158             :   ///
     159             :   ///
     160             :   ///
     161           0 :   static List<String> fromJsonSafeStringList(dynamic value) =>
     162           0 :       fromJsonSafeList<String>(
     163             :         value,
     164             :         producer: stringProducer,
     165             :       );
     166             : 
     167             :   ///
     168             :   ///
     169             :   ///
     170           0 :   static Set<String> fromJsonSafeStringSet(dynamic value) =>
     171           0 :       fromJsonSafeSet<String>(
     172             :         value,
     173             :         producer: stringProducer,
     174             :       );
     175             : 
     176             :   ///
     177             :   ///
     178             :   ///
     179           1 :   static Set<T> fromJsonSet<T extends AbstractModel<Object>>(
     180             :     Set<dynamic>? value,
     181             :     AbstractConsumer<T> consumer,
     182             :   ) =>
     183           1 :       _fromJsonRawIterable<T>(
     184             :         value,
     185           2 :         producer: (dynamic e) => consumer.fromJson(e),
     186           1 :       )?.toSet() ??
     187             :       <T>{};
     188             : 
     189             :   ///
     190             :   ///
     191             :   ///
     192           0 :   static String stringProducer(dynamic e) => e.toString();
     193             : 
     194             :   ///
     195             :   ///
     196             :   ///
     197           0 :   static String toMapColor(Color color) => ColorValidator().format(color);
     198             : 
     199             :   ///
     200             :   ///
     201             :   ///
     202           0 :   static int toMapDateMillis(DateTime dateTime) =>
     203           0 :       dateTime.millisecondsSinceEpoch;
     204             : 
     205             :   ///
     206             :   ///
     207             :   ///
     208           0 :   static int toMapDateSecs(DateTime dateTime) =>
     209           0 :       dateTime.millisecondsSinceEpoch ~/ 1000;
     210             : 
     211             :   ///
     212             :   ///
     213             :   ///
     214             :   // TODO(edufolly): Remove in version 1.0.0.
     215           0 :   @Deprecated('Use toMapDecimalInt instead. '
     216             :       'This method will be removed in version 1.0.0.')
     217           0 :   static int toMapDecimal(Decimal decimal) => toMapDecimalInt(decimal);
     218             : 
     219             :   ///
     220             :   ///
     221             :   ///
     222           0 :   static double toMapDecimalDouble(Decimal decimal) => decimal.doubleValue;
     223             : 
     224             :   ///
     225             :   ///
     226             :   ///
     227           0 :   static int toMapDecimalInt(Decimal decimal) => decimal.intValue;
     228             : 
     229             :   ///
     230             :   ///
     231             :   ///
     232           0 :   static List<Map<String, dynamic>> toMapList<T extends AbstractModel<Object>>(
     233             :     List<T> list,
     234             :   ) =>
     235           0 :       list.map((T e) => e.toMap()).toList();
     236             : 
     237             :   ///
     238             :   ///
     239             :   ///
     240           0 :   static Map<String, dynamic>? toMapModel<T extends AbstractModel<Object>>(
     241             :     T? model,
     242             :   ) =>
     243           0 :       model?.toMap();
     244             : 
     245             :   ///
     246             :   ///
     247             :   ///
     248           0 :   static int? toMapNullableDateMillis(DateTime? dateTime) =>
     249           0 :       dateTime?.millisecondsSinceEpoch;
     250             : 
     251             :   ///
     252             :   ///
     253             :   ///
     254           0 :   static int? toMapNullableDateSecs(DateTime? dateTime) =>
     255           0 :       dateTime == null ? null : dateTime.millisecondsSinceEpoch ~/ 1000;
     256             : 
     257             :   ///
     258             :   ///
     259             :   ///
     260           0 :   static Set<Map<String, dynamic>> toMapSet<T extends AbstractModel<Object>>(
     261             :     Set<T> set,
     262             :   ) =>
     263           0 :       set.map((T e) => e.toMap()).toSet();
     264             : 
     265             :   ///
     266             :   ///
     267             :   ///
     268           0 :   static void _toSaveMapOnlyId(Map<String, dynamic>? map) => map?.removeWhere(
     269           0 :         (String key, dynamic value) => key != FollyFields().modelIdKey,
     270             :       );
     271             : 
     272             :   ///
     273             :   ///
     274             :   ///
     275           0 :   static void toSaveListMapOnlyId(List<dynamic>? list) => list
     276           0 :       ?.map(
     277           0 :         (dynamic e) => e is Map<String, dynamic> ? _toSaveMapOnlyId(e) : null,
     278             :       )
     279           0 :       .toList();
     280             : 
     281             :   ///
     282             :   ///
     283             :   ///
     284           0 :   static List<Map<String, dynamic>>?
     285             :       toSaveList<T extends AbstractModel<Object>>(
     286             :     List<T>? list,
     287             :   ) =>
     288           0 :           _toSaveIterable(list)?.toList();
     289             : 
     290             :   ///
     291             :   ///
     292             :   ///
     293           0 :   static void toSaveSetMapOnlyId(Set<dynamic>? set) => set
     294           0 :       ?.map(
     295           0 :         (dynamic e) => e is Map<String, dynamic> ? _toSaveMapOnlyId(e) : null,
     296             :       )
     297           0 :       .toSet();
     298             : 
     299             :   ///
     300             :   ///
     301             :   ///
     302           0 :   static Set<Map<String, dynamic>>? toSaveSet<T extends AbstractModel<Object>>(
     303             :     Set<T>? set,
     304             :   ) =>
     305           0 :       _toSaveIterable(set)?.toSet();
     306             : 
     307             :   ///
     308             :   ///
     309             :   ///
     310           0 :   static Iterable<Map<String, dynamic>>?
     311             :       _toSaveIterable<T extends AbstractModel<Object>>(Iterable<T>? iterable) =>
     312           0 :           iterable?.map((T e) => e.toSave());
     313             : }

Generated by: LCOV version 1.14