Skip to content

Commit e88abb2

Browse files
committed
Add missing ext for html and css in byType generator, close #58 (#59)
* Add missing ext for html and css in byType generator, close #58 * Add EOL
1 parent aafd955 commit e88abb2

File tree

4 files changed

+79
-7
lines changed

4 files changed

+79
-7
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
var types = require('./resource-types');
2+
3+
var defaultExtensions = {};
4+
5+
defaultExtensions[types.html] = '.html';
6+
defaultExtensions[types.css] = '.css';
7+
8+
module.exports = defaultExtensions;

lib/filename-generators/by-type.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
var _ = require('lodash');
22
var path = require('path');
33
var utils = require('../utils.js');
4+
var defaultExtensions = require('../config/resource-extensions-by-type');
45

56
module.exports = function generateFilename (resource, options, loadedResources) {
67
var occupiedFilenames = getOccupiedFilenames(loadedResources, options);
78

8-
var preferredFilename = resource.getFilename();
9-
var urlFilename = utils.getFilenameFromUrl(resource.getUrl());
10-
var filename = preferredFilename || urlFilename || options.defaultFilename;
11-
9+
var filename = getFilenameForResource(resource, options);
1210
var extension = path.extname(filename);
1311
var directory = getDirectoryByExtension(extension, options);
12+
1413
var currentFilename = path.join(directory, filename);
1514
var basename = path.basename(filename, extension);
1615
var index = 1;
@@ -22,6 +21,22 @@ module.exports = function generateFilename (resource, options, loadedResources)
2221
return currentFilename;
2322
};
2423

24+
function getFilenameForResource (resource, options) {
25+
var preferredFilename = resource.getFilename();
26+
var urlFilename = utils.getFilenameFromUrl(resource.getUrl());
27+
var filename = preferredFilename || urlFilename || options.defaultFilename;
28+
29+
var resourceType = resource.getType();
30+
var extension = path.extname(filename);
31+
32+
if (!extension && defaultExtensions[resourceType]) {
33+
extension = defaultExtensions[resourceType];
34+
filename += extension;
35+
}
36+
37+
return filename;
38+
}
39+
2540
function getOccupiedFilenames (loadedResources, options) {
2641
var subdirectories = _.map(options.subdirectories, function getDirectory (directory) { return directory.directory; });
2742
var loadedFiles = _.map(loadedResources, function getFileName (resource) { return resource.getFilename(); });

test/functional/resources-without-ext-test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('Functional resources without extensions', function() {
1919
fs.removeSync(testDirname);
2020
});
2121

22-
it('should load resources without extensions with correct type', function(done) {
22+
it('should load resources without extensions with correct type and wrap with extensions', function(done) {
2323
var options = {
2424
urls: [ 'http://example.com/' ],
2525
directory: testDirname,
@@ -49,7 +49,7 @@ describe('Functional resources without extensions', function() {
4949

5050
scraper.scrape(options).then(function() {
5151
// should load css file and fonts from css file
52-
fs.existsSync(testDirname + '/css').should.be.eql(true); // http://fonts.googleapis.com/css?family=Lato
52+
fs.existsSync(testDirname + '/css.css').should.be.eql(true); // http://fonts.googleapis.com/css?family=Lato
5353
fs.existsSync(testDirname + '/UyBMtLsHKBKXelqf4x7VRQ.woff2').should.be.eql(true);
5454
fs.existsSync(testDirname + '/1YwB1sO8YE1Lyjf12WNiUA.woff2').should.be.eql(true);
5555

@@ -58,7 +58,7 @@ describe('Functional resources without extensions', function() {
5858
fs.existsSync(testDirname + '/google.png').should.be.eql(true);
5959

6060
// should load html file and its sources from iframe
61-
fs.existsSync(testDirname + '/iframe').should.be.eql(true);
61+
fs.existsSync(testDirname + '/iframe.html').should.be.eql(true);
6262
fs.existsSync(testDirname + '/cat.png').should.be.eql(true);
6363

6464
done();

test/unit/file-name-generators/by-type-test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require('should');
2+
var sinon = require('sinon');
23
var Scraper = require('../../../lib/scraper');
34
var Resource = require('../../../lib/resource');
45
var byTypeFilenameGenerator = require('../../../lib/filename-generators/by-type');
@@ -36,6 +37,54 @@ describe('byTypeFilenameGenerator', function() {
3637
}).catch(done);
3738
});
3839

40+
it('should add missed extensions for html resources', function (done) {
41+
var s = new Scraper({
42+
urls: 'http://example.com',
43+
directory: testDirname,
44+
subdirectories: null
45+
});
46+
47+
s.prepare().then(function() {
48+
var r = new Resource('http://example.com/about', '');
49+
r.getType = sinon.stub().returns('html');
50+
var filename = byTypeFilenameGenerator(r, s.options, s.loadedResources);
51+
filename.should.be.eql('about.html');
52+
done();
53+
}).catch(done);
54+
});
55+
56+
it('should add missed extensions for css resources', function (done) {
57+
var s = new Scraper({
58+
urls: 'http://example.com',
59+
directory: testDirname,
60+
subdirectories: null
61+
});
62+
63+
s.prepare().then(function() {
64+
var r = new Resource('http://example.com/css', '');
65+
r.getType = sinon.stub().returns('css');
66+
var filename = byTypeFilenameGenerator(r, s.options, s.loadedResources);
67+
filename.should.be.eql('css.css');
68+
done();
69+
}).catch(done);
70+
});
71+
72+
it('should not add missed extensions for other resources', function (done) {
73+
var s = new Scraper({
74+
urls: 'http://example.com',
75+
directory: testDirname,
76+
subdirectories: null
77+
});
78+
79+
s.prepare().then(function() {
80+
var r = new Resource('http://1.gravatar.com/avatar/4d63e4a045c7ff22accc33dc08442f86?s=140&d=%2Fwp-content%2Fuploads%2F2015%2F05%2FGood-JOb-150x150.jpg&r=g', '');
81+
r.getType = sinon.stub().returns('home');
82+
var filename = byTypeFilenameGenerator(r, s.options, s.loadedResources);
83+
filename.should.be.eql('4d63e4a045c7ff22accc33dc08442f86');
84+
done();
85+
}).catch(done);
86+
});
87+
3988
it('should return filename with correct subdirectory', function(done) {
4089
var s = new Scraper({
4190
urls: 'http://example.com',

0 commit comments

Comments
 (0)