public static void PopulateFrom(this PartialSchema partialSchema, Schema schema) { if (schema == null) return; partialSchema.Type = schema.Type; partialSchema.Format = schema.Format; if (schema.Items != null) { // TODO: Handle jagged primitive array and error on jagged object array partialSchema.Items = new PartialSchema(); partialSchema.Items.PopulateFrom(schema.Items); } partialSchema.Default = schema.Default; partialSchema.Maximum = schema.Maximum; partialSchema.ExclusiveMaximum = schema.ExclusiveMaximum; partialSchema.Minimum = schema.Minimum; partialSchema.ExclusiveMinimum = schema.ExclusiveMinimum; partialSchema.MaxLength = schema.MaxLength; partialSchema.MinLength = schema.MinLength; partialSchema.Pattern = schema.Pattern; partialSchema.MaxItems = schema.MaxItems; partialSchema.MinItems = schema.MinItems; partialSchema.UniqueItems = schema.UniqueItems; partialSchema.Enum = schema.Enum; partialSchema.MultipleOf = schema.MultipleOf; }
public void Apply_DelegatesToSpecifiedFilter_IfTypeDecoratedWithFilterAttribute() { var schema = new Schema { }; var filterContext = FilterContextFor(typeof(SwaggerAnnotatedType)); Subject().Apply(schema, filterContext); Assert.NotEmpty(schema.Extensions); }
public void Apply(Schema model, ModelFilterContext context) { _logger.LogInformation("Applying an awesome IModelFilter that leverages Dependency Injection"); model.Default = new { Id = "myCartId" }; }
public void Apply(Schema model, ModelFilterContext context) { var typeInfo = context.SystemType.GetTypeInfo(); var attributes = typeInfo.GetCustomAttributes(false).OfType<SwaggerModelFilterAttribute>(); foreach (var attr in attributes) { var filter = (IModelFilter)ActivatorUtilities.CreateInstance(_serviceProvider, attr.Type, attr.Arguments); filter.Apply(model, context); } }
private void ApplyPropertyComments(Schema propertySchema, PropertyInfo propertyInfo) { var commentId = XmlCommentsIdHelper.GetCommentIdForProperty(propertyInfo); var propertyNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, commentId)); if (propertyNode == null) return; var summaryNode = propertyNode.SelectSingleNode(SummaryTag); if (summaryNode != null) { propertySchema.Description = summaryNode.ExtractContent(); } }
private void ApplyPropertyComments(Schema propertySchema, MemberInfo memberInfo) { var propertyXPath = string.Format(PropertyExpression, memberInfo.DeclaringType.XmlLookupName(), memberInfo.Name); var propertyNode = _xmlNavigator.SelectSingleNode(propertyXPath); if (propertyNode == null) return; var propSummaryNode = propertyNode.SelectSingleNode(SummaryExpression); if (propSummaryNode != null) { propertySchema.Description = propSummaryNode.ExtractContent(); } }
public void Apply_SetsDescription_FromClassSummaryTag( Type type, string expectedDescription) { var schema = new Schema { Properties = new Dictionary<string, Schema>() }; var filterContext = FilterContextFor(type); Subject().Apply(schema, filterContext); Assert.Equal(expectedDescription, schema.Description); }
public void Apply_SetsPropertyDescriptions_FromPropertySummaryTag( Type type, string propertyName, string expectedDescription) { var schema = new Schema { Properties = new Dictionary<string, Schema>() { { propertyName, new Schema() } } }; var filterContext = FilterContextFor(type); Subject().Apply(schema, filterContext); Assert.Equal(expectedDescription, schema.Properties[propertyName].Description); }
public void Apply(Schema model, ModelFilterContext context) { var commentId = XmlCommentsIdHelper.GetCommentIdForType(context.SystemType); var typeNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, commentId)); if (typeNode != null) { var summaryNode = typeNode.SelectSingleNode(SummaryTag); if (summaryNode != null) model.Description = summaryNode.ExtractContent(); } foreach (var entry in model.Properties) { var jsonProperty = context.JsonObjectContract.Properties[entry.Key]; if (jsonProperty == null) continue; ApplyPropertyComments(entry.Value, jsonProperty.PropertyInfo()); } }
public void Apply(Schema model, ModelFilterContext context) { var typeXPath = string.Format(TypeExpression, context.SystemType.XmlLookupName()); var typeNode = _xmlNavigator.SelectSingleNode(typeXPath); if (typeNode != null) { var summaryNode = typeNode.SelectSingleNode(SummaryExpression); if (summaryNode != null) model.Description = summaryNode.ExtractContent(); } foreach (var entry in model.Properties) { var jsonProperty = context.JsonObjectContract.Properties[entry.Key]; if (jsonProperty == null) continue; ApplyPropertyComments(entry.Value, jsonProperty.PropertyInfo()); } }
private Schema CreateObjectSchema(JsonObjectContract jsonContract) { var properties = jsonContract.Properties .Where(p => !p.Ignored) .Where(p => !(_options.IgnoreObsoleteProperties && p.IsObsolete())) .ToDictionary( prop => prop.PropertyName, prop => CreateSchema(prop.PropertyType, true).AssignValidationProperties(prop) ); var required = jsonContract.Properties.Where(prop => prop.IsRequired()) .Select(propInfo => propInfo.PropertyName) .ToList(); var schema = new Schema { Required = required.Any() ? required : null, // required can be null but not empty Properties = properties, Type = "object" }; var filterContext = new ModelFilterContext( jsonContract.UnderlyingType, jsonContract, this); foreach (var filter in _options.ModelFilters) { filter.Apply(schema, filterContext); } return schema; }
public void Apply(Schema model, ModelFilterContext context) { model.Extensions.Add("X-property1", "value"); }