Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/mixins/app-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@ export default Ember.Mixin.create({
yield timeout(500);
yield this.get('buildApp').perform();
}
}).restartable(),
}).restartable()
});
57 changes: 37 additions & 20 deletions app/services/dependency-resolver.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Ember from 'ember';
import config from '../config/environment';
import { task, timeout } from 'ember-concurrency';

const EMBER_VERSIONS = ['2.5.0', '2.4.5', '2.3.2', '2.2.2', '2.1.2', '2.0.3', '1.13.13', '1.12.2'];
const EMBER_DATA_VERSIONS = ['2.5.0', '2.4.3', '2.3.3', '2.2.1', '2.1.0', '2.0.1', '1.13.15'];
Expand Down Expand Up @@ -43,34 +44,50 @@ export default Ember.Service.extend({
},

resolveAddons: function(addons, dependencies) {
let addonPromises = {};
Object.keys(addons).forEach((name) => {
var value = addons[name];

addonPromises[name] = this.resolveAddon(name, value);
const taskInstance = this.get('resolveAddonsTask').perform(addons, dependencies);
return taskInstance.then(() => {
return RSVP.resolve(taskInstance.value);
});
},

return RSVP.hash(addonPromises).then(hash => {
Object.keys(addons).forEach((name) => {
let addon = hash[name];
if(addon.status === 'build_success') {
resolveAddonsTask: task(function *(addons, dependencies) {
let done = false;
while (!done) {
let addonPromises = {};
let addonNames = Object.keys(addons);
for (let i = 0; i < addonNames.length; ++i) {
const name = addonNames[i];
const value = addons[name];
addonPromises[name] = this.resolveAddon(name, value);
}
let hash = yield RSVP.hash(addonPromises);
let allAddonsLoaded = true;
for (let j = 0; j < addonNames.length; ++j) {
const name = addonNames[j];
const addon = hash[name];
if (addon.status === 'build_success') {
dependencies[name] = addon.addon_js;
dependencies[name+'_css'] = addon.addon_css;
console.log(`Addon ${name} is loaded...`);
}
else if (addon.status === 'building') {
console.log(`Addon ${name} is currently building...`);
console.log(`Joost will have to implement some sort of refresh logic here..`);
}
else if (addon.status === 'build_error') {
delete addons[name];
} else if (addon.status === 'building') {
console.log(`Addon ${name} is still building...`);
allAddonsLoaded = false;
} else if (addon.status === 'build_error') {
console.error(`Addon ${name} encountered a build error:`);
console.error(addon.errors, addon.ember_errors);
console.log(`Joost will have to implement some sort of error logic here..`);
allAddonsLoaded = false;
throw addon;
}
});
return RSVP.resolve(dependencies);
});
},
}
if (allAddonsLoaded) {
done = true;
} else {
yield timeout(1000);
}
}
return dependencies;
}),

resolveAddon(name, value) {
return new RSVP.Promise(function(resolve) {
Expand Down
3 changes: 2 additions & 1 deletion mirage/config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import AddonFixture from "./fixtures/addon";
import config from "../config/environment";

export default function() {}

Expand All @@ -25,7 +26,7 @@ export function testConfig() {
return schema.db.users.find(1);
});

this.get('https://nl1fctyzr7.execute-api.us-east-1.amazonaws.com/staging/addon', function() {
this.get(config.addonUrl, function() {
return AddonFixture;
});
}
4 changes: 2 additions & 2 deletions mirage/fixtures/addon.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
export default {
"status": "build_success",
"status_date": "2016-03-21T01:55:42.140Z",
"addon_js": "//s3.amazonaws.com/addons-test/ember-1.13.15/ember-truth-helpers/1.2.0/addon.js",
"addon_css": "//s3.amazonaws.com/addons-test/ember-1.13.15/ember-truth-helpers/1.2.0/addon.css",
"addon_js": "//s3.amazonaws.com/ember-twiddle-addons-beta/ember-1.13.15/ember-truth-helpers/1.2.0/addon.js",
"addon_css": "//s3.amazonaws.com/ember-twiddle-addons-beta/ember-1.13.15/ember-truth-helpers/1.2.0/addon.css",
"errors": null,
"ember_errors": null
};
4 changes: 2 additions & 2 deletions tests/acceptance/addons-test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Ember from 'ember';
import { module, skip } from 'qunit';
import { module, test } from 'qunit';
import startApp from 'ember-twiddle/tests/helpers/start-app';

module('Acceptance | addons', {
Expand All @@ -15,7 +15,7 @@ module('Acceptance | addons', {
}
});

skip('Addons work', function(assert) {
test('Addons work', function(assert) {

const files = [
{
Expand Down