Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/g3n1us/g3n1us_elementary_model

Import APIs into a local PouchDB and provide querying and models
https://github.com/g3n1us/g3n1us_elementary_model

Last synced: 24 days ago
JSON representation

Import APIs into a local PouchDB and provide querying and models

Awesome Lists containing this project

README

        

# G3N1US Elementary Model

## Get Started

```javascript
class Animal extends g3n1us.Model{
constructor(){
super(arguments[0]);
this.connection.endpoint = '//example.com/api/files.json';
}
}
```

## About
G3N1US Elementary Model lets you keep your application's logic separate from your API's schema. API's go away, change, sometimes don't work. Keep your app untethered from your API.

`````javascript
class Animal extends g3n1us.Model{
constructor(){
super(arguments[0]);
this.connection.endpoint = '//example.com/api/files.json';
// Add headers to the api request
this.headers = {'Api-Key': '8675309-90210'}
// filterResponse is called on the raw output from the API.
// You can modify each response object, or get a nested object in the response.
// Each model must have an 'id' attribute! This is a great place to add this if needed.
this.filterResponse = function(response){
return response.map(function(v){
v.id = v.specied_id
return v;
});
}
}
}

// After declaring a model, call add_model to add it to the application container
g3n1us.Container.add_model(Animal);

`````

## Querying
Querying is done against a static instance of your model

### Find an item by it's `id`
```javascript
Animal.find('187').then(animal => {
console.log('I found the animal! ' + animal);
});
```

### Query for items by attribute
```javascript
Animal.where('has_fur', true).then((response) => {
console.log('Animals are now inside the plural form of the model name: response.animals = ', response.animals);
});
```

```javascript
Animal.where('legs', '>=', 4).then((response) => {
console.log('Only four or more legs: response.animals = ', response.animals);
});
```
### Other operators
| | |
| ----------- | --------------------------- |
| `'='` | equals |
| `'>'` | greater than |
| `'<'` | less than |
| `'>='` | greater than or equal to |
| `'<='` | less than or equal to |
| `'exists'` | exists/not null |
| `'!='` | not equal to |
| `'<>'` | not equal to |
| `'in'` | in array |
| `'!in'` | not in array |
| `'out'` | not in array |
| `'regex'` | matches regular expression |

> Note, this is always the operator if a regex is provided as the query argument

_____

> Don't like Promises?!
All query methods can also accept a callback as the last argument

```javascript
Animal.find('187', function(animal){
console.log('I found the animal! ' + animal);
});
```

### Relations
> TODO

### Saving Models
> TODO