1.0.0 • Published 6 years ago

declarative-resource v1.0.0

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

Angular ES6 utility library. Call your backend API in a declarative way

What does it do ?

When using Angular to build your App, there always things you want to make more generic, for instance let's say you want all your backend calls to be made from a single class, or simply a class that contains CRUD declaration and other 'resources' just inherit from it.

Well, that's what we do. $resource from angular-resource is a great tool, we rely on it to make http requests.

Our philosophy is to create a JS class called Resource for every backend Resource, this class will inherit from a parent JS class, it gets all the basic methods, for each specific need you'll add a single line containing the method's declaration.

That's it; just add a line and call it a day :)

We're open to suggestions, please don't hesitate : abdelghani@ainouss.fr

Instalation

npm install declarative-resource

How to ?

Register the resource

import GenericResource from "declarative-resource";

class BookResource extends GenericResource{

  constructor($resource) {
   super($resource);
   this.register(this,'update','POST',this.getPath());
   return this.getResource(this);
  }

  getPath() {
    return '/api/books/:id'  
  }
   getPathParams() {
    return "{id:'@id'}"
  }

}

BookResource.$injetc= ['$resource'];
export default BookResource;

Use it :

class BookController {
  constructor(BookResource) {
    this.BookResource = BookResource;
  }
  callMe(){
    let Book = {id :1,author :'me'};
    this.BookResource.update(book);
  }
}
BookController.$inject=['BookResource'];
export default BookController;

Advanced usage :

Let's say you want to define a update() method for all your resources in a generic way, using angular-resource, the best you can do is, to define it in every single factory you create, it may be okay, but it can be done in a better way.

what will do, instead of inhiriting from GenericResource, we'll create a new class to hold our specific API common configuration :

import GenericResource from "declarative-resource";

class Api extends GenericResource{

  constructor($resource) {
    super($resource);
    this.register(this,'update','PUT', false);
  }

}

Api.$injetc= ['$resource'];
export default Api;

Now we can extend from Api class, all our resources will have update() method, assuming that we created api.resource.js somewhere.

import Api from "./api.resource";

class BookResource extends Api{

  constructor($resource) {
   super($resource);
   return this.getResource(this);
  }

  getPath() {
    return '/api/books/:id'  
  }
   getPathParams() {
    return "{id:'@id'}"
  }

}
BookResource.$inject= ['$resource'];
export default BookResource;

Pull request

Pull requests are welcome

Run build for production

npm run build

Run build for development

npm run dev