0.5.11 • Published 6 years ago

@n9s/core v0.5.11

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

nucleotides.js

Agnostic and extensible model framework

Travis


Quick overview

import {Mixin, Model} from "@n9s/core";

var GenealogyMixin = Mixin("Genealogy")
  .derive("parents", function (mixin) {
    // implement getting the parents of `this`
  })
  .derive("children", function (mixin) {
    // implement getting the children of `this`
  })
  .derive("siblings", {eager: true}, function (mixin) {
    // implement getting the siblings of `this`
  });

var LocalStorageMixin = Mixin("LocalStorage")
  .findOne(function(mixin, searchArgs, promise) {
    // Implement a getter for finding an item from the main key
  })
  .findMany(function(mixin, searchArgs, promise) {
    // Implement a getter for finding items from other criterias
  })
  .store(function(mixin, difference, promise) {
    // Implement how to store a object (as `this`), optionally using the difference
  })

var Person = Model("Person")
  .attributes({
    nas: {require: true, type: String},
    firstname: {require: true, type: String},
    lastname: {require: true, type: String},
    birthdate: Date,
    parentsNas: [String],
    gender: {type: String, accept: ["M", "F"]}
  })
  .derive("fullname", function() { return this.firstname + " " + this.lastname; })
  .use(new GenealogyMixin({parentKey: "nas", childKey: "parentsNas"}))
  .use(new LocalStorageMixin({key: "nas", prefix: "people"}))

Global event handlers

Person.on('new', function () { console.log("New instance of Person created!") });
Person.on('change', function () { console.log("One of the instances of Person changed!") });

var john = Person.create({nas: "555", firstname: "John", lastname: "Smith", birthdate: new Date(), gender: "R"});
var mary = Person.create({nas: "666", firstname: "Mary", lastname: "Smith", birthdate: new Date(), gender: "F", parentsNas: ["555"]});
var peter = Person.create({nas: "777", firstname: "Peter", lastname: "Smith", birthdate: new Date(), gender: "M", parentsNas: ["555"]});

Validation

john.$isValid
// ==> false

john.$errors
// ==> {"gender": "invalid"}

Using mixin-defined properties

mary.parents
// ==> [Person{nas: "555", firstname: "John", ...}]

john.children
// ==> [Person{nas: "666", ...}, Person{nas: "777", ...}]

// Object lifecycle hooks

john.$on('change', function (difference) { console.log(this.fullname + " changed " + Objects.keys(difference)[0]) });

john.firstname = "Johnny"
// ==> One of the instances of Person changed!
// ==> Johnny Smith changed firstname

Testing

With node.js installed

$ npm i --dev
$ npm test

Contributing

If you want to improve the nucleotides library, add functionality or improve the docs please feel free to submit a PR. Ensure you run and adapt tests if you do so.

License

MIT License @ matehat

0.5.11

6 years ago

0.5.12

6 years ago

0.5.5

6 years ago

0.5.4-rc3

6 years ago

0.5.4-rc2

6 years ago

0.5.4-rc1

6 years ago

0.5.3

6 years ago

0.5.1

6 years ago

0.5.0-rc.26

6 years ago

0.5.0-rc.24

6 years ago

0.5.0-rc.20

6 years ago

0.5.0-rc.19

6 years ago

0.5.0-rc.18

6 years ago

0.5.0-rc.17

6 years ago

0.5.0-rc.16

6 years ago

0.5.0-rc.15

6 years ago

0.5.0-rc.14

6 years ago

0.5.0-rc.13

6 years ago

0.5.0-rc.12

6 years ago

0.5.0-rc.11

6 years ago

0.5.0-rc.10

6 years ago

0.5.0-rc.9

6 years ago

0.5.0-rc.8

6 years ago

0.5.0-rc.7

6 years ago

0.5.0-rc.6

6 years ago

0.5.0-rc.5

6 years ago

0.5.0-rc.4

6 years ago

0.5.0-rc.3

6 years ago

0.5.0-rc.2

6 years ago

0.5.0-rc.1

6 years ago

0.5.0

6 years ago

0.4.3

6 years ago

0.4.2

6 years ago

0.4.1

6 years ago

0.4.0

6 years ago

0.3.9

6 years ago

0.3.8

6 years ago

0.3.6

6 years ago

0.3.4

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago