semver-select
Version:
Select an attribute of an object based on semver versioning
82 lines (55 loc) • 2.62 kB
Markdown
# semver-select.js
# Select an attribute of an object based on semver versioning
## Current status
[](https://www.npmjs.com/package/semver-select)
[](http://travis-ci.org/overlookmotel/semver-select)
[](https://david-dm.org/overlookmotel/semver-select)
[](https://david-dm.org/overlookmotel/semver-select)
[](https://coveralls.io/r/overlookmotel/semver-select)
API is stable. All features tested and working.
## What's it for
A few useful tools for when you need to select a function or other variable based on a [semver](https://www.npmjs.com/package/semver) version.
For example, if you are writing an app which interacts with an API which needs a different calling signature depending on it's version, you can use this to choose a function that implements the right interface for that API version.
## Usage
### `semverSelect(version, choices)`
Takes a list of choices as an object with semver match strings as the object's attributes.
Loops through `choice`'s attributes and returns the first matching result.
Returns `undefined` if no match found.
```js
var semverSelect = require('semver-select');
var fns = {
'^1.0.0': function(in) { return 'v1' },
'^2.0.0': function(in) { return 'v2' },
'*': function(in) { return 'other' }
};
semverSelect('1.0.2', fns)(); // returns 'v1'
semverSelect('2.3.8', fns)(); // returns 'v2'
semverSelect('4.0.0', fns)(); // returns 'other'
```
### `semverSelect.object(version, choicesObject)`
Takes an object and maps the values of attributes to the semver-chosen choice.
```js
semverSelect('2.3.8', {
monkey: {
'^1.0.0': 'v1',
'1.0.0 - 2.x.x': 'v2',
'*': 'other'
},
dinosaur: {
'^1.0.0': 'ver1',
'^2.0.0': 'ver2'
}
}); // returns { monkey: 'v2', dinosaur: 'ver2' }
```
## Tests
Use `npm test` to run the tests. Use `npm run cover` to check coverage.
## Changelog
See changelog.md
## Issues
If you discover a bug, please raise an issue on Github. https://github.com/overlookmotel/semver-select/issues
## Contribution
Pull requests are very welcome. Please:
* ensure all tests pass before submitting PR
* add an entry to changelog
* add tests for new features
* document new functionality/API additions in README