forked from samus/mongodb-csharp
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote branch 'craig/master' into 090beta2
- Loading branch information
Showing
2 changed files
with
126 additions
and
117 deletions.
There are no files selected for viewing
89 changes: 46 additions & 43 deletions
89
source/MongoDB.Tests/UnitTests/Configuration/MongoConfigurationBuilderTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,46 @@ | ||
using System; | ||
using MongoDB.Configuration; | ||
using NUnit.Framework; | ||
|
||
namespace MongoDB.UnitTests.Configuration | ||
{ | ||
[TestFixture] | ||
public class MongoConfigurationBuilderTests | ||
{ | ||
private class Person | ||
{ | ||
public Guid Id { get; set; } | ||
|
||
public string Name { get; set; } | ||
} | ||
|
||
[Test] | ||
public void Test() | ||
{ | ||
var configure = new MongoConfigurationBuilder(); | ||
|
||
configure.ConnectionString(cs => | ||
{ | ||
cs.Pooled = true; | ||
}); | ||
|
||
configure.Mapping(mapping => | ||
{ | ||
mapping.DefaultProfile(p => | ||
{ | ||
p.AliasesAreCamelCased(); | ||
p.CollectionNamesAreCamelCasedAndPlural(); | ||
}); | ||
mapping.Map<Person>(m => | ||
{ | ||
m.CollectionName("people"); | ||
m.Member("Name").Alias("name").DefaultValue("something").Ignore(); | ||
}); | ||
}); | ||
} | ||
} | ||
} | ||
using System; | ||
using MongoDB.Configuration; | ||
using NUnit.Framework; | ||
|
||
namespace MongoDB.UnitTests.Configuration | ||
{ | ||
[TestFixture] | ||
public class MongoConfigurationBuilderTests | ||
{ | ||
private class Person | ||
{ | ||
public Guid Id { get; set; } | ||
|
||
public int Age { get; set; } | ||
|
||
public string Name { get; set; } | ||
} | ||
|
||
[Test] | ||
public void Test() | ||
{ | ||
var configure = new MongoConfigurationBuilder(); | ||
|
||
configure.ConnectionString(cs => | ||
{ | ||
cs.Pooled = true; | ||
}); | ||
|
||
configure.Mapping(mapping => | ||
{ | ||
mapping.DefaultProfile(p => | ||
{ | ||
p.AliasesAreCamelCased(); | ||
p.CollectionNamesAreCamelCasedAndPlural(); | ||
}); | ||
mapping.Map<Person>(m => | ||
{ | ||
m.CollectionName("people"); | ||
m.Member(x => x.Age).Alias("age"); | ||
m.Member(x => x.Name).Alias("name").DefaultValue("something").Ignore(); | ||
}); | ||
}); | ||
} | ||
} | ||
} |
154 changes: 80 additions & 74 deletions
154
source/MongoDB/Configuration/Builders/ClassOverridesBuilder.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,75 +1,81 @@ | ||
using System; | ||
using MongoDB.Configuration.Mapping.Auto; | ||
using System.Linq.Expressions; | ||
using System.Reflection; | ||
|
||
namespace MongoDB.Configuration.Builders | ||
{ | ||
/// <summary> | ||
/// | ||
/// </summary> | ||
/// <typeparam name="T"></typeparam> | ||
public class ClassOverridesBuilder<T> | ||
{ | ||
private readonly ClassOverrides _overrides; | ||
|
||
/// <summary> | ||
/// Initializes a new instance of the <see cref="ClassOverridesBuilder<T>"/> class. | ||
/// </summary> | ||
/// <param name="overrides">The overrides.</param> | ||
internal ClassOverridesBuilder(ClassOverrides overrides) | ||
{ | ||
if (overrides == null) | ||
throw new ArgumentNullException("overrides"); | ||
|
||
_overrides = overrides; | ||
} | ||
|
||
/// <summary> | ||
/// Collections the name. | ||
/// </summary> | ||
/// <param name="name">The name.</param> | ||
public void CollectionName(string name) | ||
{ | ||
_overrides.CollectionName = name; | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified member. | ||
/// </summary> | ||
/// <param name="member">The member.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(MemberInfo member) | ||
{ | ||
var overrides = _overrides.GetOverridesFor(member); | ||
return new MemberOverridesBuilder(overrides); | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified name. | ||
/// </summary> | ||
/// <param name="name">The name.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(string name) | ||
{ | ||
var members = typeof(T).GetMember(name, MemberTypes.Field | MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); | ||
if (members == null || members.Length == 0) | ||
throw new InvalidOperationException("No member was found."); | ||
if (members.Length > 1) | ||
throw new InvalidOperationException("More than one member matched the specified name."); | ||
|
||
return Member(members[0]); | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified member. | ||
/// </summary> | ||
/// <param name="member">The member.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(Expression<Func<T, object>> member) | ||
{ | ||
var mex = (MemberExpression)member.Body; | ||
return Member(mex.Member.Name); | ||
} | ||
} | ||
using System; | ||
using MongoDB.Configuration.Mapping.Auto; | ||
using System.Linq.Expressions; | ||
using System.Reflection; | ||
|
||
namespace MongoDB.Configuration.Builders | ||
{ | ||
/// <summary> | ||
/// | ||
/// </summary> | ||
/// <typeparam name="T"></typeparam> | ||
public class ClassOverridesBuilder<T> | ||
{ | ||
private readonly ClassOverrides _overrides; | ||
|
||
/// <summary> | ||
/// Initializes a new instance of the <see cref="ClassOverridesBuilder<T>"/> class. | ||
/// </summary> | ||
/// <param name="overrides">The overrides.</param> | ||
internal ClassOverridesBuilder(ClassOverrides overrides) | ||
{ | ||
if (overrides == null) | ||
throw new ArgumentNullException("overrides"); | ||
|
||
_overrides = overrides; | ||
} | ||
|
||
/// <summary> | ||
/// Collections the name. | ||
/// </summary> | ||
/// <param name="name">The name.</param> | ||
public void CollectionName(string name) | ||
{ | ||
_overrides.CollectionName = name; | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified member. | ||
/// </summary> | ||
/// <param name="member">The member.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(MemberInfo member) | ||
{ | ||
var overrides = _overrides.GetOverridesFor(member); | ||
return new MemberOverridesBuilder(overrides); | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified name. | ||
/// </summary> | ||
/// <param name="name">The name.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(string name) | ||
{ | ||
var members = typeof(T).GetMember(name, MemberTypes.Field | MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); | ||
if (members == null || members.Length == 0) | ||
throw new InvalidOperationException("No member was found."); | ||
if (members.Length > 1) | ||
throw new InvalidOperationException("More than one member matched the specified name."); | ||
|
||
return Member(members[0]); | ||
} | ||
|
||
/// <summary> | ||
/// Members the specified member. | ||
/// </summary> | ||
/// <param name="member">The member.</param> | ||
/// <returns></returns> | ||
public MemberOverridesBuilder Member(Expression<Func<T, object>> member) | ||
{ | ||
var memberExpression = member.Body as MemberExpression; | ||
if (memberExpression == null) | ||
{ | ||
var unaryExpression = member.Body as UnaryExpression; | ||
memberExpression = unaryExpression.Operand as MemberExpression; | ||
} | ||
|
||
return Member(memberExpression.Member.Name); | ||
} | ||
} | ||
} |