updating specs
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/582fdfa6 Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/582fdfa6 Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/582fdfa6 Branch: refs/heads/master Commit: 582fdfa6e4dadf07f1b356696204088226316a7a Parents: fd679f3 Author: Anis Kadri <[email protected]> Authored: Sat Jul 27 17:46:27 2013 -0700 Committer: Anis Kadri <[email protected]> Committed: Sat Jul 27 17:46:27 2013 -0700 ---------------------------------------------------------------------- plugman.js | 5 +- spec/config.js | 10 --- spec/config.spec.js | 11 +++ spec/plugins/DummyPlugin/plugin.xml | 9 ++- spec/registry/registry.js | 20 ------ spec/registry/registry.spec.js | 94 +++++++++++++++++++++++++ src/registry/manifest.js | 25 +++---- src/registry/registry.js | 117 +++++++++++++++---------------- 8 files changed, 187 insertions(+), 104 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/plugman.js ---------------------------------------------------------------------- diff --git a/plugman.js b/plugman.js index 716c5ef..b921f4d 100755 --- a/plugman.js +++ b/plugman.js @@ -27,7 +27,7 @@ plugman = { uninstall: require('./src/uninstall'), fetch: require('./src/fetch'), prepare: require('./src/prepare'), - config: require('./config'), + config: require('./src/config'), adduser: require('./src/adduser'), publish: require('./src/publish'), unpublish: require('./src/unpublish'), @@ -40,6 +40,9 @@ plugman = { }; plugman.commands = { + 'config' : function(cli_opts) { + plugman.config(cli_opts.argv.remain); + }, 'install' : function(cli_opts) { if(!cli_opts.platform || !cli_opts.project || !cli_opts.plugin) { return console.log(plugman.help()); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/spec/config.js ---------------------------------------------------------------------- diff --git a/spec/config.js b/spec/config.js deleted file mode 100644 index 5f4f781..0000000 --- a/spec/config.js +++ /dev/null @@ -1,10 +0,0 @@ -var config = require('../src/config'), - registry = require('../src/registry/registry'); - -describe('config', function() { - it('should run config', function() { - var sConfig = spyOn(registry, 'config'); - config(function(err, result) { }); - expect(sConfig).toHaveBeenCalledWith(jasmine.any(Function)); - }); -}); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/spec/config.spec.js ---------------------------------------------------------------------- diff --git a/spec/config.spec.js b/spec/config.spec.js new file mode 100644 index 0000000..fe54636 --- /dev/null +++ b/spec/config.spec.js @@ -0,0 +1,11 @@ +var config = require('../src/config'), + registry = require('../src/registry/registry'); + +describe('config', function() { + it('should run config', function() { + var sConfig = spyOn(registry, 'config'); + var params = ['set', 'registry', 'http://registry.cordova.io']; + config(params, function(err, result) { }); + expect(sConfig).toHaveBeenCalledWith(params, jasmine.any(Function)); + }); +}); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/spec/plugins/DummyPlugin/plugin.xml ---------------------------------------------------------------------- diff --git a/spec/plugins/DummyPlugin/plugin.xml b/spec/plugins/DummyPlugin/plugin.xml index deba345..162044a 100644 --- a/spec/plugins/DummyPlugin/plugin.xml +++ b/spec/plugins/DummyPlugin/plugin.xml @@ -23,7 +23,14 @@ id="com.phonegap.plugins.dummyplugin" version="0.6.0"> - <name>Dummy Plugin</name> + <!-- new requirement: NO SPACES --> + <name>dummyplugin</name> + <!-- These are going to be required by plugman-registry --> + <description>my description</description> + <author>Jackson Badman</author> + <keywords>dummy,plugin</keywords> + <license>BSD</license> + <!-- end plugman-registry requirements --> <asset src="www/dummyplugin.js" target="dummyplugin.js" /> <asset src="www/dummyplugin" target="dummyplugin" /> http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/spec/registry/registry.js ---------------------------------------------------------------------- diff --git a/spec/registry/registry.js b/spec/registry/registry.js deleted file mode 100644 index d4baf59..0000000 --- a/spec/registry/registry.js +++ /dev/null @@ -1,20 +0,0 @@ -var registry = require('../../src/registry/registry'), - npm = require('npm'); - -describe('registry', function() { - beforeEach(function() { - registry.settings = { - cache: plugmanCacheDir, - force: true, - logstream: fs.createWriteStream(path.resolve(plugmanConfigDir, 'plugman.log')), - userconfig: path.resolve(plugmanConfigDir, 'config') - }; - }); - it('should run config', function() { - var sLoad = spyOn(npm, 'load').andCallThrough(); - var sConfig = spyOn(npm, 'config'); - registry.config(new Array('/path/to/myplugin')); - expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); - expect(sPublish).toHaveBeenCalledWith(['/path/to/myplugin'], jasmine.any(Function)); - }); -}); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/spec/registry/registry.spec.js ---------------------------------------------------------------------- diff --git a/spec/registry/registry.spec.js b/spec/registry/registry.spec.js new file mode 100644 index 0000000..8b26c1f --- /dev/null +++ b/spec/registry/registry.spec.js @@ -0,0 +1,94 @@ +var registry = require('../../src/registry/registry'), + manifest = require('../../src/registry/manifest'), + fs = require('fs'), + path = require('path'), + npm = require('npm'); + +describe('registry', function() { + describe('manifest', function() { + var pluginDir, packageJson; + beforeEach(function() { + pluginDir = __dirname + '/../plugins/DummyPlugin'; + packageJson = path.resolve(pluginDir, 'package.json'); + }); + afterEach(function() { + fs.unlink(packageJson); + + }); + it('should generate a package.json from a plugin.xml', function() { + manifest.generatePackageJsonFromPluginXml(pluginDir); + expect(fs.existsSync(packageJson)); + expect(JSON.parse(fs.readFileSync(packageJson)).name).toEqual('dummyplugin'); + expect(JSON.parse(fs.readFileSync(packageJson)).version).toEqual('0.6.0'); + }); + }); + describe('actions', function() { + beforeEach(function() { + var fakeSettings = { + cache: '/some/cache/dir', + logstream: 'somelogstream@2313213', + userconfig: '/some/config/dir' + }; + var fakeNPMCommands = { + config: function() {}, + adduser: function() {}, + publish: function() {}, + unpublish: function() {}, + search: function() {} + } + registry.settings = fakeSettings; + npm.commands = fakeNPMCommands; + }); + it('should run config', function() { + var params = ['set', 'registry', 'http://registry.cordova.io']; + var sLoad = spyOn(npm, 'load').andCallFake(function(err, cb) { + cb(); + }); + var sConfig = spyOn(npm.commands, 'config'); + registry.config(params, function() {}); + expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); + expect(sConfig).toHaveBeenCalledWith(params, jasmine.any(Function)); + }); + it('should run adduser', function() { + var sLoad = spyOn(npm, 'load').andCallFake(function(err, cb) { + cb(); + }); + var sAddUser = spyOn(npm.commands, 'adduser'); + registry.adduser(null, function() {}); + expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); + expect(sAddUser).toHaveBeenCalledWith(null, jasmine.any(Function)); + }); + it('should run publish', function() { + var params = [__dirname + '/../plugins/DummyPlugin']; + var sLoad = spyOn(npm, 'load').andCallFake(function(err, cb) { + cb(); + }); + var sPublish = spyOn(npm.commands, 'publish'); + var sGenerate = spyOn(manifest, 'generatePackageJsonFromPluginXml'); + registry.publish(params, function() {}); + expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); + expect(sGenerate).toHaveBeenCalledWith(params[0]); + expect(sPublish).toHaveBeenCalledWith(params, jasmine.any(Function)); + }); + it('should run unpublish', function() { + var params = ['[email protected]']; + var sLoad = spyOn(npm, 'load').andCallFake(function(err, cb) { + cb(); + }); + var sUnpublish = spyOn(npm.commands, 'unpublish'); + registry.unpublish(params, function() {}); + expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); + expect(sUnpublish).toHaveBeenCalledWith(params, jasmine.any(Function)); + }); + it('should run search', function() { + var params = ['dummyplugin', 'plugin']; + var sLoad = spyOn(npm, 'load').andCallFake(function(err, cb) { + cb(); + }); + var sSearch = spyOn(npm.commands, 'search'); + registry.search(params, function() {}); + expect(sLoad).toHaveBeenCalledWith(registry.settings, jasmine.any(Function)); + expect(sSearch).toHaveBeenCalledWith(params, true, jasmine.any(Function)); + }); + }); +}); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/src/registry/manifest.js ---------------------------------------------------------------------- diff --git a/src/registry/manifest.js b/src/registry/manifest.js index 59f7bb6..9a6e66c 100644 --- a/src/registry/manifest.js +++ b/src/registry/manifest.js @@ -2,8 +2,14 @@ var DOMParser = require('xmldom').DOMParser, path = require('path'), fs = require('fs'); +function handleError(err, cb) { + if(typeof cb == 'function') { + return cb(err); + } + throw err; +} + // Java world big-up! -// TODO use CALLBACK function generatePackageJsonFromPluginXml(plugin_path, cb) { var package_json = {}; var plugin_xml = fs.readFileSync(path.resolve(plugin_path, 'plugin.xml'), "utf8"); @@ -18,11 +24,7 @@ function generatePackageJsonFromPluginXml(plugin_path, cb) { var version = doc.documentElement.getAttribute('version') if(!version) { var e = new Error('`version` required'); - if(cb) { - cb(e); - return null; - } - throw e; + return handleError(e, cb) } package_json.version = version; @@ -30,14 +32,13 @@ function generatePackageJsonFromPluginXml(plugin_path, cb) { if(doc.documentElement.getElementsByTagName('name').length != 1 || !doc.documentElement.getElementsByTagName('name').item(0).firstChild) { var e = new Error('`name` is required'); - if(cb) { - cb(e); - return null; - } - throw e; + return handleError(e, cb) } var name = doc.documentElement.getElementsByTagName('name').item(0).firstChild.nodeValue; - if(!name.match(/^\w+|-*$/)) throw new Error('`name` can only contain alphanumberic characters and -') + if(!name.match(/^\w+|-*$/)) { + var e = new Error('`name` can only contain alphanumberic characters and -') + return handleError(e, cb); + } package_json.name = name.toLowerCase(); // OPTIONAL fields: description, license, keywords. TODO: add more! http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/582fdfa6/src/registry/registry.js ---------------------------------------------------------------------- diff --git a/src/registry/registry.js b/src/registry/registry.js index bf99a15..a56f36a 100644 --- a/src/registry/registry.js +++ b/src/registry/registry.js @@ -9,57 +9,12 @@ var npm = require('npm'), plugmanConfigDir = path.resolve(process.env.HOME, '.plugman'), plugmanCacheDir = path.resolve(plugmanConfigDir, 'cache'); -var settings = module.exports.settings; - -function checkConfig(cb) { - if(settings != null) { - cb(); - } else { - use(cb); - } -} - function handleError(err, cb) { if(typeof cb == 'function') { return cb(err); } throw err; } -/** - * @method use - * @param {String} registry NPM registry URL - * @param {Function} cb callback - */ -function use(cb) { - if(typeof cb != 'function') throw new Error('Please provide a callback'); - // check if settings already set - if(settings != null) return cb(); - - // setting up settings - // obviously if settings dir does not exist settings is going to be empty - if(!fs.existsSync(plugmanConfigDir)) { - fs.mkdirSync(plugmanConfigDir); - fs.mkdirSync(plugmanCacheDir); - } - - settings = rc('plugman', { - cache: plugmanCacheDir, - force: true, - logstream: fs.createWriteStream(path.resolve(plugmanConfigDir, 'plugman.log')), - userconfig: path.resolve(plugmanConfigDir, 'config') - }); - - if(settings.registry) { - cb(); - } else { - // setting registry - npm.load(settings, function(er) { - if (er) return handlError(er); - npm.commands.config(['set', 'registry', 'http://registry.cordova.io'], cb); - }); - } - -} /** * @method getPackageInfo @@ -68,11 +23,13 @@ function use(cb) { */ function getPackageInfo(args, cb) { var thing = args.length ? args.shift().split("@") : [], - name = thing.shift(), - version = thing.join("@"), + name = thing.shift(), + version = thing.join("@"); version = version ? version : 'latest'; + var settings = module.exports.settings; + http.get(settings.registry + '/' + name + '/' + version, function(res) { if(res.statusCode != 200) { var err = new Error('Error'); @@ -98,6 +55,8 @@ function getPackageInfo(args, cb) { * @param {Function} cb callback */ function fetchPackage(info, cb) { + var settings = module.exports.settings; + var cached = path.resolve(settings.cache, info.name, info.version, 'package'); if(fs.existsSync(cached)) { cb(null, cached); @@ -130,10 +89,10 @@ module.exports = { * @param {Function} cb Command callback */ config: function(args, cb) { - checkConfig(function(err) { - if(err) return handleError(err, cb) + initSettings(function(err, settings) { + if(err) return handleError(err, cb); npm.load(settings, function(er) { - if (er) return handlError(er); + if (er) return handleError(er); npm.commands.config(args, cb); }); }); @@ -144,10 +103,10 @@ module.exports = { * @param {Function} cb Command callback */ adduser: function(args, cb) { - checkConfig(function(err) { - if(err) return handleError(err, cb) + initSettings(function(err, settings) { + if(err) return handleError(err, cb); npm.load(settings, function(er) { - if (er) return handlError(er); + if (er) return handleError(er); npm.commands.adduser(args, cb); }); }); @@ -158,11 +117,11 @@ module.exports = { * @param {Function} cb Command callback */ publish: function(args, cb) { - checkConfig(function(err) { + initSettings(function(err, settings) { if(err) return handleError(err, cb); manifest.generatePackageJsonFromPluginXml(args[0]); npm.load(settings, function(er) { - if (er) return handlError(er); + if (er) return handleError(er); npm.commands.publish(args, function(err, data) { fs.unlink(path.resolve(args[0], 'package.json')); cb(err, data); @@ -176,10 +135,10 @@ module.exports = { * @param {Function} cb Command callback */ search: function(args, cb) { - checkConfig(function(err) { + initSettings(function(err, settings) { if(err) return handleError(err, cb); npm.load(settings, function(er) { - if (er) return handlError(er, cb); + if (er) return handleError(er, cb); npm.commands.search(args, true, cb); }); }); @@ -190,7 +149,7 @@ module.exports = { * @param {Function} cb Command callback */ unpublish: function(args, cb) { - checkConfig(function(err) { + initSettings(function(err, settings) { if(err) return handleError(err, cb); npm.load(settings, function(er) { if (er) return handlError(er); @@ -207,8 +166,8 @@ module.exports = { * @param {Function} cb Command callback */ fetch: function(args, cb) { - checkConfig(function(err) { - if(err) return handleError(err, cb) + initSettings(function(err, settings) { + if(err) return handleError(err, cb); getPackageInfo(args, function(err, info) { if(err) return handleError(err, cb) fetchPackage(info, cb); @@ -216,3 +175,41 @@ module.exports = { }); } } + +/** + * @method initSettings + * @param {Function} cb callback + */ +function initSettings(cb) { + var settings = module.exports.settings; + if(typeof cb != 'function') throw new Error('Please provide a callback'); + // check if settings already set + if(settings != null) return cb(null, settings); + + // setting up settings + // obviously if settings dir does not exist settings is going to be empty + if(!fs.existsSync(plugmanConfigDir)) { + fs.mkdirSync(plugmanConfigDir); + fs.mkdirSync(plugmanCacheDir); + } + + settings = rc('plugman', { + cache: plugmanCacheDir, + force: true, + logstream: fs.createWriteStream(path.resolve(plugmanConfigDir, 'plugman.log')), + userconfig: path.resolve(plugmanConfigDir, 'config') + }); + + if(settings.registry) { + cb(null, settings); + } else { + // setting registry + npm.load(settings, function(er) { + if (er) return handlError(er); + npm.commands.config(['set', 'registry', 'http://registry.cordova.io'], function(err) { + cb(err, settings); + }); + }); + } + +}
