Comparing version 0.3.0 to 0.3.1
{ | ||
"name": "strings", | ||
"version": "0.3.0", | ||
"version": "0.3.1", | ||
"main": [ | ||
@@ -5,0 +5,0 @@ "index.js" |
56
index.js
@@ -26,3 +26,5 @@ /** | ||
this._context = context || {}; | ||
this._templates = {}; | ||
this._replacements = {}; | ||
this._propstrings = {}; | ||
this._patterns = {}; | ||
this._parsers = {}; | ||
@@ -36,3 +38,3 @@ this._groups = {}; | ||
* | ||
* Set a propstring to be stored for later use. | ||
* Get or set a propstring. | ||
* | ||
@@ -47,5 +49,5 @@ * @param {String} `name` | ||
if (_.isUndefined(template)) { | ||
return this._templates[name]; | ||
return this._propstrings[name]; | ||
} | ||
this._templates[name] = template; | ||
this._propstrings[name] = template; | ||
return this; | ||
@@ -56,2 +58,45 @@ }; | ||
/** | ||
* .pattern (name, pattern) | ||
* | ||
* Get or set regular expression or string. | ||
* | ||
* @param {String} `name` | ||
* @param {String} `pattern` | ||
* @return {Object} Instance of the current Strings object | ||
* @api public | ||
*/ | ||
Strings.prototype.pattern = function (name, pattern, flags) { | ||
if (_.isUndefined(pattern)) { | ||
return this._patterns[name]; | ||
} | ||
if (!(pattern instanceof RegExp)) { | ||
pattern = new RegExp(pattern, flags || ''); | ||
} | ||
this._patterns[name] = pattern; | ||
return this; | ||
}; | ||
/** | ||
* .replacement (name, replacement) | ||
* | ||
* Get or set a replacement string or function. | ||
* | ||
* @param {String} `name` | ||
* @param {String} `replacement` | ||
* @return {Object} Instance of the current Strings object | ||
* @api public | ||
*/ | ||
Strings.prototype.replacement = function (name, replacement) { | ||
if (_.isUndefined(replacement)) { | ||
return this._replacements[name]; | ||
} | ||
this._replacements[name] = replacement; | ||
return this; | ||
}; | ||
/** | ||
* .parser (name, replacements) | ||
@@ -127,3 +172,4 @@ * | ||
var _parsers = this.parsers(parsers); | ||
return frep.strWithArr(template, utils._bind(_parsers, _.extend({}, this._context, context))); | ||
var ctx = utils._bind(_parsers, _.extend({}, this._context, context)); | ||
return frep.strWithArr(template, ctx); | ||
}; | ||
@@ -130,0 +176,0 @@ |
{ | ||
"name": "strings", | ||
"version": "0.3.0", | ||
"version": "0.3.1", | ||
"description": "Easily replace and transform :props in strings.", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/doowb/strings", |
287
test/test.js
@@ -12,290 +12,3 @@ /** | ||
describe('.propstring()', function() { | ||
var strings = new Strings(); | ||
describe('when a propstring is propstring()', function() { | ||
it('should be stored by Strings on the `_template` object:', function () { | ||
var name = 'test1'; | ||
var template = ':foo/:baz/:basename/index:ext'; | ||
strings.propstring(name, template); | ||
var actual = strings._templates[name]; | ||
expect(strings._templates).to.have.property(name); | ||
expect(actual).to.eql(template); | ||
}); | ||
it('should be retrievable using `propstring(name)`', function () { | ||
var name = 'test2'; | ||
var template = ':basename/index:ext'; | ||
strings.propstring(name, template); | ||
var actual = strings.propstring(name); | ||
expect(template).to.eql(template); | ||
}); | ||
}); | ||
}); | ||
describe('.parser() - add', function() { | ||
var strings = new Strings(); | ||
describe('when a named parser is defined', function() { | ||
it('should replace values with strings', function () { | ||
var name = 'test-parser-1'; | ||
var actual = { | ||
':basename': 'foo', | ||
':ext': '.html' | ||
}; | ||
strings.parser(name, actual); | ||
expect(strings._parsers).to.have.property(name); | ||
expect(actual).to.eql(strings._parsers[name]); | ||
}); | ||
it('should replace values with functions', function () { | ||
var name = 'test-parser-1'; | ||
var actual = { | ||
':basename': function () { | ||
return 'foo'; | ||
}, | ||
':ext': function () { | ||
return '.html'; | ||
} | ||
}; | ||
strings.parser(name, actual); | ||
expect(strings._parsers).to.have.property(name); | ||
expect(actual).to.eql(strings._parsers[name]); | ||
}); | ||
}); | ||
}); | ||
describe('.parser() - get', function() { | ||
var strings = new Strings(); | ||
describe('when only one paramter is passed', function() { | ||
it('it should retrieve the stored parser with the given name', function () { | ||
var name = 'test-parser-2'; | ||
var actual = { | ||
':basename': function () { | ||
return 'foo'; | ||
}, | ||
':ext': function () { | ||
return '.html'; | ||
} | ||
}; | ||
strings.parser(name, actual); | ||
expect(actual).to.eql(strings.parser(name)); | ||
}); | ||
}); | ||
}); | ||
describe('.parsers() -list', function () { | ||
var strings; | ||
before(function () { | ||
strings = new Strings(); | ||
strings.parser('objLiteralParser', {':foo': 'bar'}); | ||
strings.parser('objReplacementsParser', {pattern: ':bar', replacement: 'baz'}); | ||
strings.parser('objReplacementsFnParser', {pattern: ':baz', replacement: function () {return 'bing';}}); | ||
strings.parser('arrObjLiteralParser', [{ ':arrFoo': 'arrBar' }, { ':arrBar': 'arrBaz' }]); | ||
strings.parser('arrObjReplacementsParser', [ | ||
{ pattern: ':arrBaz', replacement: 'arrBing' }, | ||
{ pattern: ':arrBing', replacement: 'arrBang' } | ||
]); | ||
strings.parser('arrObjReplacementsFnParser', [ | ||
{ pattern: ':arrBang', replacement: function () { return 'arrBong'; } }, | ||
{ pattern: ':arrBeep', replacement: function () { return 'arrBoop'; } } | ||
]); | ||
}); | ||
describe('when passing in a single string as a replacement', function () { | ||
it('should parse and return the modified string', function () { | ||
var expected = [{ pattern: ':foo', replacement: 'bar' }]; | ||
var actual = strings.parsers('objLiteralParser'); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when passing in an array with a single string', function () { | ||
var expected = [{ pattern: ':bar', replacement: 'baz' }]; | ||
var actual = strings.parsers(['objReplacementsParser']); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when passing in an array with a multiple strings', function () { | ||
var expected = [ | ||
{ pattern: ':bar', replacement: 'baz' }, | ||
{ pattern: ':baz', replacement: function () { return 'bing'; } } | ||
]; | ||
var actual = strings.parsers(['objReplacementsParser', 'objReplacementsFnParser']); | ||
expect(actual.length).to.eql(expected.length); | ||
}); | ||
it('when passing in an array with a multiple types', function () { | ||
var expected = [ | ||
{ pattern: ':bar', replacement: 'baz' }, | ||
{ pattern: ':basename', replacement: 'file' }, | ||
{ pattern: ':ext', replacement: 'ext' } | ||
]; | ||
var actual = strings.parsers(['objReplacementsParser', {':basename': 'file', ':ext': 'ext'}]); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when passing in `undefined`', function () { | ||
var actual = strings.parsers(); | ||
expect(actual.length).to.eql(9); | ||
}); | ||
}); | ||
}); | ||
describe('.group()', function() { | ||
var strings; | ||
before(function () { | ||
strings = new Strings(); | ||
}); | ||
it('when adding a named group, it should be in `_groups`', function () { | ||
var name = 'a'; | ||
var propstring = 'b'; | ||
var parsers = ['a', 'b']; | ||
var expected = {propstring: propstring, parsers: parsers}; | ||
strings.group(name, propstring, parsers); | ||
expect(strings._groups).to.have.property(name); | ||
expect(expected).to.eql(strings._groups[name]); | ||
}); | ||
it('when adding a named group, it should be gotten through `group(name)`', function () { | ||
var name = 'a'; | ||
var propstring = 'b'; | ||
var parsers = ['a', 'b']; | ||
var actual = strings.group(name); | ||
var expected = {propstring: propstring, parsers: parsers}; | ||
strings.group(name, propstring, parsers); | ||
expect(expected).to.eql(strings.group(name)); | ||
}); | ||
}); | ||
describe('.template()', function () { | ||
var strings; | ||
before(function () { | ||
strings = new Strings(); | ||
}); | ||
it('when a template is passed in', function () { | ||
var expected = ':basename/index:ext'; | ||
var actual = strings.template(':basename/index:ext'); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a template and parser object are passed in', function () { | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': 'file', | ||
':ext': '.html' | ||
}; | ||
var actual = strings.template(':basename/index:ext', parser); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a template, parser object, and context are passed in', function () { | ||
var path = require('path'); | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': function () { | ||
return path.basename(this.filepath, path.extname(this.filepath)); | ||
}, | ||
':ext': function () { | ||
return path.extname(this.filepath); | ||
} | ||
}; | ||
var context = { | ||
filepath: 'path/to/my/file.html' | ||
}; | ||
var actual = strings.template(':basename/index:ext', parser, context); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a template, named parser, and context are passed in', function () { | ||
var path = require('path'); | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': function () { | ||
return path.basename(this.filepath, path.extname(this.filepath)); | ||
}, | ||
':ext': function () { | ||
return path.extname(this.filepath); | ||
} | ||
}; | ||
var context = { | ||
filepath: 'path/to/my/file.html' | ||
}; | ||
strings.parser('path', parser); | ||
var actual = strings.template(':basename/index:ext', 'path', context); | ||
expect(actual).to.eql(expected); | ||
}); | ||
}); | ||
describe('.process()', function () { | ||
var strings; | ||
before(function () { | ||
strings = new Strings(); | ||
strings.propstring('pretty', ':basename/index:ext'); | ||
}); | ||
it('when a propstring is passed in', function () { | ||
var expected = ':basename/index:ext'; | ||
var actual = strings.process('pretty'); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a propstring and parser object are passed in', function () { | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': 'file', | ||
':ext': '.html' | ||
}; | ||
var actual = strings.process('pretty', parser); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a propstring, parser object, and context are passed in', function () { | ||
var path = require('path'); | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': function () { | ||
return path.basename(this.filepath, path.extname(this.filepath)); | ||
}, | ||
':ext': function () { | ||
return path.extname(this.filepath); | ||
} | ||
}; | ||
var context = { | ||
filepath: 'path/to/my/file.html' | ||
}; | ||
var actual = strings.process('pretty', parser, context); | ||
expect(actual).to.eql(expected); | ||
}); | ||
it('when a propstring, named parser, and context are passed in', function () { | ||
var path = require('path'); | ||
var expected = 'file/index.html'; | ||
var parser = { | ||
':basename': function () { | ||
return path.basename(this.filepath, path.extname(this.filepath)); | ||
}, | ||
':ext': function () { | ||
return path.extname(this.filepath); | ||
} | ||
}; | ||
var context = { | ||
filepath: 'path/to/my/file.html' | ||
}; | ||
strings.parser('path', parser); | ||
var actual = strings.process('pretty', 'path', context); | ||
expect(actual).to.eql(expected); | ||
}); | ||
}); | ||
describe('.run()', function () { | ||
@@ -302,0 +15,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
63748
39
1042
0