diff --git a/lib/app.coffee b/lib/app.coffee index 9b29a093..4376e448 100644 --- a/lib/app.coffee +++ b/lib/app.coffee @@ -2,9 +2,9 @@ _ = require('lodash') path = require('path') capitano = require('capitano') resin = require('resin-sdk') +nplugm = require('nplugm') actions = require('./actions') errors = require('./errors/errors') -plugin = require('./plugin/plugin') capitano.permission 'user', (done) -> resin.auth.isLoggedIn (isLoggedIn) -> @@ -96,9 +96,9 @@ capitano.command(actions.examples.list) capitano.command(actions.examples.clone) capitano.command(actions.examples.info) -for pluginPath in plugin.getPluginsPathsByGlob('resin-plugin-*') +for pluginPath in nplugm.getPluginsPathsByGlob('resin-plugin-*') try - pluginMeta = plugin.getPluginMeta(pluginPath) + pluginMeta = nplugm.getPluginMeta(pluginPath) pluginMain = path.join(pluginPath, pluginMeta.main) pluginCommands = require(pluginMain) diff --git a/lib/plugin/plugin.coffee b/lib/plugin/plugin.coffee deleted file mode 100644 index 0730e8d4..00000000 --- a/lib/plugin/plugin.coffee +++ /dev/null @@ -1,44 +0,0 @@ -_ = require('lodash') -fs = require('fs') -path = require('path') -yeoman = require('yeoman-environment') -glob = require('glob') - -exports.getNpmPaths = -> - return yeoman.createEnv().getNpmPaths() - -exports.getPluginsPathsByGlob = (nameGlob) -> - - if not nameGlob? - throw new Error('Missing glob') - - if not _.isString(nameGlob) - throw new Error('Invalid glob') - - npmPaths = exports.getNpmPaths() - result = [] - - for npmPath in npmPaths - foundModules = glob.sync(nameGlob, cwd: npmPath) - foundModules = _.map foundModules, (foundModule) -> - return path.join(npmPath, foundModule) - - result = result.concat(foundModules) - - return result - -exports.getPluginMeta = (pluginPath) -> - pluginPackageJSONPath = path.join(pluginPath, 'package.json') - - if not fs.existsSync(pluginPackageJSONPath) - throw new Error("Missing or invalid plugin: #{pluginPath}") - - pluginPackageJSON = fs.readFileSync pluginPackageJSONPath, - encoding: 'utf8' - - try - meta = JSON.parse(pluginPackageJSON) - catch - throw new Error("Invalid package.json: #{pluginPackageJSONPath}") - - return meta diff --git a/lib/plugin/plugin.spec.coffee b/lib/plugin/plugin.spec.coffee deleted file mode 100644 index b21e9549..00000000 --- a/lib/plugin/plugin.spec.coffee +++ /dev/null @@ -1,150 +0,0 @@ -os = require('os') -_ = require('lodash') -path = require('path') -sinon = require('sinon') -chai = require('chai') -chai.use(require('sinon-chai')) -glob = require('glob') -fs = require('fs') -fsPlus = require('fs-plus') -mockFs = require('mock-fs') -expect = chai.expect -plugin = require('./plugin') - -describe 'Plugin:', -> - - describe '#getPluginsPathsByGlob()', -> - - describe 'given no glob', -> - - it 'should throw an error', -> - expect -> - plugin.getPluginsPathsByGlob() - .to.throw('Missing glob') - - describe 'given an invalid glob', -> - - it 'should throw an error', -> - expect -> - plugin.getPluginsPathsByGlob([ 'glob' ]) - .to.throw('Invalid glob') - - describe 'given a glob that does not matches anything', -> - - beforeEach -> - @globSyncStub = sinon.stub(glob, 'sync') - @globSyncStub.returns [] - - @plugins = plugin.getPluginsPathsByGlob('myGlob*') - - afterEach -> - @globSyncStub.restore() - - it 'should return an empty array', -> - expect(@plugins).to.deep.equal([]) - - describe 'given a glob that matches packages', -> - - beforeEach -> - @getNpmPathsStub = sinon.stub(plugin, 'getNpmPaths') - - if os.platform() is 'win32' - @getNpmPathsStub.returns([ 'C:\\node_modules' ]) - else - @getNpmPathsStub.returns([ '/usr/lib/node_modules' ]) - - @globSyncStub = sinon.stub(glob, 'sync') - @globSyncStub.returns [ - 'one' - 'two' - 'three' - ] - - @plugins = plugin.getPluginsPathsByGlob('myGlob*') - - afterEach -> - @getNpmPathsStub.restore() - @globSyncStub.restore() - - it 'should return an array', -> - expect(@plugins).to.be.an.instanceof(Array) - - it 'should have the proper length', -> - expect(@plugins).to.have.length(3) - - it 'should contain absolute paths', -> - for pluginPath in @plugins - expect(fsPlus.isAbsolute(pluginPath)).to.be.true - - it 'should return the appropriate paths', -> - if os.platform() is 'win32' - expect(@plugins[0]).to.equal('C:\\node_modules\\one') - expect(@plugins[1]).to.equal('C:\\node_modules\\two') - expect(@plugins[2]).to.equal('C:\\node_modules\\three') - else - expect(@plugins[0]).to.equal('/usr/lib/node_modules/one') - expect(@plugins[1]).to.equal('/usr/lib/node_modules/two') - expect(@plugins[2]).to.equal('/usr/lib/node_modules/three') - - describe '#getNpmPaths()', -> - - beforeEach -> - @npmPaths = plugin.getNpmPaths() - - it 'should return an array', -> - expect(@npmPaths).to.be.an.instanceof(Array) - - it 'should return at least one path', -> - expect(@npmPaths.length > 1).to.be.true - - it 'should contain absolute paths', -> - for npmPath in @npmPaths - expect(fsPlus.isAbsolute(npmPath)).to.be.true - - describe '#getPluginMeta()', -> - - describe 'given an invalid plugin', -> - - beforeEach -> - mockFs - '/hello/world': - 'package.json': 'Invalid package.json' - - afterEach -> - mockFs.restore() - - it 'should throw an error', -> - pluginPath = path.join('/', 'hello', 'world') - pluginPathPackageJSON = path.join(pluginPath, 'package.json') - expect -> - plugin.getPluginMeta(pluginPath) - .to.throw("Invalid package.json: #{pluginPathPackageJSON}") - - describe 'given a plugin that exists', -> - - beforeEach -> - mockFs - '/hello/world': - 'package.json': JSON.stringify({ name: 'myPlugin' }) - - afterEach -> - mockFs.restore() - - it 'should return the parsed object', -> - result = plugin.getPluginMeta('/hello/world') - expect(result).to.deep.equal - name: 'myPlugin' - - describe 'given a plugin that does not exist', -> - - beforeEach -> - @fsExistsSyncStub = sinon.stub(fs, 'existsSync') - @fsExistsSyncStub.returns(false) - - afterEach -> - @fsExistsSyncStub.restore() - - it 'should throw an error', -> - expect -> - plugin.getPluginMeta('/hello/world') - .to.throw('Missing or invalid plugin: /hello/world') diff --git a/package.json b/package.json index 4fb83a97..9c316e0f 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "progress-stream": "^0.5.0", "resin-cli-visuals": "0.0.1", "resin-sdk": "git+https://git@github.com/resin-io/resin-sdk.git", + "nplugm": "git+https://git@github.com/resin-io/nplugm.git", "underscore.string": "~2.4.0", "yeoman-environment": "^1.2.0" }