All Projects → yahoo → ycb

yahoo / ycb

Licence: BSD-3-Clause license
A multi-dimensional configuration library that builds bundles from resource files describing a variety of values.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to ycb

hocon
go implementation of lightbend's HOCON configuration library https://github.com/lightbend/config
Stars: ✭ 49 (-12.5%)
Mutual labels:  configuration-library
Config
configuration library for JVM languages using HOCON files
Stars: ✭ 5,459 (+9648.21%)
Mutual labels:  configuration-library

Yahoo! Configuration Bundle

Build Status

YCB is a multi-dimensional configuration library that builds bundles from resource files describing a variety of values. The library allows applications to configure themselves based on multiple dimensions describing locations, languages, environments, etc.

Install

npm install ycb --save

Usage

import YCB from 'ycb';
const configArray = [
    {
        dimensions: [
            {
                environment: {
                    dev: null,
                    staging: null,
                    test: null,
                    prod: null,
                },
            },
            {
                device: {
                    desktop: null,
                    mobile: {
                        tablet: null,
                        smartphone: null,
                    },
                },
            },
        ],
    },
    {
        settings: ['master'],
        host: 'example.com',
        prefix: null,
    },
    {
        settings: ['environment:dev'],
        host: 'dev.example.com',
    },
    {
        settings: ['environment:staging,test'],
        host: 'stage.example.com',
    },
    {
        settings: ['device:smartphone'],
        prefix: 'm.',
    },
];

const ycbObj = new YCB.Ycb(configArray);
const computedConfig = ycbObj.read({ environment: 'dev' });

console.log(computedConfig.host); // dev.example.com

Scheduling Changes

We can schedule configuration changes ahead of time by defining an interval along with a config and using the time aware read method. For example the following program.

import YCB from 'ycb';
const configArray = [
    {
        dimensions: [
            {
                environment: {
                    dev: null,
                    staging: null,
                    test: null,
                    prod: null,
                },
            },
            {
                region: {
                    us: null,
                    ca: null,
                },
            },
        ],
    },
    {
        settings: ['master'],
        host: 'example.com',
    },
    {
        settings: {
            dimensions: ['region:us'],
        },
        logo: 'logo.png',
    },
    {
        settings: {
            dimensions: ['region:us'],
            schedule: {
                start: '2019-11-28T00:04:00Z',
                end: '2019-11-29T00:04:00Z',
            },
        },
        logo: 'thanksgiving-logo.png',
    },
];

const ycbObj = new YCB.Ycb(configArray, { cacheInfo: true });
const config1 = ycbObj.readTimeAware({ region: 'us' }, 0);
const config2 = ycbObj.readTimeAware({ region: 'us' }, 1574899440000);
const config3 = ycbObj.readTimeAware({ region: 'us' }, 1574985840001);
console.log(config1);
console.log(config2);
console.log(config3);

will print

{ host: 'example.com',
  logo: 'logo.png',
  __ycb_expires_at__: 1574899440000 }
{ host: 'example.com',
  logo: 'thanksgiving-logo.png',
  __ycb_expires_at__: 1574985840001 }
{ host: 'example.com', logo: 'logo.png' }

These intervals are closed and either start or end may be omitted to define a one sided interval.

To support proper cache expiration one may set the cacheInfo option, in which case the next time the config will change is added to the returned object.

Examples

Examples are provided in the tests directory.

License

BSD see LICENSE.txt

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].