Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

mdc

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mdc

Multi Dimensional Configuration

  • 0.0.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Multi Dimensional Configuration

Configuration is simple when you have it defined in a chunk of code.

var cfg = require('mdc').create();

cfg.set({
    title: 'Github',
    host: 'http://github.com'
});

cfg.get('title'); // Github

It gets a bit unwieldy but still usable when you introduce different dimensions to your configuration such as development vs production.

var cfg = require('mdc').create([
    {
        "env": {
            "dev": null,
            "prod": null
        }
    }
]);

cfg.set({port: 8080}); // default
cfg.set({port: 3000}, {env: 'dev'});
cfg.set({port: 80}, {env: 'prod'});

cfg.get('port'); // 8080
cfg.get('port', {env: 'dev'}); // 3000
cfg.get('port', {env: 'prod'}); // 80

Then there's a whole world of crazy when you start changing things based on location, language or device type!

/*
 * Dimensions to work with
 */

var cfg = require('../').create([
    {
        "env": {
            "dev": null,
            "qa": null,
            "prod": null
        }
    },
    {
        "device": {
            "phone": {
                "iphone": {
                    "itouch": null
                },
                "nexus": null
            },
            "desktop": {
                "small": null,
                "large": null
            },
            "tablet": {
                "ipad": null,
                "galaxy": null
            }
        }
    },
    {
        "lang": {
            "en": {
                "en_US": {
                    "en_CA": null
                },
                "en_GB": null
            }
        }
    }
]);

// Default values

cfg.set({
    title: "Crazy World!",
    more: "Show more",
    source: "http://world.news.com/",
    show: 10
});

// Special values

cfg.set({
    title: "Crazy world, eh!"
}, {
    lang: "en_CA"
});

cfg.set({
    title: "It's a crazy world out there!"
}, {
    lang: "en_GB"
});

cfg.set({
    source: "http://localhost/test/news/"
}, {
    env: "dev"
});

cfg.set({
    source: "http://qa.my-company.com/news/fixtures/"
}, {
    env: "qa"
});

cfg.set({
    show: 5 // because it's smaller
}, {
    device: "phone"
});

cfg.set({
    show: 15 // because it's larger
}, {
    device: "desktop"
});

cfg.set({
    title: "It's crazy!" // because it's smaller
}, {
    device: "phone",
    lang: "en_GB"
});

cfg.get('source', {env: 'dev'}); // http://localhost/test/news/
cfg.get('title', {env: 'qa', lang: 'en_GB'}); // It's a crazy world out there!
cfg.get('show', {env: 'prod', lang: 'en_GB', device: 'itouch'}); // 5
cfg.get('title', {device: 'large', lang: 'en_CA'}); // Crazy world, eh!

I believe I did, Bob.

API

create

Simple use;

var cfg = mdc.create();

Complex use;

var cfg = mdc.create(dimensions, settings, schema);

set

Simple use;

mdc.set({key: 'value'});

Complex use;

mdc.set({path: {to: {key: 'value'}}}, {context: 'value'});

get

Simple use;

mdc.get('key');

Complex use;

mdc.get('path.to.key', {context: 'value'});

setBundle

mdc.setBundle(dimensions, settings, schema);

getBundle

var bundle = mdc.getBundle();

Data Structures

The following examples are shown in YAML.

Reserved Words

The following words cannot be used as top level keys in any data structures.

  • dimensions
  • settings
  • schema

Bundle

A bundle is an array of maps which collectively contain all the information required for the configuration.

- dimensions:
- settings:
- schema:

Dimensions

The dimensions are...

- dimensions:
    - region:
        us:
        jp:
    - site:
        sports:
        news:

Settings

The settings are...

- settings: [default]
  data:
    b: 5
    y: 7
- settings: [context:key]
  data:
    b: 10
- settings: [context:key, context:key]
  data:
    y: 14

Schema

The schema uses Avro and...

- schema:
  - name: settings
    type: record
    fields:
      - name: data
        type: map
        values: int

FAQs

Package last updated on 08 Jun 2012

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc