Skip to content

Commit cde85da

Browse files
author
Janny
committed
Merge pull request #283 from strongloop/feature/add-option-to-scaffold-3.x
Choose dependency version according to loopbackVersion
2 parents 5d4a2c3 + efc4e7f commit cde85da

7 files changed

Lines changed: 107 additions & 42 deletions

File tree

common/models/definition.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ module.exports = function(Definition) {
134134
config[relation.foreignKey] = fk;
135135
config[relation.embed.key] = embedId;
136136
config.facetName = facetName;
137-
137+
138138
debug('addRelatedToCache %s %j', relation.model, config);
139139
Entity.addToCache(cache, config);
140140
});

common/models/workspace.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ module.exports = function(Workspace) {
3333
var ViewDefinition = app.models.ViewDefinition;
3434
var TEMPLATE_DIR = path.join(__dirname, '..', '..', 'templates', 'projects');
3535
var DEFAULT_TEMPLATE = 'api-server';
36+
var DEFAULT_LB_VERSION = '2.x';
37+
var DEPENDENCIES_3_X = {
38+
'loopback': '^3.0.0-alpha.1',
39+
};
40+
var DEPENDENCIES_2_X = {
41+
'loopback': '^2.22.0',
42+
'loopback-datasource-juggler': '^2.39.0',
43+
};
3644
var debug = require('debug')('workspace');
3745

3846
/**
@@ -152,6 +160,7 @@ module.exports = function(Workspace) {
152160
if (!options.root) {
153161
throw new Error('Non-root components are not supported yet.');
154162
}
163+
var loopbackVersion = options.loopbackVersion || DEFAULT_LB_VERSION;
155164
var templateName = options.template || DEFAULT_TEMPLATE;
156165
var name = options.name || templateName;
157166
var packageName = options.packageName || name;
@@ -169,6 +178,14 @@ module.exports = function(Workspace) {
169178
return cb(err);
170179
}
171180

181+
if (loopbackVersion !== '2.x' && loopbackVersion !== '3.x') {
182+
return cb(new Error('Loopback version should be either 2.x or 3.x'));
183+
}
184+
var defaultDependencies = template.package.dependencies;
185+
var loopbackDependencies =
186+
loopbackVersion === '2.x' ? DEPENDENCIES_2_X : DEPENDENCIES_3_X;
187+
template.package.dependencies = extend(defaultDependencies, loopbackDependencies);
188+
172189
// TODO(bajtos) come up with a more generic approach
173190
var explorer = 'loopback-component-explorer';
174191
if (options[explorer] === false) {

templates/projects/empty-server/data.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@ template.package = {
1919
'compression': '^1.0.3',
2020
'cors': '^2.5.2',
2121
'helmet': '^1.3.0',
22-
'loopback': '^2.22.0',
2322
'loopback-boot': '^2.6.5',
2423
'loopback-component-explorer': '^2.4.0',
25-
'loopback-datasource-juggler': '^2.39.0',
2624
'serve-favicon': '^2.0.1',
2725
},
2826
'devDependencies': {
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module.exports = function(Message) {
2-
Message.greet = function(msg, cb) {
3-
process.nextTick(function() {
4-
msg = msg || 'hello';
5-
cb(null, 'Sender says ' + msg + ' to receiver');
6-
});
7-
};
2+
Message.greet = function(msg, cb) {
3+
process.nextTick(function() {
4+
msg = msg || 'hello';
5+
cb(null, 'Sender says ' + msg + ' to receiver');
6+
});
7+
};
88
};

test/end-to-end.js

Lines changed: 74 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var install = require('strong-cached-install');
1111
var mysql = require('mysql');
1212
var path = require('path');
1313
var request = require('supertest');
14+
var semver = require('semver');
1415
var debug = require('debug')('test:end-to-end');
1516
var workspace = require('../');
1617
var models = workspace.models;
@@ -347,13 +348,13 @@ describe('end-to-end', function() {
347348
});
348349

349350
it('provides create operation', function(done) {
350-
var sample = {title: 'myTitle'};
351+
var sample = { title: 'myTitle' };
351352
request(app)
352353
.post('/api/Notes')
353354
.send(sample)
354355
.expect(200, function(err, res) {
355-
if(err) {
356-
done(err)
356+
if (err) {
357+
done(err);
357358
} else {
358359
expect(res.body).
359360
to.have.property('title', 'myTitle');
@@ -363,13 +364,13 @@ describe('end-to-end', function() {
363364
});
364365

365366
it('provides update operation', function(done) {
366-
var sample = {title: 'myTitle'};
367+
var sample = { title: 'myTitle' };
367368
request(app)
368369
.put('/api/Notes')
369370
.send(sample)
370371
.expect(200, function(err, res) {
371-
if(err) {
372-
done(err)
372+
if (err) {
373+
done(err);
373374
} else {
374375
expect(res.body).
375376
to.have.property('title', 'myTitle');
@@ -380,15 +381,15 @@ describe('end-to-end', function() {
380381

381382
it('provides delete operation', function(done) {
382383
var Note = app.models.Note;
383-
Note.create({title: 'myTitle'}, function(error, note) {
384-
if(error) {
384+
Note.create({ title: 'myTitle' }, function(error, note) {
385+
if (error) {
385386
done(error);
386387
} else {
387388
request(app)
388389
.delete('/api/Notes/' + note.id)
389390
.expect(200, function(err, res) {
390-
if(err) {
391-
done(err)
391+
if (err) {
392+
done(err);
392393
} else {
393394
expect(res.body).
394395
to.have.property('count', 1);
@@ -434,6 +435,69 @@ describe('end-to-end', function() {
434435
});
435436
});
436437

438+
describe('scaffold 3.x loopback project with option 3.x', function(done) {
439+
before(resetWorkspace);
440+
before(function createWorkspace(done) {
441+
var options = { loopbackVersion: '3.x' };
442+
givenWorkspaceFromTemplate('empty-server', options, done);
443+
});
444+
445+
it('contains dependencies with 3.x version', function(done) {
446+
var dependencies = readPackageJsonSync().dependencies;
447+
expect(semver.gtr('3.0.0', dependencies.loopback)).to.be.false;
448+
done();
449+
});
450+
});
451+
452+
describe('scaffold 2.x loopback project with option 2.x', function(done) {
453+
before(resetWorkspace);
454+
before(function createWorkspace(done) {
455+
var options = { loopbackVersion: '2.x' };
456+
givenWorkspaceFromTemplate('empty-server', options, done);
457+
});
458+
459+
it('contains dependencies with 2.x version', function(done) {
460+
var dependencies = readPackageJsonSync().dependencies;
461+
expect(semver.gtr('3.0.0', dependencies.loopback)).to.be.true;
462+
expect(semver.gtr('3.0.0', dependencies['loopback-datasource-juggler']))
463+
.to.be.true;
464+
done();
465+
});
466+
});
467+
468+
describe('scaffold 2.x loopback project with default options', function(done) {
469+
before(resetWorkspace);
470+
before(function createWorkspace(done) {
471+
givenWorkspaceFromTemplate('empty-server', done);
472+
});
473+
474+
it('contains dependencies with 2.x version', function(done) {
475+
var dependencies = readPackageJsonSync().dependencies;
476+
expect(semver.gtr('3.0.0', dependencies.loopback)).to.be.true;
477+
expect(semver.gtr('3.0.0', dependencies['loopback-datasource-juggler']))
478+
.to.be.true;
479+
done();
480+
});
481+
});
482+
483+
describe('Check invalid version', function(done) {
484+
before(resetWorkspace);
485+
486+
it('throws error with invalid version', function(done) {
487+
var options = { loopbackVersion: 'invalid-version' };
488+
givenWorkspaceFromTemplate('empty-server', options, function(err) {
489+
expect(err).to.match(/Loopback version should be either 2\.x or 3\.x/);
490+
done();
491+
});
492+
});
493+
});
494+
495+
function readPackageJsonSync() {
496+
var filepath = SANDBOX + '/package.json';
497+
var content = fs.readFileSync(filepath, 'utf-8');
498+
return JSON.parse(content);
499+
}
500+
437501
describe('autoupdate', function() {
438502
this.timeout(10000);
439503
var connection;

test/support.js

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -107,34 +107,20 @@ givenWorkspaceFromTemplate = function(template, options, cb) {
107107
});
108108
};
109109

110-
givenWorkspaceWithCustomDependencies = function(templateName, deps, cb) {
110+
givenLB2Workspace = function(cb) {
111111
resetWorkspace(function(err) {
112112
if (err) return cb(err);
113-
givenWorkspaceFromTemplate('empty-server', deps, function(err) {
114-
if (err) return cb(err);
115-
ConfigFile.loadFromPath('/package.json', function(err, pkgFile) {
116-
if (err) return cb(err);
117-
for (dep in deps) {
118-
pkgFile.data.dependencies[dep] = deps[dep];
119-
}
120-
121-
pkgFile.save(cb());
122-
});
123-
});
113+
var options = { loopbackVersion: '2.x' };
114+
givenWorkspaceFromTemplate('empty-server', options, cb);
124115
});
125116
};
126117

127-
givenLB2Workspace = function(cb) {
128-
givenWorkspaceWithCustomDependencies('empty-server', {
129-
loopback: '^2.0.0',
130-
'loopback-datasource-juggler': '^2.0.0',
131-
}, cb);
132-
};
133-
134118
givenLB3Workspace = function(cb) {
135-
givenWorkspaceWithCustomDependencies('empty-server', {
136-
loopback: '^3.0.0-alpha.1',
137-
}, cb);
119+
resetWorkspace(function(err) {
120+
if (err) return cb(err);
121+
var options = { loopbackVersion: '3.x' };
122+
givenWorkspaceFromTemplate('empty-server', options, cb);
123+
});
138124
};
139125

140126
function findOfType(name, type) {

test/workspace.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('Workspace', function() {
1818
'api-server',
1919
'empty-server',
2020
'hello-world',
21-
'notes'
21+
'notes',
2222
]);
2323
done();
2424
});

0 commit comments

Comments
 (0)