1.0.0 • Published 10 years ago

vizier v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
10 years ago

Vizier Build Status Dependencies

Overview

Vizier is a tiny framework for performing realtime, distributed, one-way data synchronization.

Usage

On the server, you'll need to install vizier and connect it to a network pipe. Vizier only works the pipe delivers updates as quickly as possible; two great options are socket.io or PubNub.

// server.js
import Vizier from 'vizier';
import io from 'socket.io';

Vizier
  .build('postgres://my-database-url')
  .track('my_table')  // Assuming such a table already exists, of course.
  .then((vizier) => {
    io.on('connect', (socket) => {
      let pipe = (update) => socket.emit('vizier', update);
      let desynchronize = vizier.synchronize('my_table', pipe);
      socket.on('disconnect', () => desynchronize());
    });
  });

On the client, you'll need to install vizier-client-simple and submit Vizier's messages to it.

// client.js
import io from 'socket.io-client';
import Sink from 'vizier-client-simple';

let sink = new Sink();

io.on('vizier', (message) => {
  sink.submit(message);
});

setInterval(() => {
  console.log(`There are now ${sink.get('item').length} items in the database.`);
}, 1000);

Any table you've synchronized on the server will be stored in sink, updated in realtime (or however fast your actual network framework is).

Configuration

Pass options to make(connection, options) or use Vizier#configure(options). You may also pass per-synchronization options from the options.synchronization key directly to Vizier#synchronize(table, pipe, options) to override the instance options. Anyway, here are the available options and their defaults:

/**
 * Reconfigures this Vizier instance with new options.
 *
 * @param  {object} options
 *         The options to use; read the method for details.
 */
configure (options) {

  // Set defaults for the options.
  options = options || {};

  // A delimiter used to manage objects in the database.
  options.delimiter = options.delimiter || '‡';

  // A prefix used to manage objects in the database.
  options.prefix = options.prefix || 'vizier';

  // Set default synchronization options.
  options.synchronization = options.synchronization || {};

  // Whether or not we synchronize from now, or from all time.
  options.synchronization.full = options.synchronization.full || false;

  // The loader for tables/rows coming in from the database.
  options.synchronization.loader = options.synchronization.loader || new DefaultLoader(this.client);

  // Initialize this instance's options.
  this.options = options;
}