< Summary

Information
Class: MyNet.Observable.BehaviorExtensions
Assembly: MyNet.Observable
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Observable/Behaviors/Extensions/BehaviorExtensions.cs
Tag: 323_28699572109
Line coverage
68%
Covered lines: 11
Uncovered lines: 5
Coverable lines: 16
Total lines: 119
Line coverage: 68.7%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ReactOnCultureChanged(...)100%11100%
ReactOnTimeZoneChanged(...)100%11100%
UseSelection(...)100%210%
UseTracking(...)100%11100%
UseValidation(...)100%11100%
ForwardProperty(...)100%11100%
ForwardProperty(...)100%210%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Observable/Behaviors/Extensions/BehaviorExtensions.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="BehaviorExtensions.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.ComponentModel;
 9using System.Linq.Expressions;
 10using FluentValidation;
 11using MyNet.Globalization.Culture;
 12using MyNet.Globalization.DateTime;
 13using MyNet.Observable.Behaviors;
 14using MyNet.Primitives;
 15
 16#pragma warning disable IDE0130 // Namespace does not match folder structure
 17namespace MyNet.Observable;
 18#pragma warning restore IDE0130 // Namespace does not match folder structure
 19
 20/// <summary>
 21/// Provides extension methods for the <see cref="ObservableObject"/> class, allowing to easily add behaviors to an obse
 22/// </summary>
 23public static class BehaviorExtensions
 24{
 25    /// <summary>
 26    /// Adds localization behavior to the specified observable object. This method registers a new instance of <see cref
 27    /// </summary>
 28    extension<TOwner>(TOwner owner)
 29        where TOwner : ObservableObject
 30    {
 31        /// <summary>
 32        /// Adds localization behavior to the specified observable object.
 33        /// </summary>
 34        /// <param name="cultureService">The culture service used to handle culture changes.</param>
 35        /// <returns>The observable object with localization behavior added.</returns>
 36        public ObservableObject ReactOnCultureChanged(ICultureService cultureService)
 37        {
 16838            owner.Behaviors.Register(new CultureChangedBehavior(owner, cultureService));
 39
 16840            return owner;
 41        }
 42
 43        /// <summary>
 44        /// Adds time zone localization behavior to the specified observable object. This method registers a new instanc
 45        /// </summary>
 46        /// <param name="timeZoneService">The time zone service used to handle time zone changes.</param>
 47        /// <returns>The observable object with time zone localization behavior added.</returns>
 48        public ObservableObject ReactOnTimeZoneChanged(ITimeZoneService timeZoneService)
 49        {
 350            owner.Behaviors.Register(new TimeZoneChangedBehavior(owner, timeZoneService));
 51
 352            return owner;
 53        }
 54
 55        /// <summary>
 56        /// Adds selection state (<see cref="ISelectable"/>) to the observable object.
 57        /// </summary>
 58        /// <param name="isSelectable">Initial value for <see cref="ISelectable.IsSelectable"/>.</param>
 59        /// <returns>The registered <see cref="SelectionBehavior"/>.</returns>
 60        public SelectionBehavior UseSelection(bool isSelectable = true)
 61        {
 062            var behavior = new SelectionBehavior(owner, isSelectable);
 063            owner.Behaviors.Register(behavior);
 064            return behavior;
 65        }
 66
 67        /// <summary>
 68        /// Adds modification tracking behavior to the specified observable object. This method registers a new instance
 69        /// </summary>
 70        /// <returns>The observable object with modification tracking behavior added.</returns>
 71        public ObservableObject UseTracking()
 72        {
 4873            owner.Behaviors.Register(new ModificationTrackingBehavior(owner));
 74
 4875            return owner;
 76        }
 77
 78        /// <summary>
 79        /// Adds validation behavior to the specified observable object. This method registers a new instance of <see cr
 80        /// </summary>
 81        /// <param name="validator">The validator used to validate the observable object's properties.</param>
 82        /// <returns>The validation behavior added to the observable object.</returns>
 83        public ValidationBehavior<TOwner> UseValidation(IValidator validator)
 84        {
 8185            var behavior = new ValidationBehavior<TOwner>(owner, validator);
 86
 8187            owner.Behaviors.Register(behavior);
 88
 8189            return behavior;
 90        }
 91
 92        /// <summary>
 93        /// Registers a <see cref="PropertyChangedForwardingBehavior"/> for the property selected by the expression.
 94        /// </summary>
 95        /// <typeparam name="T">The type of the property.</typeparam>
 96        /// <param name="selector">Expression selecting the property (e.g. x => x.Wrapper).</param>
 97        /// <param name="concatenatePropertyName">True to emit Wrapper.Name; false to emit Name only.</param>
 98        /// <returns>The observable object.</returns>
 99        public ObservableObject ForwardProperty<T>(Expression<Func<TOwner, T?>> selector, bool concatenatePropertyName =
 100            where T : class, INotifyPropertyChanged
 101        {
 18102            MetadataBehaviorApplicator.ApplyForwardProperty(owner, selector.PropertyName(), concatenatePropertyName);
 18103            return owner;
 104        }
 105
 106        /// <summary>
 107        /// Registers a <see cref="PropertyChangedForwardingBehavior"/> for the provided property name.
 108        /// </summary>
 109        /// <param name="propertyName">The wrapper property name.</param>
 110        /// <param name="concatenatePropertyName">True to emit Wrapper.Name; false to emit Name only.</param>
 111        /// <returns>The observable object.</returns>
 112        public ObservableObject ForwardProperty(string propertyName, bool concatenatePropertyName = true)
 113        {
 0114            MetadataBehaviorApplicator.ApplyForwardProperty(owner, propertyName, concatenatePropertyName);
 0115            return owner;
 116        }
 117    }
 118}
 119