1.1.0 • Published 8 years ago

pick-and-roll v1.1.0

Weekly downloads
2
License
MIT
Repository
-
Last release
8 years ago

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:

  1. store 2 configuration files and duplicate common settings
  2. manually change url setting after checkout

Their problems may be overcome with the following solution:

  1. Keep common settings in configuration file
  2. Separate distinct settings to custom files: Michael.json and Scotty.json respectively
  3. 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>
1.1.0

8 years ago

1.0.8

9 years ago

1.0.7

10 years ago

1.0.6

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago