pick-and-roll
v1.1.0
Published
Keep environment specific attributes in separate configuration files and build desired config on demand.
Downloads
28
Readme
picknroll
Keep environment specific attributes in separate configuration files and build desired config on demand.
npm i pick-and-roll
The package is port from ruby https://github.com/DimaSalakhov/picknroll
The problem
Michael and Scotty work on the same website. Michael use url "http://localhost", Scotty - "http://website". Configuration lives in repository.
Basically guys have to options:
- store 2 configuration files and duplicate common settings
- manually change url setting after checkout
Their problems may be overcome with the following solution:
- Keep common settings in configuration file
- Separate distinct settings to custom files: Michael.json and Scotty.json respectively
- Build configuration result configuration file based on common and custom files on demand
Config splitting
Web.config:
<configuration>
<appSettings>
<add key="Language" value="@@language@@" />
<add key="BaseUri" value="@@baseurl@@" />
</appSettings>
</configuration>
config.json
{ "language":"C#" }
Michael.json:
{ "baseuri":"http://localhost" }
Scotty.json:
{
"language":"Ruby"
"baseuri":"http://website"
}
where config.json accumulates settings which is true for the majority, but should be customizable
Usage
var PickAndRoll = require('pick-and-roll');
new PickAndRoll().go()
will look for config.json and .json file as custom config
or
var PickAndRoll = require('pick-and-roll');
new PickAndRoll({configFile: 'Scotty'}).go()
will look for config.json and execute with Scotty.json file as custom config, overriding language setting
Configuration
All configuration files are in json format, process can be configured with .parconfig file:
{
"customDir": "_configs",
"config": "config.json",
"files": [
"app.generic.xml",
"web.config"
]
}
customDir - path to directory with configuration files (default: _configs) config - path to file with common settings (default: config.json; expected to be placed inside customDir) files - array of files to be parsed. If filename contain ".generic.", then new file without slug will be generated, otherwise values will be substituted in original file.
Example
.parconfig:
{
"files": [
"app.generic.xml",
"web.config"
]
}
Web.generic.xml:
<configuration>
<add key="BaseUri" value="@@baseurl@@" />
</configuration>
App.config:
<configuration>
<add key="uri" value="@@baseurl@@" />
</configuration>
config.json:
{ "baseuri":"http://domain.name" }
Michael.json:
{ "baseuri":"http://localhost" }
If we run PickAndRoll on PC called Michael we'll get
web.generic.xml - untouched web.xml:
<configuration>
<add key="BaseUri" value="http://localhost" />
</configuration>
App.config:
<configuration>
<add key="uri" value="http://localhost" />
</configuration>