Skip to content

Commit

Permalink
feat: Initial release
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilya Radchenko committed Feb 25, 2017
1 parent cd3d162 commit 43fbee4
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 23 deletions.
27 changes: 27 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Contributing

This README outlines the details of collaborating on this Ember addon.

## Installation

* `git clone <repository-url>` this repository
* `cd ember-data-tasks`
* `npm install`
* `bower install`

## Running

* `ember serve`
* Visit your app at [http://localhost:4200](http://localhost:4200).

## Running Tests

* `npm test` (Runs `ember try:each` to test your addon against multiple Ember versions)
* `ember test`
* `ember test --server`

## Building

* `ember build`

For more information on using ember-cli, visit [https://ember-cli.com/](https://ember-cli.com/).
83 changes: 67 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,78 @@
# ember-data-tasks

This README outlines the details of collaborating on this Ember addon.
An alternative Ember Data store that returns [Ember Concurrency] tasks instead of promises.

## Installation
## Install

* `git clone <repository-url>` this repository
* `cd ember-data-tasks`
* `npm install`
* `bower install`
```sh
ember install ember-data-tasks
```

## Running
## Usage

* `ember serve`
* Visit your app at [http://localhost:4200](http://localhost:4200).
Override your existing store, by creating a new store:

## Running Tests
```sh
ember g service store
```

* `npm test` (Runs `ember try:each` to test your addon against multiple Ember versions)
* `ember test`
* `ember test --server`
Open `app/services/store.js` and modify it to:

## Building
```js
import Store from 'ember-data-tasks/services/store';

* `ember build`
export default Store;
```

For more information on using ember-cli, visit [https://ember-cli.com/](https://ember-cli.com/).
Now you can use your Ember Data like before, and nothing has changed.
But if you want immediate responses, you will have to wrap your store
responses in a hash.

The example below will hit `afterModel` after the backend has resolved with data:

```js
import Ember from 'ember';

export default Ember.Route.extend({
model() {
return this.store.findAll('post');
}
});
```

But if you want immediate responses, do the following, and `afterModel` will
be hit immediately:

```js
import Ember from 'ember';

export default Ember.Route.extend({
model() {
return {
postsTask: this.store.findAll('post')
};
}
});
```

Then you can utilize the `task` in your template like so:

```hbs
<ul>
{{#if model.postsTask.isRunning}}
Loading..
{{else}}
{{#each model.postTask.value as |post|}}
<li>{{post.name}}</li>
{{/each}}
{{/if}}
</ul>
```

This seems like a slight annoyance at first, due to the extra level of nesting, but
in the end if you build ambitious apps, you will most likely return multiple
tasks, and would have used `Ember.RSVP.hash` if working with promises.

**Note: You can unwrap the task hash in `setupController`, if it really bothers you.**

[Ember Concurrency]: http://ember-concurrency.com
29 changes: 29 additions & 0 deletions addon/services/store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import DS from 'ember-data';
import { task } from 'ember-concurrency';

export default DS.Store.extend({
findAll() {
let promise = this._super(...arguments);
return this.get('wrap').perform(promise);
},

query() {
let promise = this._super(...arguments);
return this.get('wrap').perform(promise);
},

findRecord() {
let promise = this._super(...arguments);
return this.get('wrap').perform(promise);
},

queryRecord() {
let promise = this._super(...arguments);
return this.get('wrap').perform(promise);
},

wrap: task(function * (promise) {
let result = yield promise;
return result;
})
});
19 changes: 12 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
{
"name": "ember-data-tasks",
"version": "0.0.0",
"description": "The default blueprint for ember-cli addons.",
"description": "Task based (ember-concurrency) Ember Data API",
"keywords": [
"ember-addon"
"ember-addon",
"ember-data",
"ember-concurrency",
"tasks"
],
"license": "MIT",
"author": "",
"author": "Ilya Radchenko",
"directories": {
"doc": "doc",
"test": "tests"
Expand All @@ -15,9 +18,12 @@
"scripts": {
"build": "ember build",
"start": "ember server",
"test": "ember try:each"
"test": "ember try:each",
"release": "standard-verison"
},
"dependencies": {
"ember-concurrency": "0.7.19",
"ember-data": "2.11.1",
"ember-cli-babel": "^5.1.7"
},
"devDependencies": {
Expand All @@ -36,14 +42,13 @@
"ember-cli-sri": "^2.1.0",
"ember-cli-test-loader": "^1.1.0",
"ember-cli-uglify": "^1.2.0",
"ember-data": "^2.11.0",
"ember-disable-prototype-extensions": "^1.1.0",
"ember-export-application-global": "^1.0.5",
"ember-load-initializers": "^0.6.0",
"ember-resolver": "^2.0.3",
"ember-source": "~2.11.0",
"ember-welcome-page": "^2.0.2",
"loader.js": "^4.0.10"
"loader.js": "^4.0.10",
"standard-version": "^4.0.0"
},
"engines": {
"node": ">= 0.12.0"
Expand Down
12 changes: 12 additions & 0 deletions tests/unit/services/store-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { moduleFor, test } from 'ember-qunit';

moduleFor('service:store', 'Unit | Service | store', {
// Specify the other units that are required for this test.
// needs: ['service:foo']
});

// Replace this with your real tests.
test('it exists', function(assert) {
let service = this.subject();
assert.ok(service);
});

0 comments on commit 43fbee4

Please sign in to comment.