Skip to content

Commit 5f3947e

Browse files
committed
Minor refactoring, renaming and cleanup
1 parent 0a17020 commit 5f3947e

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

src/JsonApiDotNetCore/Builders/DocumentBuilder.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class DocumentBuilder : IDocumentBuilder
1313
private readonly IJsonApiContext _jsonApiContext;
1414
private readonly IContextGraph _contextGraph;
1515
private readonly IRequestMeta _requestMeta;
16-
private readonly DocumentBuilderOptions _documentBuilderOptions;
16+
private readonly DocumentBuilderOptions _documentBuilderOptions = new DocumentBuilderOptions();
1717

1818
public DocumentBuilder(IJsonApiContext jsonApiContext)
1919
{
@@ -33,7 +33,7 @@ public DocumentBuilder(IJsonApiContext jsonApiContext, IRequestMeta requestMeta,
3333
_jsonApiContext = jsonApiContext;
3434
_contextGraph = jsonApiContext.ContextGraph;
3535
_requestMeta = requestMeta;
36-
_documentBuilderOptions = documentBuilderBehavior?.GetDocumentBuilderOptions() ?? new DocumentBuilderOptions();
36+
_documentBuilderOptions = documentBuilderBehavior?.GetDocumentBuilderOptions() ?? _documentBuilderOptions;
3737
}
3838

3939
public Document Build(IIdentifiable entity)
@@ -127,13 +127,10 @@ private DocumentData GetData(ContextEntity contextEntity, IIdentifiable entity)
127127

128128
contextEntity.Attributes.ForEach(attr =>
129129
{
130-
if (ShouldIncludeAttribute(attr))
130+
var attributeValue = attr.GetValue(entity);
131+
if (ShouldIncludeAttribute(attr, attributeValue))
131132
{
132-
var value = attr.GetValue(entity);
133-
if (value != null || _documentBuilderOptions.IncludeNullAttributes)
134-
{
135-
data.Attributes.Add(attr.PublicAttributeName, value);
136-
}
133+
data.Attributes.Add(attr.PublicAttributeName, attributeValue);
137134
}
138135
});
139136

@@ -143,11 +140,17 @@ private DocumentData GetData(ContextEntity contextEntity, IIdentifiable entity)
143140
return data;
144141
}
145142

146-
private bool ShouldIncludeAttribute(AttrAttribute attr)
143+
private bool ShouldIncludeAttribute(AttrAttribute attr, object attributeValue)
147144
{
148-
return (_jsonApiContext.QuerySet == null
149-
|| _jsonApiContext.QuerySet.Fields.Count == 0
150-
|| _jsonApiContext.QuerySet.Fields.Contains(attr.InternalAttributeName));
145+
return !ExcludeNullValuedAttribute(attr, attributeValue)
146+
&& ((_jsonApiContext.QuerySet == null
147+
|| _jsonApiContext.QuerySet.Fields.Count == 0)
148+
|| _jsonApiContext.QuerySet.Fields.Contains(attr.InternalAttributeName));
149+
}
150+
151+
private bool ExcludeNullValuedAttribute(AttrAttribute attr, object attributeValue)
152+
{
153+
return attributeValue == null && _documentBuilderOptions.ExcludeNullValuedAttributes;
151154
}
152155

153156
private void AddRelationships(DocumentData data, ContextEntity contextEntity, IIdentifiable entity)

src/JsonApiDotNetCore/Builders/DocumentBuilderOptions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ namespace JsonApiDotNetCore.Builders
66
{
77
public struct DocumentBuilderOptions
88
{
9-
public DocumentBuilderOptions(bool isIncludeNullAttributes = false)
9+
public DocumentBuilderOptions(bool excludeNullValuedAttributes = false)
1010
{
11-
this.IncludeNullAttributes = isIncludeNullAttributes;
11+
this.ExcludeNullValuedAttributes = excludeNullValuedAttributes;
1212
}
1313

14-
public bool IncludeNullAttributes { get; private set; }
14+
public bool ExcludeNullValuedAttributes { get; private set; }
1515
}
1616
}

test/UnitTests/Builders/DocumentBuilder_Tests.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,22 +145,26 @@ public void Build_Can_Build_CustomIEnumerables()
145145

146146

147147
[Theory]
148-
[InlineData(null,false)]
149-
[InlineData(false,false)]
150-
[InlineData(true,true)]
151-
public void DocumentBuilderOptions(bool? isIcludeNullAttributesOptionValue,
152-
bool isNullValuesAreIncludedInResult)
148+
[InlineData(null,null,true)]
149+
[InlineData(false,null,true)]
150+
[InlineData(true,null,false)]
151+
[InlineData(null,"foo",true)]
152+
[InlineData(false,"foo",true)]
153+
[InlineData(true,"foo",true)]
154+
public void DocumentBuilderOptions(bool? excludeNullValuedAttributes,
155+
string attributeValue,
156+
bool resultContainsAttribute)
153157
{
154158
var documentBuilderBehaviourMock = new Mock<IDocumentBuilderBehavior>();
155-
if (isIcludeNullAttributesOptionValue.HasValue)
159+
if (excludeNullValuedAttributes.HasValue)
156160
{
157161
documentBuilderBehaviourMock.Setup(m => m.GetDocumentBuilderOptions())
158-
.Returns(new DocumentBuilderOptions(isIcludeNullAttributesOptionValue.Value));
162+
.Returns(new DocumentBuilderOptions(excludeNullValuedAttributes.Value));
159163
}
160-
var documentBuilder = new DocumentBuilder(_jsonApiContextMock.Object, null, isIcludeNullAttributesOptionValue.HasValue ? documentBuilderBehaviourMock.Object : null);
161-
var document = documentBuilder.Build(new Model());
164+
var documentBuilder = new DocumentBuilder(_jsonApiContextMock.Object, null, excludeNullValuedAttributes.HasValue ? documentBuilderBehaviourMock.Object : null);
165+
var document = documentBuilder.Build(new Model(){StringProperty = attributeValue});
162166

163-
Assert.Equal(isNullValuesAreIncludedInResult, document.Data.Attributes.ContainsKey("StringProperty"));
167+
Assert.Equal(resultContainsAttribute, document.Data.Attributes.ContainsKey("StringProperty"));
164168
}
165169

166170
private class Model : Identifiable

0 commit comments

Comments
 (0)