Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tsand/snowstorm
Simple Javascript ORM
https://github.com/tsand/snowstorm
javascript javascript-orm orm
Last synced: about 1 month ago
JSON representation
Simple Javascript ORM
- Host: GitHub
- URL: https://github.com/tsand/snowstorm
- Owner: tsand
- License: mit
- Created: 2015-08-21T00:27:47.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-06-01T03:56:44.000Z (over 1 year ago)
- Last Synced: 2024-11-02T21:51:32.246Z (2 months ago)
- Topics: javascript, javascript-orm, orm
- Language: JavaScript
- Size: 77.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# snowstorm
[![npm version](https://img.shields.io/npm/v/snowstorm)](https://www.npmjs.com/package/snowstorm)
[![Node.js Build](https://github.com/tsand/snowstorm/workflows/Node.js%20Build/badge.svg)](https://github.com/tsand/snowstorm/actions)Simple Javascript ORM
## :snowflake: Getting Started
### Installation
`npm install snowstorm`
### Example
Create a model and define the properties of the model
```js
var snowstorm = require('snowstorm');// Define the model and its properties
var Task = snowstorm.create('Task', {
title: snowstorm.Properties.string,
completed: snowstorm.Properties.boolean,
createdAt: snowstorm.Properties.date('created_at')
});
```Add methods to the prototype layer
```js
Task.prototype.isCompleted = function () {
return this.completed;
};
```Create an instance of a task
```js
// Data from server
var responseData = {
title: 'Task out the trash',
completed: false,
created_at: '2015-08-20T10:00:00.000Z'
};
var task = new Task(responseData);
```Access the properties/methods of the task or convert to JSON to send back to the server
```js
console.log(task.title); // Task out the trash
console.log(task.createdAt); // Thu Aug 20 2015 04:00:00 GMT-0600 (MDT)
console.log(task.isCompleted()); // false// Send back to server
var requestData = task.toJSON();
```## :snowflake: API
**Create a model class**
```js
snowstorm.create(name, properties);
```---
**Define a property to be used on the model**
```js
snowstorm.Properties.string
// or
snowstorm.Properties.string(attr, [arguments])
```| Properties | Arguments |
| ------------------------------ | -------------------- |
| `snowstorm.Properties.string` | `attr` |
| `snowstorm.Properties.number` | `attr` |
| `snowstorm.Properties.boolean` | `attr` |
| `snowstorm.Properties.array` | `attr` |
| `snowstorm.Properties.object` | `attr` |
| `snowstorm.Properties.date` | `attr`, `format` |
| `snowstorm.Properties.model` | `attr`, `modelClass` |---
**Create a custom property**
```js
var Moment = require('moment'); // https://github.com/moment/moment/function moment (attr) {
return {
attr: attr,
construct: function (d) {
if (typeof d === 'undefined') {
return null;
}
return Moment(d);
},
destruct: function (d) {
if (!d) {
return null;
}
return d.toISOString();
}
}
};// Usage
var Todo = snowstorm.create('Task', {
dueAt: moment
});
```## :snowflake: Running tests
`npm install`
`npm test`