Socket
Socket
Sign inDemoInstall

ember-data-meta-links-improvements

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ember-data-meta-links-improvements

POC for https://github.com/emberjs/rfcs/pull/160


Version published
Maintainers
1
Created
Source

Build Status Ember Observer Score

Proof of Concept for RFC#160.

This addon is a Proof of Concept for RFC#160 which aims to improve the meta and links situation within Ember Data. The goal is to see how the proposed API solves use cases when used in real applications. The outcome of this addon should be a profound test suite which covers all the use cases of the RFC.

:warning: The current implementation heavily relies on patches of Ember Data internals, so it is definitely not encouraged to use in production, as stability and decent performance can not be guaranteed. :warning:

Currently the following improvements are implemented:

  • single record meta data (tests)
    • get record level meta data via record.ref().meta()
    • get response level meta data for single resource via record.ref().meta("response")
  • links for relationship references
  • meta and links for finders
  • get reference for has-many via hasManyRelationship.ref()
  • get parent reference for relationship reference
    • belongs to
    • has many
  • add hook when new data is received
    • Model#didReceiveData
  • further miscellaneous changes
    • get parent reference of link via linkRef.parentRef()

Installation

ember install ember-data-meta-links-improvements

Code samples

Single record meta data

// GET /books/1
// {
//   data: {
//     type: "book",
//     id: 1,
//     meta: {
//       recordLevel: true
//     }
//   },
//   meta: {
//     topLevel: true
//   }
// }
this.store.findRecord('book', 1).then(function(book) {
  // get reference for record
  let bookRef = book.ref();

  // get record level meta data
  let meta = bookRef.meta();
  meta === { recordLevel: true };

  // get response level meta data
  let topLevelMeta = bookRef.meta("response");
  topLevelMeta === { topLevel: true };
});
// GET /books/1
// {
//   data: {
//     type: "book",
//     id: 1,
//     relationships: {
//       chapters: {
//         links: {
//           related: "related-link",
//           self: {
//             href: "self-link",
//             meta: {
//               selfLink: true
//             }
//           }
//         }
//       }
//     }
//   }
// }
this.store.findRecord('book', 1).then(function(book) {
  let chaptersRef = book.hasMany("chapters");

  let related = chaptersRef.links("related");
  related.href() === "related-link";

  let next = chaptersRef.links("self");
  next.meta() === { selfLink: true };

  // GET /self-link
  // {
  //   data: [],
  //   meta: {
  //     isSelf: true
  //   }
  // }
  next.load().then(function(nextArray) {
    nextArray.ref().meta() === { isSelf: true }
  });
});

store.query

// GET /books?page=2
// {
//   data: [{
//     type: "book",
//     id: 1
//   }],
//   links: {
//     next: {
//       href: "/books?page=3",
//       meta: {
//         isLast: true
//       }
//     },
//     prev: {
//       href: "/books?page=1"
//     }
//   },
//   meta: {
//     total: 123
//   }
// }
let books = await this.store.query('book', { page: 2 }).then(function(books) {
  let booksRef = books.ref();

  let prev = booksRef.links("prev");
  prev.href() === "/books?page=1";

  let next = booksRef.links("next");
  next.meta() === { isLast: true };

  let meta = booksRef.meta();
  meta === { total: 123 };
});

// GET /books?page=3
// {
//   data: [{
//     type: "book",
//     id: 1
//   }],
//   links: {
//     prev: {
//       href: "/books?page=2"
//     }
//   },
//   meta: {
//     isLastPage: true
//   }
// }
let next = await books.ref().links("next").load();

next.ref().meta() === { isLastPage: true }

store.findAll

// GET /books
// {
//   data: [{
//     type: "book",
//     id: 1
//   }],
//   links: {
//     self: "self-link"
//   },
//   meta: {
//     total: 123
//   }
// }
let books = await this.store.findAll('book');

let booksRef = books.ref();

let self = booksRef.links("self");
self.href() === "self-link";

let meta = booksRef.meta();
meta === { total: 123 };

// GET /books
// {
//   data: [{
//     type: "book",
//     id: 1
//   }],
//   meta: {
//     total: 456
//   }
// }
await this.store.findAll('book', { reload: true });

booksRef.meta() === { total: 456 };

Development

Installation

  • git clone this repository
  • npm install
  • bower install

Running

Running Tests

  • npm test (Runs ember try:testall to test your addon against multiple Ember versions)
  • ember test
  • ember test --server

Building

  • ember build

For more information on using ember-cli, visit http://ember-cli.com/.

Keywords

FAQs

Package last updated on 07 Aug 2016

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

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc