-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
Add support for shareable modules
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,51 @@ | ||
var _ = require('lodash') | ||
|
||
module.exports = function loadOption (name) { | ||
var env = process.env['SCRIPTY_' + _.snakeCase(name).toUpperCase()] | ||
if (envVarSet(posixEnvVarName(name))) { | ||
return boolEnvVarValue(posixEnvVarName(name)) | ||
} else if (envVarSet(packageEnvVarName(name))) { | ||
return boolEnvVarValue(packageEnvVarName(name)) | ||
} else if (envVarSet(packageArrayEnvVarName(name))) { | ||
return arrayEnvVarValue(packageEnvVarName(name)) | ||
} | ||
} | ||
|
||
function boolEnvVarValue (envVarName) { | ||
var value = process.env[envVarName] | ||
|
||
if (value === 'true') { | ||
return true | ||
} else if (value === 'false') { | ||
return false | ||
} else { | ||
return value | ||
} | ||
} | ||
|
||
function arrayEnvVarValue (envVarName) { | ||
var count = 0 | ||
var result = [] | ||
|
||
while (envVarSet(envVarName + '_' + count)) { | ||
result.push(process.env[envVarName + '_' + count]) | ||
count++ | ||
} | ||
|
||
if (env === 'true') return true | ||
if (env === 'false') return false | ||
if (env) return env | ||
return result | ||
} | ||
|
||
function envVarSet (envVarName) { | ||
return !!process.env[envVarName] | ||
} | ||
|
||
var pkg = process.env['npm_package_scripty_' + name] | ||
function posixEnvVarName (optionName) { | ||
return 'SCRIPTY_' + _.snakeCase(optionName).toUpperCase() | ||
} | ||
|
||
function packageEnvVarName (optionName) { | ||
return 'npm_package_scripty_' + optionName | ||
} | ||
|
||
if (pkg === 'true') return true | ||
if (pkg === 'false') return false | ||
if (pkg) return pkg | ||
function packageArrayEnvVarName (optionName) { | ||
return packageEnvVarName(optionName) + '_0' | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,22 @@ | ||
var path = require('path') | ||
|
||
module.exports = function (dir1, dir2) { | ||
var expanded = path.resolve(dir1, path.join.apply(this, dir2.split(':'))) | ||
module.exports = function (dir1, dir2, moduleDirs) { | ||
var globs = [] | ||
var scriptPath = path.join.apply(this, dir2.split(':')) | ||
var searchSpaceDirs = [].concat(dir1, moduleDirs) | ||
|
||
searchSpaceDirs.forEach(function (dir) { | ||
var scriptDir = path.resolve(dir, scriptPath) | ||
|
||
return [ | ||
// exact file match (+ any same-named extensions) | ||
expanded + '+(|.*)', | ||
globs.push(scriptDir + '+(|.*)') | ||
|
||
// a nested index file match (+ any same-named extensions) | ||
path.join(expanded, 'index+(|.*)'), | ||
globs.push(path.join(scriptDir, 'index+(|.*)')) | ||
|
||
// any nested files at all | ||
path.join(expanded, '*') | ||
] | ||
globs.push(path.join(scriptDir, '*')) | ||
}) | ||
|
||
return globs | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,36 @@ | ||
var path = require('path') | ||
|
||
var subject = require('./glob-patterns') | ||
|
||
module.exports = { | ||
simpleCase: function () { | ||
var result = subject(__dirname, 'foo:bar') | ||
var result = subject(__dirname, 'foo:bar', []) | ||
|
||
assert.equal(result.length, 3) | ||
assert.equal(result[0], path.resolve(__dirname, 'foo/bar') + '+(|.*)') | ||
assert.equal(result[1], path.resolve(__dirname, 'foo/bar/index') + '+(|.*)') | ||
assert.equal(result[2], path.resolve(__dirname, 'foo/bar/*')) | ||
}, | ||
modulesCase: function () { | ||
var result = subject( | ||
__dirname, | ||
'foo:bar', | ||
[ | ||
path.join(process.cwd(), 'node_modules/bar/scripts'), | ||
path.join(process.cwd(), 'node_modules/baz/scripts') | ||
] | ||
) | ||
|
||
assert.equal(result.length, 9) | ||
assert.equal(result[0], path.resolve(__dirname, 'foo/bar') + '+(|.*)') | ||
assert.equal(result[1], path.resolve(__dirname, 'foo/bar/index') + '+(|.*)') | ||
assert.equal(result[2], path.resolve(__dirname, 'foo/bar/*')) | ||
|
||
assert.equal(result[3], path.resolve(process.cwd(), 'node_modules/bar/scripts/foo/bar') + '+(|.*)') | ||
assert.equal(result[4], path.resolve(process.cwd(), 'node_modules/bar/scripts/foo/bar/index') + '+(|.*)') | ||
assert.equal(result[5], path.resolve(process.cwd(), 'node_modules/bar/scripts/foo/bar/*')) | ||
|
||
assert.equal(result[6], path.resolve(process.cwd(), 'node_modules/baz/scripts/foo/bar') + '+(|.*)') | ||
assert.equal(result[7], path.resolve(process.cwd(), 'node_modules/baz/scripts/foo/bar/index') + '+(|.*)') | ||
assert.equal(result[8], path.resolve(process.cwd(), 'node_modules/baz/scripts/foo/bar/*')) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,44 @@ | ||
var path = require('path') | ||
|
||
var subject = require('./script-dirs') | ||
|
||
module.exports = { | ||
beforeEach: function () { | ||
this.resolvePkg = td.replace('resolve-pkg') | ||
this.subject = require('./script-dirs') | ||
}, | ||
unixUserScripts: function () { | ||
assert.equal(subject({scripts: 'A', scriptsWin: 'B'}, 'lolnix').userDir, 'A') | ||
assert.equal(subject({scripts: null, scriptsWin: 'B'}, 'lolnix').userDir, | ||
assert.equal(this.subject({scripts: 'A', scriptsWin: 'B'}, 'lolnix').userDir, 'A') | ||
assert.equal(this.subject({scripts: null, scriptsWin: 'B'}, 'lolnix').userDir, | ||
path.resolve(process.cwd(), 'scripts')) | ||
}, | ||
unixBuiltInScripts: function () { | ||
assert.equal(subject({builtIn: 'A', builtInWin: 'B'}, 'lolnix').ourDir, 'A') | ||
assert.equal(subject({builtIn: null, builtInWin: 'B'}, 'lolnix').ourDir, | ||
assert.equal(this.subject({builtIn: 'A', builtInWin: 'B'}, 'lolnix').ourDir, 'A') | ||
assert.equal(this.subject({builtIn: null, builtInWin: 'B'}, 'lolnix').ourDir, | ||
path.resolve(__dirname, '../../scripts')) | ||
}, | ||
windowsUserScripts: function () { | ||
assert.equal(subject({scripts: 'A', scriptsWin: 'B'}, 'win32').userDir, 'B') | ||
assert.equal(subject({scripts: 'A', scriptsWin: null}, 'win32').userDir, | ||
assert.equal(this.subject({scripts: 'A', scriptsWin: 'B'}, 'win32').userDir, 'B') | ||
assert.equal(this.subject({scripts: 'A', scriptsWin: null}, 'win32').userDir, | ||
path.resolve(process.cwd(), 'scripts-win')) | ||
// change dirs to any place that lacks a ./scripts-win dir | ||
td.when(td.replace(process, 'cwd')()).thenReturn(__dirname) | ||
assert.equal(subject({scripts: 'A', scriptsWin: null}, 'win32').userDir, 'A') | ||
assert.equal(subject({scripts: null, scriptsWin: null}, 'win32').userDir, | ||
assert.equal(this.subject({scripts: 'A', scriptsWin: null}, 'win32').userDir, 'A') | ||
assert.equal(this.subject({scripts: null, scriptsWin: null}, 'win32').userDir, | ||
path.resolve(process.cwd(), 'scripts')) | ||
}, | ||
windowsBuiltIn: function () { | ||
assert.equal(subject({builtIn: 'A', builtInWin: 'B'}, 'win32').ourDir, 'B') | ||
assert.equal(subject({builtIn: 'A', builtInWin: null}, 'win32').ourDir, | ||
assert.equal(this.subject({builtIn: 'A', builtInWin: 'B'}, 'win32').ourDir, 'B') | ||
assert.equal(this.subject({builtIn: 'A', builtInWin: null}, 'win32').ourDir, | ||
path.resolve(__dirname, '../../scripts-win')) | ||
}, | ||
moduleDirs: function () { | ||
td.when(this.resolvePkg('bar')).thenReturn('node_modules/bar') | ||
|
||
assert.deepEqual( | ||
this.subject({ | ||
modules: ['bar'] | ||
}, | ||
'lolnix' | ||
).moduleDirs, [path.resolve(process.cwd(), 'node_modules/bar/scripts')] | ||
) | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
@ECHO OFF | ||
|
||
echo Hello, World! from user win | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#!/bin/bash | ||
|
||
WORLD="World" | ||
|
||
echo "Hello, $WORLD! from user" |