0.0.8 • Published 6 years ago

track-dsl v0.0.8

Weekly downloads
2
License
ISC
Repository
github
Last release
6 years ago

TrackDSL

DSL support for track.

Build Status

Installation

npm

npm install track-dsl

Usage

For example, create DSL having #getter and #setter.

class Hoge extends Base {
  static definer() {
    getter('foo');  // Define instance.foo
    getter('bar');  // Define instance.bar
    setter('piyo'); // Define instance.piyo=
  }
}

Define DSL

const TrackDSL = require('track-dsl');
class Base {
  constructor() {
    const dsl = new TrackDSL(this, {
      'getter': {func: this._defineGetter, binding: this},
      'setter': {func: this._defineSetter, binding: this},
    });

    dsl.evaluate(this.constructor.definer);
  }

  _defineGetter(name) {
    Object.defineProperty(this, name, {
      get: function() {
        return this[`_${name}`];
      }
    });
  }

  _defineSetter(name) {
    Object.defineProperty(this, name, {
      set: function(value) {
        this[`_${name}`] = value;
      }
    });
  }
}

Use

const hoge = new Hoge();

hoge.piyo = 'piyo';
hoge.foo;

Base class.

Use track-dsl/lib/base.

const TrackDSLBase = require('track-dsl/lib/extendable');

class BaseA extend TrackDSLBase {
  static dsl() {
    return  {
      'getter': {func: this._defineGetter, binding: this},
    }
  }

  constructor() {
    this.evaluateDSL();
  }
}

class BaseB extend BaseA {
  static dsl() {
    return  {
      'setter': {func: this._defineSetter, binding: this},
    }
  }
}

class ClassA extend BaseB {
  static definer() {
    getter('foo');  // Define instance.foo
  }
}

class ClassB extend ClassA {
  static definer() {
    setter('bar');  // Define instance.bar
  }
}

ClassB will define getter foo and setter bar.

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago