Skip to content

Commit

Permalink
Merge pull request #7 from tarmann/updates
Browse files Browse the repository at this point in the history
Updates
  • Loading branch information
Liam Baker authored Jan 22, 2019
2 parents 057bdd0 + 7b16249 commit 7fe48c4
Show file tree
Hide file tree
Showing 34 changed files with 14,192 additions and 380 deletions.
20 changes: 20 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# unconventional js
/blueprints/*/files/
/vendor/

# compiled output
/dist/
/tmp/

# dependencies
/bower_components/
/node_modules/

# misc
/coverage/
!.*

# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/package.json.ember-try
43 changes: 41 additions & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,49 @@ module.exports = {
ecmaVersion: 7,
sourceType: 'module'
},
extends: 'eslint:recommended',
plugins: [
'ember'
],
extends: [
'eslint:recommended',
'plugin:ember/recommended'
],
env: {
browser: true
},
rules: {
}
},
overrides: [
// node files
{
files: [
'.eslintrc.js',
'.template-lintrc.js',
'ember-cli-build.js',
'index.js',
'testem.js',
'blueprints/*/index.js',
'config/**/*.js',
'tests/dummy/config/**/*.js'
],
excludedFiles: [
'addon/**',
'addon-test-support/**',
'app/**',
'tests/dummy/app/**'
],
parserOptions: {
sourceType: 'script',
ecmaVersion: 2015
},
env: {
browser: false,
node: true
},
plugins: ['node'],
rules: Object.assign({}, require('eslint-plugin-node').configs.recommended.rules, {
// add your custom rules and overrides for node files here
})
}
]
};
24 changes: 13 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.

# compiled output
/dist
/tmp
/dist/
/tmp/

# dependencies
/node_modules
/bower_components
/bower_components/
/node_modules/

# misc
/.env*
/.sass-cache
/connect.lock
/coverage/*
/coverage/
/libpeerconnection.log
npm-debug.log*
yarn-error.log
testem.log
/npm-debug.log*
/testem.log
/yarn-error.log
/jsconfig.json

# ember-try
.node_modules.ember-try/
bower.json.ember-try
package.json.ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/package.json.ember-try
45 changes: 30 additions & 15 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
/bower_components
# compiled output
/dist/
/tmp/

# dependencies
/bower_components/

# misc
/.bowerrc
/.editorconfig
/.ember-cli
/.env*
/.eslintignore
/.eslintrc.js
/.gitignore
/.template-lintrc.js
/.travis.yml
/.watchmanconfig
/bower.json
/config/ember-try.js
/dist
/tests
/tmp
**/.gitkeep
.bowerrc
.editorconfig
.ember-cli
.gitignore
.eslintrc.js
.watchmanconfig
.travis.yml
bower.json
ember-cli-build.js
testem.js
/CONTRIBUTING.md
/ember-cli-build.js
/testem.js
/tests/
/yarn.lock
.gitkeep

# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/package.json.ember-try
5 changes: 5 additions & 0 deletions .template-lintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';

module.exports = {
extends: 'recommended'
};
43 changes: 30 additions & 13 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ language: node_js
node_js:
# we recommend testing addons with the same minimum supported node version as Ember CLI
# so that your addon works for all apps
- "4"
- "6"

sudo: "required"
dist: trusty
Expand All @@ -19,20 +19,37 @@ env:
global:
# See https://git.io/vdao3 for details.
- JOBS=1
matrix:

branches:
only:
- master
# npm version tags
- /^v\d+\.\d+\.\d+/

jobs:
fail_fast: true
allow_failures:
- env: EMBER_TRY_SCENARIO=ember-canary

include:
# runs linting and tests with current locked deps

- stage: "Tests"
name: "Tests"
script:
- npm run lint:hbs
- npm run lint:js
- npm test

# we recommend new addons test the current and previous LTS
# as well as latest stable release (bonus points to beta/canary)
- EMBER_TRY_SCENARIO=ember-lts-2.8
- EMBER_TRY_SCENARIO=ember-lts-2.12
- EMBER_TRY_SCENARIO=ember-release
- EMBER_TRY_SCENARIO=ember-beta
- EMBER_TRY_SCENARIO=ember-canary
- EMBER_TRY_SCENARIO=ember-default

matrix:
fast_finish: true
allow_failures:
- stage: "Additional Tests"
env: EMBER_TRY_SCENARIO=ember-lts-2.18
- env: EMBER_TRY_SCENARIO=ember-lts-3.4
- env: EMBER_TRY_SCENARIO=ember-release
- env: EMBER_TRY_SCENARIO=ember-beta
- env: EMBER_TRY_SCENARIO=ember-canary
- env: EMBER_TRY_SCENARIO=ember-default-with-jquery

before_install:
- npm config set spin false
Expand All @@ -42,7 +59,7 @@ before_install:
script:
# Usually, it's ok to finish the test scenario without reverting
# to the addon's original dependency state, skipping "cleanup".
- node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO --skip-cleanup
- node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO

addons:
code_climate:
Expand Down
26 changes: 26 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# How To Contribute

## Installation

* `git clone <repository-url>`
* `cd my-addon`
* `npm install`

## Linting

* `npm run lint:hbs`
* `npm run lint:js`
* `npm run lint:js -- --fix`

## Running tests

* `ember test` – Runs the test suite on the current Ember version
* `ember test --server` – Runs the test suite in "watch mode"
* `ember try:each` – Runs the test suite against multiple Ember versions

## Running the dummy application

* `ember serve`
* Visit the dummy application at [http://localhost:4200](http://localhost:4200).

For more information on using ember-cli, visit [https://ember-cli.com/](https://ember-cli.com/).
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2017
Copyright (c) 2019

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

Expand Down
21 changes: 14 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,21 @@ To implement a new action just include a new task into the service generated fol
})
```

## Running Tests
Compatibility
------------------------------------------------------------------------------

* `npm test` (Runs `ember try:each` to test your addon against multiple Ember versions)
* `ember test`
* `ember test --server`
* Ember.js v2.18 or above
* Ember CLI v2.13 or above

## Building

* `ember build`
Installation
------------------------------------------------------------------------------

For more information on using ember-cli, visit [https://ember-cli.com/](https://ember-cli.com/).
```
ember install ember-actions-service
```

License
------------------------------------------------------------------------------

This project is licensed under the [MIT License](LICENSE.md).
11 changes: 6 additions & 5 deletions addon/core/-actions-mixin.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Ember from 'ember';

const { get, String: { camelize }, inject } = Ember;
import { inject as service } from '@ember/service';
import Mixin from '@ember/object/mixin';
import { get } from '@ember/object';
import { camelize } from '@ember/string';

export function actionsMixin(){

Expand All @@ -16,14 +17,14 @@ export function actionsMixin(){
args.forEach(function(resource) {
let resourceName = camelize(resource);

mixin[`${resourceName}Actions`] = inject.service();
mixin[`${resourceName}Actions`] = service();

mixin.actions[`${resourceName}Actions`] = function(){
const store = get(this, 'store');
return get(this, `${resourceName}Actions`).send(store, ...arguments);
};
})

return Ember.Mixin.create(mixin);
return Mixin.create(mixin);

}
34 changes: 18 additions & 16 deletions addon/services/actions-service.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import Ember from 'ember';
import { isEmpty, typeOf } from '@ember/utils';
import { assert } from '@ember/debug';
import Service from '@ember/service';
import { get } from '@ember/object';
import { camelize, capitalize } from '@ember/string';
import { task } from 'ember-concurrency';

const { get, String: { capitalize, camelize } } = Ember;

export default Ember.Service.extend({
export default Service.extend({

resource: '',

Expand All @@ -12,48 +14,48 @@ export default Ember.Service.extend({
afterSend(){},

send(store, model, action, ...options){
const task = get(this, `${action}Task`);
const callback = `on${capitalize(action)}${capitalize(camelize(get(this, 'resource')))}`;
const task = this.get(`${action}Task`);
const callback = `on${capitalize(action)}${capitalize(camelize(this.get('resource')))}`;

Ember.assert(`Invalid actions-service resource name.`, !Ember.isEmpty( get(this, 'resource') ));
Ember.assert(`Store invalid for ${get(this, 'resource')} actions-service.`, Ember.typeOf(action) === 'string');
Ember.assert(`Must provide a valid action for ${get(this, 'resource')}.`, Ember.typeOf(action) === 'string');
Ember.assert(`Task ${action} not found for ${get(this, 'resource')}.`, task);
assert(`Invalid actions-service resource name.`, !isEmpty( this.get('resource') ));
assert(`Store invalid for ${this.get('resource')} actions-service.`, typeOf(action) === 'string');
assert(`Must provide a valid action for ${this.get('resource')}.`, typeOf(action) === 'string');
assert(`Task ${action} not found for ${this.get('resource')}.`, task);

this.beforeSend(...arguments);

return task.perform(store, callback, model, ...options);
},

findTask: task(function * (store, callback, model, id){
model = yield store.findRecord( get(this, 'resource'), id );
model = yield store.findRecord( this.get('resource'), id );
return { callback, model };
}),

findAllTask: task(function * (store, callback){
const model = yield store.findAll( get(this, 'resource') );
const model = yield store.findAll( this.get('resource') );
return { callback, model };
}),

createTask: task(function * (store, callback, _model, attrs){
const model = yield store.createRecord( get(this, 'resource'), attrs || {} );
const model = yield store.createRecord( this.get('resource'), attrs || {} );
return { callback, model };
}),

saveTask: task(function * (store, callback, _model){
const model = _model.save ? _model : store.peekRecord( get(this, 'resource'), get(_model, 'id') );
const model = _model.save ? _model : store.peekRecord( this.get('resource'), get(_model, 'id') );
yield model.save();
return { callback, model };
}),

createAndSaveTask: task(function * (store, callback, _model, attrs){
const model = yield store.createRecord( get(this, 'resource'), attrs || {} );
const model = yield store.createRecord( this.get('resource'), attrs || {} );
yield model.save();
return { callback, model };
}),

deleteTask: task(function * (store, callback, _model){
const model = _model.destroyRecord ? _model : store.peekRecord( get(this, 'resource'), get(_model, 'id') );
const model = _model.destroyRecord ? _model : store.peekRecord( this.get('resource'), get(_model, 'id') );
yield model.destroyRecord();
return { callback, model };
}),
Expand Down
Loading

0 comments on commit 7fe48c4

Please sign in to comment.