Skip to content

Commit

Permalink
track module collections, add collection cacheKey, update tests & com…
Browse files Browse the repository at this point in the history
…ments
  • Loading branch information
mikrostew committed Mar 15, 2018
1 parent 55b548c commit d73b71e
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 20 deletions.
3 changes: 3 additions & 0 deletions lib/assets/Assets.js
Expand Up @@ -14,6 +14,8 @@ function Assets(eyeglass, sass) {
this.eyeglass = eyeglass;
// create a master collection
this.collection = new AssetsCollection();
// and keep a list of module collections
this.moduleCollections = [];

// Expose these temporarily for back-compat reasons
function deprecate(method) {
Expand Down Expand Up @@ -57,6 +59,7 @@ Assets.prototype.addSource = function(src, opts) {
*/
Assets.prototype.export = function(src, opts) {
var assets = new AssetsCollection();
this.moduleCollections.push(assets);
return assets.addSource(src, opts);
};

Expand Down
10 changes: 10 additions & 0 deletions lib/assets/AssetsCollection.js
Expand Up @@ -52,4 +52,14 @@ AssetsCollection.prototype.asAssetImport = function (name) {
}, '@import "eyeglass/assets";\n');
};

/**
* Build a string suitable for caching an instance of this
* @returns {String} the cache key
*/
AssetsCollection.prototype.cacheKey = function(name) {
return this.sources.reduce(function(cacheStr, source) {
return cacheStr + ":" + source.cacheKey(name);
}, "sources");
};

module.exports = AssetsCollection;
2 changes: 1 addition & 1 deletion lib/assets/AssetsSource.js
Expand Up @@ -83,7 +83,7 @@ AssetsSource.prototype.toString = function() {
};

/**
* Build a string suitable for caching this asset
* Build a string suitable for caching an instance of this
* @returns {String} the cache key
*/
AssetsSource.prototype.cacheKey = function(namespace) {
Expand Down
74 changes: 55 additions & 19 deletions test/test_assets.js
Expand Up @@ -9,6 +9,7 @@ var glob = require("glob");

var Eyeglass = require("../lib");
var AssetsSource = require("../lib/assets/AssetsSource");
var AssetsCollection = require("../lib/assets/AssetsCollection");

function escapeBackslash(str) {
return str.replace(/\\/g, "\\\\");
Expand Down Expand Up @@ -984,68 +985,103 @@ describe("assets", function () {
});
});

describe("cache key", function() {
describe("cache keys", function() {
var rootDir = testutils.fixtureDirectory("app_assets");
var rootDir2 = testutils.fixtureDirectory("app_assets_odd_names");

it("generates different cacheKey for different httpPrefix", function(done) {
it("Assets.cacheKey includes httpPrefix", function(done) {
var source1 = new AssetsSource(rootDir, {
httpPrefix: "foo",
});
var source2 = new AssetsSource(rootDir, {
httpPrefix: "foo",
});
var source3 = new AssetsSource(rootDir, {
httpPrefix: "bar",
});
assert.notEqual(source1.cacheKey(), source2.cacheKey());
assert.equal(source1.cacheKey(), source2.cacheKey());
assert.notEqual(source1.cacheKey(), source3.cacheKey());
done();
});

it("generates different cacheKey for different name", function(done) {
it("Assets.cacheKey includes name", function(done) {
var source1 = new AssetsSource(rootDir, {
name: "foo",
});
var source2 = new AssetsSource(rootDir, {
name: "foo",
});
var source3 = new AssetsSource(rootDir, {
name: "bar",
});
assert.notEqual(source1.cacheKey(), source2.cacheKey());
assert.equal(source1.cacheKey(), source2.cacheKey());
assert.notEqual(source1.cacheKey(), source3.cacheKey());
done();
});

it("generates different cacheKey for different namespace", function(done) {
var source1 = new AssetsSource(rootDir, {
});
assert.notEqual(source1.cacheKey("foo"), source1.cacheKey("bar"));
it("Assets.cacheKey includes namespace", function(done) {
var source1 = new AssetsSource(rootDir, {});
var source2 = new AssetsSource(rootDir, {});
assert.equal(source1.cacheKey("foo"), source2.cacheKey("foo"));
assert.notEqual(source1.cacheKey("foo"), source2.cacheKey("bar"));
done();
});

it("generates different cacheKey for different srcPath", function(done) {
it("Assets.cacheKey includes srcPath", function(done) {
var source1 = new AssetsSource(rootDir, {});
var source2 = new AssetsSource(rootDir2, {});
assert.notEqual(source1.cacheKey(), source2.cacheKey());
var source2 = new AssetsSource(rootDir, {});
var source3 = new AssetsSource(rootDir2, {});
assert.equal(source1.cacheKey(), source2.cacheKey());
assert.notEqual(source1.cacheKey(), source3.cacheKey());
done();
});

it("generates different cacheKey for different pattern", function(done) {
it("Assets.cacheKey includes pattern", function(done) {
var source1 = new AssetsSource(rootDir, {
pattern: "images/**/*",
});
var source2 = new AssetsSource(rootDir, {
pattern: "images/**/*",
});
var source3 = new AssetsSource(rootDir, {
pattern: "images/**/*.jpg",
});
assert.notEqual(source1.cacheKey(), source2.cacheKey());
assert.equal(source1.cacheKey(), source2.cacheKey());
assert.notEqual(source1.cacheKey(), source3.cacheKey());
done();
});

it("generates different cacheKey for different globOpts", function(done) {
var source1 = new AssetsSource(rootDir, {
});
var source2 = new AssetsSource(rootDir, {
it("Assets.cacheKey includes globOpts", function(done) {
var source1 = new AssetsSource(rootDir, {});
var source2 = new AssetsSource(rootDir, {});
var source3 = new AssetsSource(rootDir, {
globOpts: {
dot: true
}
});
assert.notEqual(source1.cacheKey(), source2.cacheKey());
assert.equal(source1.cacheKey(), source2.cacheKey());
assert.notEqual(source1.cacheKey(), source3.cacheKey());
done();
});

it("AssetsCollection.cacheKey includes collection sources", function(done) {
var collection1 = new AssetsCollection();
var collection2 = new AssetsCollection();
var collection3 = new AssetsCollection();
var collection4 = new AssetsCollection();

collection1.addSource(rootDir);
collection2.addSource(rootDir);
collection3.addSource(rootDir2);
collection4.addSource(rootDir);
collection4.addSource(rootDir2);

assert.equal(collection1.cacheKey(), collection2.cacheKey());
assert.notEqual(collection1.cacheKey(), collection3.cacheKey());
assert.notEqual(collection1.cacheKey(), collection4.cacheKey());
done();
});

});
});
});
Expand Down

0 comments on commit d73b71e

Please sign in to comment.