Socket
Book a DemoInstallSign in
Socket

active-document

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

active-document

Decorate a constructor to have attributes behind mutators

latest
Source
npmnpm
Version
2.0.0
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

Active Document

I encourage to read the source code as it is shorter and more precise than the documentation.

Adds getter and setter methods to an object based on existing properties or methods in their prototype.

Define attributes by adding properties (not prefixed with _) or methods (prefixed with get or set) to the prototype before calling decorate.

Install

npm install active-document

Use

var aDoc = require('active-document');

function Car(){
	aDoc.init(this);
}

aDoc.decorate(Car);

The decorate function is simply a mixin. It copies functions to the constructor and the prototype of the given object. This is known as concatenative inheritance.

Statics

In the car example these would be accessed as Car.<name> (e.g. Car.attributeNames).

  • attributeNames

    A list (Array) of defined attributes

  • addAttribute(name)

    Add an attribute manually

  • toJSON(document)

    Delegates to document.toJSON() (convenient for .map etc.)

  • fromJSON(json)

    Creates an object having json as its attributes.

    Does not invoke constructor.

    Use this for bootstrapping from a trusted external source such as a database or a web service.

Methods (added to the prototype)

  • toJSON

    Returns a copy of obj.attributes.

    Overwrite (define on the prototype) to customize format.

    Use this for shipping of to an external source such as a database or a web service.

Elaborate example

function Person(){
	// creates empty attributes container
	aDoc.init(this);

	// set some defaults
	this.born = (new Date()).getFullYear();
}

Object.assign(Person.prototype, {
	firstName: null,
	lastName: null,
	born: null,
	_priv: null,

	setLastName: function( name ){
		this.attributes.lastName = name.substr(0, 1).toUpperCase() + name.substr(1);
	},

	getName: function(){
		return this.firstName + ' ' + this.lastName;
	},
});

aDoc.decorate(Person);

Person.attributeNames; // [ 'firstName', 'lastName', 'born', 'name' ]

var child = new Person();

child.born; // 2014
child.firstName = 'Lucas';
child.lastName = 'williams';
child.name; // 'Lucas Williams'

child.toJSON(); // { firstName: 'Lucas', lastName: 'Williams', born: 2014 }

var father = Person.fromJSON({ lastName: 'Smith' });

Keywords

document

FAQs

Package last updated on 25 Feb 2015

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

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.