mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-04 10:02:40 +01:00
Added support for embedding lists of IEmbeddedDocument types.
This commit is contained in:
parent
b16d85d0fc
commit
57120c9eeb
55
NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs
Normal file
55
NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using FluentAssertions;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Datastore;
|
||||||
|
using NzbDrone.Core.Tv;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.Datastore
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class MappingExtensionFixture
|
||||||
|
{
|
||||||
|
|
||||||
|
public class EmbeddedType : IEmbeddedDocument
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TypeWithAllMappableProperties
|
||||||
|
{
|
||||||
|
public string PropString { get; set; }
|
||||||
|
public int PropInt { get; set; }
|
||||||
|
public bool PropBool { get; set; }
|
||||||
|
public Nullable<int> PropNullable { get; set; }
|
||||||
|
public EmbeddedType Embedded { get; set; }
|
||||||
|
public List<EmbeddedType> EmbeddedList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TypeWithNoMappableProperties
|
||||||
|
{
|
||||||
|
public Series Series { get; set; }
|
||||||
|
public List<string> ListOfStrings { get; set; }
|
||||||
|
|
||||||
|
public int ReadOnly { get; private set; }
|
||||||
|
public int WriteOnly { private get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void test_mappable_types()
|
||||||
|
{
|
||||||
|
var properties = typeof(TypeWithAllMappableProperties).GetProperties();
|
||||||
|
properties.Should().NotBeEmpty();
|
||||||
|
properties.Should().OnlyContain(c => MappingExtensions.IsMappableProperty(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void test_un_mappable_types()
|
||||||
|
{
|
||||||
|
var properties = typeof(TypeWithNoMappableProperties).GetProperties();
|
||||||
|
properties.Should().NotBeEmpty();
|
||||||
|
properties.Should().NotContain(c => MappingExtensions.IsMappableProperty(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -139,6 +139,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Datastore\BasicRepositoryFixture.cs" />
|
<Compile Include="Datastore\BasicRepositoryFixture.cs" />
|
||||||
<Compile Include="Datastore\DatabaseRelationshipFixture.cs" />
|
<Compile Include="Datastore\DatabaseRelationshipFixture.cs" />
|
||||||
|
<Compile Include="Datastore\MappingExtentionFixture.cs" />
|
||||||
<Compile Include="Datastore\ObjectDatabaseFixture.cs" />
|
<Compile Include="Datastore\ObjectDatabaseFixture.cs" />
|
||||||
<Compile Include="Framework\CoreTest.cs" />
|
<Compile Include="Framework\CoreTest.cs" />
|
||||||
<Compile Include="Framework\DbTest.cs" />
|
<Compile Include="Framework\DbTest.cs" />
|
||||||
|
@ -28,11 +28,6 @@ public object ToDB(object clrValue)
|
|||||||
{
|
{
|
||||||
if (clrValue == null) return null;
|
if (clrValue == null) return null;
|
||||||
|
|
||||||
if (clrValue as IEmbeddedDocument == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Attempted to embedded an object not marked with IEmbeddedDocument");
|
|
||||||
}
|
|
||||||
|
|
||||||
var json = JsonConvert.SerializeObject(clrValue);
|
var json = JsonConvert.SerializeObject(clrValue);
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Marr.Data.Mapping;
|
using Marr.Data.Mapping;
|
||||||
@ -29,7 +30,14 @@ public static bool IsMappableProperty(MemberInfo memberInfo)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return propertyInfo.CanRead && propertyInfo.CanWrite && IsSimpleType(propertyInfo.PropertyType);
|
if (typeof(IEnumerable<IEmbeddedDocument>).IsAssignableFrom(propertyInfo.PropertyType))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = propertyInfo.IsReadable() && propertyInfo.IsWritable() && IsSimpleType(propertyInfo.PropertyType);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsSimpleType(Type type)
|
public static bool IsSimpleType(Type type)
|
||||||
@ -45,5 +53,15 @@ public static bool IsSimpleType(Type type)
|
|||||||
|| type == typeof(DateTime)
|
|| type == typeof(DateTime)
|
||||||
|| type == typeof(Decimal);
|
|| type == typeof(Decimal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsReadable(this PropertyInfo propertyInfo)
|
||||||
|
{
|
||||||
|
return propertyInfo.CanRead && propertyInfo.GetGetMethod(false) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsWritable(this PropertyInfo propertyInfo)
|
||||||
|
{
|
||||||
|
return propertyInfo.CanWrite && propertyInfo.GetSetMethod(false) != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user