Skip to content

Commit

Permalink
Merge pull request #2 from popomore/scenes-type
Browse files Browse the repository at this point in the history
Chnaged scenes from array to object, then could get the filename
  • Loading branch information
fengmk2 committed Mar 20, 2015
2 parents 3e5cf68 + d2d5f44 commit 91d0f1f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 19 deletions.
24 changes: 12 additions & 12 deletions index.js
Expand Up @@ -50,6 +50,7 @@ function mapping(datadir, url) {
var pathname = info.pathname.replace(/^\/+/g, '');
var scene = (info.query && info.query.__scene || '').trim();
scene = scene || 'default';
scene = scene.replace(/\.(js|json)$/, '');
var m = / \(([^\)]+)\.(?:js|json)\)$/.exec(scene);
if (m) {
scene = m[1];
Expand Down Expand Up @@ -115,7 +116,7 @@ function load(filepath, ctx) {
}

function findAllScenes(datadir, url) {
var scenes = [];
var scenes = {};
var info = urlparse(url, true);
var pathname = info.pathname.replace(/^\/+/g, '');
var dir = path.join(datadir, pathname);
Expand Down Expand Up @@ -145,20 +146,19 @@ function findAllScenes(datadir, url) {
return false;
});

scenes = filepaths.map(function (filepath) {
filepaths.map(function (filepath) {
var filename = path.basename(filepath);
var defaultName = filename.substring(0, filename.lastIndexOf('.'));
var data;
// use filename as default name
var name = filename.substring(0, filename.lastIndexOf('.'));

try {
data = require(filepath);
} catch (_) {
return defaultName;
}
var data = require(filepath);
if (data && data.__name) {
name = data.__name;
}
} catch (_) {}

if (!data.__name) {
return defaultName;
}
return data.__name + ' (' + filename + ')';
scenes[filename] = name;
});
}
return scenes;
Expand Down
42 changes: 35 additions & 7 deletions test/index.test.js
Expand Up @@ -72,6 +72,12 @@ describe('urlmock', function () {
path.join(datadir, 'foo', 'default.json'),
]);

var paths = urlmock.mapping(datadir, '/foo?__scene=default.js');
assert.deepEqual(paths, [
path.join(datadir, 'foo', 'default.js'),
path.join(datadir, 'foo', 'default.json'),
]);

var paths = urlmock.mapping(datadir, '/foo?__scene=%20%20%20');
assert.deepEqual(paths, [
path.join(datadir, 'foo', 'default.js'),
Expand Down Expand Up @@ -331,27 +337,49 @@ describe('urlmock', function () {
describe('findAllScenes()', function () {
it('should find out all exists scenes', function () {
var data = urlmock.findAllScenes(datadir, '/');
assert.deepEqual(data, [ 'admin', 'array', 'data_with_ctx', 'default', 'fail', 'jsarray', 'logined' ]);
assert.deepEqual(data, {
'admin.js': 'admin',
'array.json': 'array',
'data_with_ctx.js': 'data_with_ctx',
'default.js': 'default',
'fail.js': 'fail',
'jsarray.js': 'jsarray',
'logined.js': 'logined'
});

var data = urlmock.findAllScenes(datadir, '/users');
assert.deepEqual(data, [ 'other', 'second' ]);
assert.deepEqual(data, {
'other.js': 'other',
'second.js': 'second'
});

var data = urlmock.findAllScenes(datadir, '/users.');
assert.deepEqual(data, []);
assert.deepEqual(data, {});

var data = urlmock.findAllScenes(datadir, '/users.html');
assert.deepEqual(data, [ 'other', 'second' ]);
assert.deepEqual(data, {
'other.js': 'other',
'second.js': 'second'
});

var data = urlmock.findAllScenes(datadir, '/users/123');
assert.deepEqual(data, [ 'one' ]);
assert.deepEqual(data, {
'one.js': 'one'
});

var data = urlmock.findAllScenes(datadir, '/users/123.html');
assert.deepEqual(data, [ 'default' ]);
assert.deepEqual(data, {
'default.js': 'default'
});
});

it('should support `__name` in mock data file', function () {
var data = urlmock.findAllScenes(datadir, '/profile');
assert.deepEqual(data, ['normal user (default.js)', 'lucy', '马 yun yun (ma.js)']);
assert.deepEqual(data, {
'default.js': 'normal user',
'lucy.js': 'lucy',
'ma.js': '马 yun yun'
});
});
});
});

0 comments on commit 91d0f1f

Please sign in to comment.