Dont fail when there are thigns to set with array and object types

This commit is contained in:
Ben Ogle
2014-09-24 16:14:47 -07:00
parent 969ca048e8
commit af1bdaf901
2 changed files with 23 additions and 3 deletions

View File

@@ -644,6 +644,15 @@ describe "Config", ->
nestedObject:
nestedBool: true
it 'will set only the values that adhere to the schema', ->
expect(atom.config.set 'foo.bar',
anInt: 'nope'
nestedObject:
nestedBool: true
).toBe true
expect(atom.config.get('foo.bar.anInt')).toEqual 12
expect(atom.config.get('foo.bar.nestedObject.nestedBool')).toEqual true
describe 'when the value has an "array" type', ->
beforeEach ->
schema =

View File

@@ -404,16 +404,27 @@ Config.addSchemaValidators
coercion: (value, schema) ->
throw new Error('Value must be an object') if typeof value isnt 'object'
return value unless schema.properties?
newValue = {}
for prop, childSchema of schema.properties
value[prop] = @executeSchemaValidators(value[prop], childSchema) if prop of value
value
continue unless prop of value
try
newValue[prop] = @executeSchemaValidators(value[prop], childSchema)
catch error
;
newValue
'array':
coercion: (value, schema) ->
throw new Error('Value must be an array') unless Array.isArray(value)
itemSchema = schema.items
if itemSchema?
@executeSchemaValidators(item, itemSchema) for item in value
newValue = []
for item in value
try
newValue.push @executeSchemaValidators(item, itemSchema)
catch error
;
newValue
else
value