From fc3ba775c8c5648dd5c7b71076a323324980c372 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 24 Sep 2014 15:20:35 -0700 Subject: [PATCH] Support schemas in packages --- .../package-with-config-schema/index.coffee | 13 +++++++++++++ spec/package-manager-spec.coffee | 16 +++++++++++++++- src/package.coffee | 5 ++++- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/packages/package-with-config-schema/index.coffee diff --git a/spec/fixtures/packages/package-with-config-schema/index.coffee b/spec/fixtures/packages/package-with-config-schema/index.coffee new file mode 100644 index 000000000..7da1d67b7 --- /dev/null +++ b/spec/fixtures/packages/package-with-config-schema/index.coffee @@ -0,0 +1,13 @@ +module.exports = + config: + numbers: + type: 'object' + properties: + one: + type: 'integer' + default: 1 + two: + type: 'integer' + default: 2 + + activate: -> # no-op diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 16c697332..964dc5894 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -82,7 +82,21 @@ describe "PackageManager", -> expect(indexModule.activate).toHaveBeenCalled() expect(pack.mainModule).toBe indexModule - it "assigns config defaults from the module", -> + it "assigns config schema, including defaults when package contains a schema", -> + expect(atom.config.get('package-with-config-schema.numbers.one')).toBeUndefined() + + waitsForPromise -> + atom.packages.activatePackage('package-with-config-schema') + + runs -> + expect(atom.config.get('package-with-config-schema.numbers.one')).toBe 1 + expect(atom.config.get('package-with-config-schema.numbers.two')).toBe 2 + + expect(atom.config.set('package-with-config-schema.numbers.one', 'nope')).toBe false + expect(atom.config.set('package-with-config-schema.numbers.one', '10')).toBe true + expect(atom.config.get('package-with-config-schema.numbers.one')).toBe 10 + + it "still assigns configDefaults from the module though deprecated", -> expect(atom.config.get('package-with-config-defaults.numbers.one')).toBeUndefined() waitsForPromise -> diff --git a/src/package.coffee b/src/package.coffee index 30cd1ad2f..65442bf6f 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -143,7 +143,10 @@ class Package @requireMainModule() if @mainModule? - atom.config.setDefaults(@name, @mainModule.configDefaults) + if @mainModule.config? and typeof @mainModule.config is 'object' + atom.config.setSchema @name, {type: 'object', properties: @mainModule.config} + else if @mainModule.configDefaults? and typeof @mainModule.configDefaults is 'object' + atom.config.setDefaults(@name, @mainModule.configDefaults) @mainModule.activateConfig?() @configActivated = true