Skip to content

Commit

Permalink
Merge remote branch 'craig/master' into 090beta2
Browse files Browse the repository at this point in the history
  • Loading branch information
lanwin committed Jun 18, 2010
2 parents 91f770a + f531164 commit eded1d5
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 117 deletions.
@@ -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 source/MongoDB/Configuration/Builders/ClassOverridesBuilder.cs
@@ -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&lt;T&gt;"/> 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&lt;T&gt;"/> 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);
}
}
}

0 comments on commit eded1d5

Please sign in to comment.