From 1a12ccb252b6eebb40802316563d275bedaabe19 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 14 Sep 2014 22:40:45 +1200 Subject: [PATCH 01/28] Use custom imagemagick. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a9585eb..99206a2 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "async": "0.1.x", - "imagemagick": "0.1.x" + "imagemagick": "https://github.com/nathankot/node-imagemagick/tarball/wedis" }, "engines": { "node": "*" From 0614472f122f0388725370b518181c6166e26da2 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 14 Sep 2014 23:16:28 +1200 Subject: [PATCH 02/28] Use git url. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99206a2..ceed26d 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "async": "0.1.x", - "imagemagick": "https://github.com/nathankot/node-imagemagick/tarball/wedis" + "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis" }, "engines": { "node": "*" From 42d3ae2b716eec13c2f74fb9d7a40298275a97c2 Mon Sep 17 00:00:00 2001 From: Sandro Munda Date: Sun, 17 Mar 2013 13:23:49 +0100 Subject: [PATCH 03/28] Added the filenameId attribute. filenameId allows the user to customize the filename. Before: /dir/objectId-original.jpg Now: /dir/-original.jog --- lib/attachments.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/attachments.js b/lib/attachments.js index 844cddb..86413bd 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -167,7 +167,8 @@ var plugin = function(schema, options) { var styleOptions = styles[styleName] || {}; var finishConversion = function(styleFilePath, atts, cb) { var ext = path.extname(styleFilePath); - var storageStylePath = '/' + options.directory + '/' + selfModel.id + '-' + styleName + ext; + var filenameId = options.filenameId ? selfModel[options.filenameId] : selfModel.id; + var storageStylePath = '/' + options.directory + '/' + filenameId + '-' + styleName + ext; fs.stat(styleFilePath, function(err, stats) { if(err) return cb(err); cb(null, { From e6f6d3685658f2eec98095253ffddd9fb85700fe Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 2 Nov 2014 10:47:03 +0900 Subject: [PATCH 04/28] Add gm dependency. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 838d986..4514003 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "async": "0.1.x", + "gm": "^1.17.0", "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis" }, "devDependencies": { From 8736cfea4aa99082c9643f6527f3e9b24dd839d6 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 2 Nov 2014 10:50:50 +0900 Subject: [PATCH 05/28] Tabs to spaces. --- lib/attachments.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index 42f7b0c..3ab6c20 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -104,10 +104,10 @@ var plugin = function(schema, options) { var providerOptions = storageOptions.options || {}; var providerInstance = new providerPrototype(providerOptions); if(typeof providerInstance.getUrl !== 'function') { - throw new Error('Provider ' + storageOptions.providerName + ' does not have a method getUrl'); + throw new Error('Provider ' + storageOptions.providerName + ' does not have a method getUrl'); } if(typeof providerInstance.createOrReplace !== 'function') { - throw new Error('Provider ' + storageOptions.providerName + ' does not have a method createOrReplace'); + throw new Error('Provider ' + storageOptions.providerName + ' does not have a method createOrReplace'); } var propertyNames = Object.keys(options.properties); propertyNames.forEach(function(propertyName) { From 6607e9dc6894e000a94315be37312696f64a0d66 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 2 Nov 2014 12:10:58 +0900 Subject: [PATCH 06/28] Setup testing. --- package.json | 10 ++-- test/bootstrap.js | 2 + test/defaultUrl.spec.js | 1 - test/testFindImageMagickFormats.js | 78 ------------------------------ 4 files changed, 7 insertions(+), 84 deletions(-) create mode 100644 test/bootstrap.js delete mode 100644 test/testFindImageMagickFormats.js diff --git a/package.json b/package.json index 4514003..0463300 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ }, "main": "index.js", "scripts": { - "test": "npm run specs && node ./test/testFindImageMagickFormats.js", - "specs": "./node_modules/.bin/mocha test/**/*.spec.js" + "test": "npm run specs", + "specs": "./node_modules/.bin/mocha -r test/bootstrap.js test/**/*.spec.js" }, "dependencies": { "async": "0.1.x", @@ -26,9 +26,9 @@ "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis" }, "devDependencies": { - "mongoose": "^3.8.9", - "mocha": "^1.18.2", - "chai": "^1.9.1" + "chai": "^1.9.2", + "mocha": "^2.0.1", + "mongoose": "^3.8.18" }, "engines": { "node": "*" diff --git a/test/bootstrap.js b/test/bootstrap.js new file mode 100644 index 0000000..02205a4 --- /dev/null +++ b/test/bootstrap.js @@ -0,0 +1,2 @@ +global.chai = require('chai'); +global.expect = chai.expect; diff --git a/test/defaultUrl.spec.js b/test/defaultUrl.spec.js index 9402fe2..b4b223e 100644 --- a/test/defaultUrl.spec.js +++ b/test/defaultUrl.spec.js @@ -1,5 +1,4 @@ var mongoose = require('mongoose'); -var expect = require('chai').expect; var fs = require('fs'); var plugin = require('../lib/attachments'); diff --git a/test/testFindImageMagickFormats.js b/test/testFindImageMagickFormats.js deleted file mode 100644 index 3201d3f..0000000 --- a/test/testFindImageMagickFormats.js +++ /dev/null @@ -1,78 +0,0 @@ -var plugin = require('../lib/attachments'); - -// NOTE that these tests have been created on MacOS 10.7.5 with ImageMagick 6.7.7-6 installed via homebrew -// Check that the formats in the tests match your installation by calling -// 'convert -list format' and comparing the output -// -// CALL for test: node test/testFindImageMagickFormats.js -// -// Tests have passed if no error is thrown and the " support passed" messages are printed. - -plugin.registerImageMagickDecodingFormats(); - -plugin.registerImageMagickFormats({ read: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') < 0) { - throw new Error ('XPS has read support'); - } - if (formats.indexOf('UIL') >= 0) { - throw new Error ('UIL has no read,multi support'); - } - console.log("read support passed"); - } -}); - -plugin.registerImageMagickFormats({ write: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') >= 0) { - throw new Error ('XPS has no write,multi support'); - } - if (formats.indexOf('UIL') < 0) { - throw new Error ('UIL has write support'); - } - console.log("write support passed"); - } -}); - -plugin.registerImageMagickFormats({ write: true, blob: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('WMV') >= 0) { - throw new Error ('XPS has write but no blob support'); - } - if (formats.indexOf('UIL') < 0) { - throw new Error ('UIL has write and blob support'); - } - console.log("write and blob support passed"); - } -}); - -plugin.registerImageMagickFormats({ read: true, multi: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') >= 0) { - throw new Error ('XPS has read but no multi support'); - } - if (formats.indexOf('UIL') >= 0) { - throw new Error ('UIL has no read,multi support'); - } - if (formats.indexOf('X') < 0) { - throw new Error ('X has read and multi support'); - } - console.log("read and multi support passed"); - } -}); From 2d27ca91e8dfc0af2d7647d6270aa6712634b76d Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 2 Nov 2014 12:18:32 +0900 Subject: [PATCH 07/28] Formatting. --- test/defaultUrl.spec.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/defaultUrl.spec.js b/test/defaultUrl.spec.js index b4b223e..7b789cd 100644 --- a/test/defaultUrl.spec.js +++ b/test/defaultUrl.spec.js @@ -25,16 +25,18 @@ UserSchema.plugin(plugin, { var User = mongoose.model('User', UserSchema); describe('path', function(){ + it('adds the propertyName in the attached image path', function(done){ var user = new User({}); var path = { path: process.cwd() + '/test/fixtures/mongodb.png' }; - user.attach('profile', path, function(err){ - user.attach('avatar', path, function(err){ + user.attach('profile', path, function(err) { + user.attach('avatar', path, function(err) { expect(user.avatar.original.defaultUrl).to.not.eql(user.profile.original.defaultUrl); expect(user.avatar.original.defaultUrl).to.include('users/avatar/' + user.id + '-original.png'); expect(user.profile.original.defaultUrl).to.include('users/profile/' + user.id + '-original.png'); done(); - }) + }); }); }); + }); From 8835f4932e6beaf6ac2c0d8ead75954543557bb0 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Sun, 2 Nov 2014 12:56:47 +0900 Subject: [PATCH 08/28] Watch script. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 0463300..1682627 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "main": "index.js", "scripts": { "test": "npm run specs", - "specs": "./node_modules/.bin/mocha -r test/bootstrap.js test/**/*.spec.js" + "specs": "./node_modules/.bin/mocha -r test/bootstrap.js test/**/*.spec.js", + "watch": "./node_modules/.bin/mocha -r test/bootstrap.js test/**/*.spec.js --watch **/*.js" }, "dependencies": { "async": "0.1.x", From 9050409383b14a89aa9e844d1861c68ea3417e77 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:15:01 +0900 Subject: [PATCH 09/28] Bootstrap - make it work with watch. --- test/bootstrap.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/bootstrap.js b/test/bootstrap.js index 02205a4..b04f87d 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -1,2 +1,56 @@ global.chai = require('chai'); global.expect = chai.expect; + +var fs = require('fs'); +var mongoose = require('mongoose'); +var plugin = require('../lib/attachments'); + +if (!plugin.providersRegistry.fakeProvider) { + + var fakeProvider = function(){}; + + fakeProvider.prototype.getUrl = function(path){ + return path; + }; + + fakeProvider.prototype.createOrReplace = function(attachment, next){ + attachment.defaultUrl = this.getUrl(attachment.path); + + console.log(attachment.filename); + fs.createReadStream(attachment.filename).pipe( + fs.createWriteStream(attachment.path) + .on('finish', function() { + next(null, attachment); + }) + ); + }; + + plugin.registerStorageProvider('fakeProvider', fakeProvider); + +} + +if (!mongoose.models.User) { + + UserSchema = new mongoose.Schema({ }); + + UserSchema.plugin(plugin, { + directory: process.cwd() + '/tmp', + storage: { providerName: 'fakeProvider', options: { } }, + properties: { + profile: { styles: { original: { } } }, + avatar: { + styles: { + original: { }, + thumbnail: { + thumbnail: '140x140^', + gravity: 'center', + } + } + }, + } + }); + + mongoose.model('User', UserSchema); + +} + From 4255f8889919c52feaa387ef67d7da56ef156d66 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:15:28 +0900 Subject: [PATCH 10/28] Expose providersRegistry. --- lib/attachments.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/attachments.js b/lib/attachments.js index 3ab6c20..8d816a6 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -313,9 +313,11 @@ var plugin = function(schema, options) { function StorageProvider(options) { this.options = options; } + StorageProvider.prototype.update = function(attachment, cb) { throw new Error('method update implemented'); }; + plugin.StorageProvider = StorageProvider; // Method to Register Storage Providers @@ -325,6 +327,8 @@ plugin.registerStorageProvider = function(name, provider) { providersRegistry[name] = provider; } +plugin.providersRegistry = providersRegistry; + // Register a Known Decoding Format(e.g 'PNG') plugin.registerDecodingFormat = function(name) { supportedDecodingFormats.push(name); From 35ca5186925a3cf39633a000d8ce6f8c449e9834 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:23:34 +0900 Subject: [PATCH 11/28] Ensure that the provider actually writes the new file. --- .gitignore | 2 ++ package.json | 1 + test/bootstrap.js | 7 ++++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index cfdef68..5c5f717 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ logs results node_modules +test/tmp/* +test/fixtures/mongodb-thumbnail.png diff --git a/package.json b/package.json index 1682627..9759459 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "chai": "^1.9.2", + "file": "^0.2.2", "mocha": "^2.0.1", "mongoose": "^3.8.18" }, diff --git a/test/bootstrap.js b/test/bootstrap.js index b04f87d..2c33fae 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -2,6 +2,8 @@ global.chai = require('chai'); global.expect = chai.expect; var fs = require('fs'); +var path = require('path'); +var file = require('file'); var mongoose = require('mongoose'); var plugin = require('../lib/attachments'); @@ -15,8 +17,7 @@ if (!plugin.providersRegistry.fakeProvider) { fakeProvider.prototype.createOrReplace = function(attachment, next){ attachment.defaultUrl = this.getUrl(attachment.path); - - console.log(attachment.filename); + file.mkdirsSync(path.dirname(attachment.path)); fs.createReadStream(attachment.filename).pipe( fs.createWriteStream(attachment.path) .on('finish', function() { @@ -34,7 +35,7 @@ if (!mongoose.models.User) { UserSchema = new mongoose.Schema({ }); UserSchema.plugin(plugin, { - directory: process.cwd() + '/tmp', + directory: path.join(process.cwd(), 'test', 'tmp'), storage: { providerName: 'fakeProvider', options: { } }, properties: { profile: { styles: { original: { } } }, From 99c53edef4a4c382c00a8f7ecb76e4edc7093ed0 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:24:22 +0900 Subject: [PATCH 12/28] Thumbnail should be smaller. --- test/bootstrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bootstrap.js b/test/bootstrap.js index 2c33fae..0b3a0d5 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -43,7 +43,7 @@ if (!mongoose.models.User) { styles: { original: { }, thumbnail: { - thumbnail: '140x140^', + thumbnail: '25x25^', gravity: 'center', } } From a379528db67034d9020c082f0234d5082c7c8994 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:38:50 +0900 Subject: [PATCH 13/28] Add test for resampling. --- package.json | 1 + test/defaultUrl.spec.js | 46 +++++++++---------- test/fixtures/mongodb-thumbnail-expected.png | Bin 0 -> 1600 bytes 3 files changed, 22 insertions(+), 25 deletions(-) create mode 100644 test/fixtures/mongodb-thumbnail-expected.png diff --git a/package.json b/package.json index 9759459..3b25a33 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "chai": "^1.9.2", + "checksum": "^0.1.1", "file": "^0.2.2", "mocha": "^2.0.1", "mongoose": "^3.8.18" diff --git a/test/defaultUrl.spec.js b/test/defaultUrl.spec.js index 7b789cd..53fa60e 100644 --- a/test/defaultUrl.spec.js +++ b/test/defaultUrl.spec.js @@ -1,28 +1,7 @@ var mongoose = require('mongoose'); -var fs = require('fs'); var plugin = require('../lib/attachments'); - -var fakeProvider = function(){}; -fakeProvider.prototype.getUrl = function(path){ - return path; -}; -fakeProvider.prototype.createOrReplace = function(attachment, next){ - attachment.defaultUrl = this.getUrl(attachment.path); - next(null, attachment); -}; - -plugin.registerStorageProvider('fakeProvider', fakeProvider); - -UserSchema = new mongoose.Schema({ }); -UserSchema.plugin(plugin, { - directory: process.cwd() + '/public/users', - storage: { providerName: 'fakeProvider', options: { } }, - properties: { - profile: { styles: { original: { } } }, - avatar: { styles: { original: { } } } - } -}); -var User = mongoose.model('User', UserSchema); +var User = mongoose.model('User'); +var checksum = require('checksum'); describe('path', function(){ @@ -32,11 +11,28 @@ describe('path', function(){ user.attach('profile', path, function(err) { user.attach('avatar', path, function(err) { expect(user.avatar.original.defaultUrl).to.not.eql(user.profile.original.defaultUrl); - expect(user.avatar.original.defaultUrl).to.include('users/avatar/' + user.id + '-original.png'); - expect(user.profile.original.defaultUrl).to.include('users/profile/' + user.id + '-original.png'); + expect(user.avatar.original.defaultUrl).to.include('tmp/avatar/' + user.id + '-original.png'); + expect(user.profile.original.defaultUrl).to.include('tmp/profile/' + user.id + '-original.png'); done(); }); }); }); }); + +describe('resampling', function() { + + it('creates a separate image', function(done) { + var user = new User({}); + var path = { path: process.cwd() + '/test/fixtures/mongodb.png' }; + user.attach('avatar', path, function(err) { + checksum.file(user.avatar.thumbnail.path, function(err, generated) { + checksum.file(process.cwd() + '/test/fixtures/mongodb-thumbnail-expected.png', function(err, expected) { + expect(generated).to.equal(expected); + }); + }); + done(); + }); + }); + +}); diff --git a/test/fixtures/mongodb-thumbnail-expected.png b/test/fixtures/mongodb-thumbnail-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..8a12d2c70a09e22a0e13ce53077b0961a902758b GIT binary patch literal 1600 zcmZ{k2~bm46hI$P6SqLGKdi&M*1 z1O!Y3K}{GDk)oxtXsgmeM~AwgcF}g!skRlF>ZomPhmrnBJEha<%)9Tt`|i2hyg$D_ zL&){@3h@E}_@?mKVpNBq671=L?m^&^>*5s+L%;yw*e>sRWb=3%(LU)eRasb)`h5uBI~#qc&p zapKpZ@J>fzjx3%@!X(9nCgZ}A@#qTgy;Nyw5b@}d4173)5MEiA!HSDu;KMR=sG_`t z+U`6kVZBHiw|Pjb+9!bo(e_DGmM9iVjM8^yZTr-q>X(TdSnTAe>Sl>lPv10Buz6go z?8}twW+-#h@q+vVqV!H)hMmtZO=uV>;!xIc za|yEkw4yv_mVKE{_c23?v zI(#%!){~mHn*-$#QmbgP0fAyrEbU53-OWz@AeogE$>zK%u|WlcB9V>9Z((s2vD|EY z{{D2iJp(GEFezAB!N!X1xlAfn_)bh|ekzB&PRt}NEG(?QaXSfp?+8RJl%P65(s|+j zudC$~k6uJOp3=?{F8CjHFZm5q{Os_JpP%pONghQZx1v-o+j0KpBiE<5(!|R#1K|C- zOWeTT?jRIsOkp#m8!oF9z#W1hbzl~ya@DFzN>-p6v&YRVD3~@rW~~b7Xz%Fow_3-> zsmk)ErY-aC(E}y3A$#|R%$5v9yU%a&qd`%O2%I4_KXI!Ei{-I3F+bFRi(o{xyx|zG zYdu!qbJ%VV_Uy9H+Jn~CdwTQ*ai&J5anBgFompQl$K>9gl&7Y(w=(3+nR9_L4x{GL z9qmf>H#d3wx;Wl38tvhGzl@DdjBl>0z5lFx-`CC{Cwyx9O!Dnp=fAp~gz=kv+SaOW z@%37+kM&*Y>%FV4sbQzqdsQ3U(pbOjmj9aG7F&CFTU*Eq3YG#jGv398&J8wA56*Re zdurZ&c(u>WwR^$-UX4Cy#Z!@e@cn>}OvMqOMy~+Bi2;4d!`ZbVUDJ0a6qR<$=*Wpr zEMx>bS37(rh#XIY<5m;cdZ|5)9HWqQ22Q@z~$ z!=*Tm7t7g_U^{)rhjy>^d;MK(`*UV9?6LKF_PO1Z$9)^*5Bxxka*Okc?Yjc>ts)Ul zHd3raV7jUtMiq!9lE^p`2}g{Tl8AINnI0GaHjzdr5<6>FJo#6E!C0(QTmL`cN9<`K z8X$00FdNl~MOhAm6oXO&3zQn2N{^x7sdyTWiV=}0m?|ozkV3}%Qyrs45EGq1uvjd3 zoht|xGzf1j*IaCHmY|7)T#2RH3PTZ{&Niwl3~(7jr)Qw38ITSwoFt&knkCH3(sVix z)@if|Ak!XeMo*$h;C~UBt{BmRc%pXoi)$zmyo33EiF%%znC zQj`KDGKoy3#ZnUDiyw1bf8E!XVme+V7o~C>SjVQaD2P5K~e6Cx8QAOaK4? literal 0 HcmV?d00001 From 997a50809c2ad338aeaf1cb72ec71b615f75f33b Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 08:39:39 +0900 Subject: [PATCH 14/28] Reorganise specs. --- test/{defaultUrl.spec.js => path.spec.js} | 20 +------------------- test/resampling.spec.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 19 deletions(-) rename test/{defaultUrl.spec.js => path.spec.js} (57%) create mode 100644 test/resampling.spec.js diff --git a/test/defaultUrl.spec.js b/test/path.spec.js similarity index 57% rename from test/defaultUrl.spec.js rename to test/path.spec.js index 53fa60e..f098ee6 100644 --- a/test/defaultUrl.spec.js +++ b/test/path.spec.js @@ -1,7 +1,6 @@ var mongoose = require('mongoose'); -var plugin = require('../lib/attachments'); var User = mongoose.model('User'); -var checksum = require('checksum'); +var plugin = require('../lib/attachments'); describe('path', function(){ @@ -19,20 +18,3 @@ describe('path', function(){ }); }); - -describe('resampling', function() { - - it('creates a separate image', function(done) { - var user = new User({}); - var path = { path: process.cwd() + '/test/fixtures/mongodb.png' }; - user.attach('avatar', path, function(err) { - checksum.file(user.avatar.thumbnail.path, function(err, generated) { - checksum.file(process.cwd() + '/test/fixtures/mongodb-thumbnail-expected.png', function(err, expected) { - expect(generated).to.equal(expected); - }); - }); - done(); - }); - }); - -}); diff --git a/test/resampling.spec.js b/test/resampling.spec.js new file mode 100644 index 0000000..60f9fbd --- /dev/null +++ b/test/resampling.spec.js @@ -0,0 +1,21 @@ +var mongoose = require('mongoose'); +var User = mongoose.model('User'); +var plugin = require('../lib/attachments'); +var checksum = require('checksum'); + +describe('resampling', function() { + + it('creates a separate image', function(done) { + var user = new User({}); + var path = { path: process.cwd() + '/test/fixtures/mongodb.png' }; + user.attach('avatar', path, function(err) { + checksum.file(user.avatar.thumbnail.path, function(err, generated) { + checksum.file(process.cwd() + '/test/fixtures/mongodb-thumbnail-expected.png', function(err, expected) { + expect(generated).to.equal(expected); + }); + }); + done(); + }); + }); + +}); From f6a5ae42db79fa035b2beb2fe1a87dc8b958997f Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 09:05:39 +0900 Subject: [PATCH 15/28] README first - tweak how attachment configuration looks. --- README.md | 77 +++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 54210bb..f6cd697 100644 --- a/README.md +++ b/README.md @@ -52,13 +52,23 @@ PostSchema.plugin(attachments, { // keep the original file }, small: { - resize: '150x150' + transform: function(image) { + return image + .resize(150, 150) + ; + } }, medium: { - resize: '120x120' + transform: function(image) { + return image + .resize(120, 120) + ; + } }, medium_jpg: { - '$format': 'jpg' // this one changes the format of the image to jpg + options: { + format: 'jpg' // this one changes the format of the image to jpg + } } } } @@ -124,14 +134,24 @@ MySchema.plugin(attachments, { // keep the original file }, thumb: { - thumbnail: '100x100^', - gravity: 'center', - extent: '100x100', - '$format': 'jpg' + options: { + format: 'jpg' + }, + transform: function(image) { + return image + .thumbnail(100, 100) + .gravity('center') + .extend(100, 100) + } }, detail: { - resize: '400x400>', - '$format': 'jpg' + options: { + format: 'jpg' + }, + transform: function(image) { + return image + .resize(400, 400, '>') + } } } } @@ -171,25 +191,9 @@ Example: } ``` -### Styles and ImageMagick Transformations +### Styles and Transformations -Transformations are achieved by invoking the **convert** command from ImageMagick and passing all the properties of the style as arguments. - -For more information about convert, take a look at http://www.imagemagick.org/script/command-line-options.php - -Example in convert command: - - convert source.png -resize '50%' output.png - -Example in plugin options: - -```javascript -styles: { - small: { - resize: '50%' - } -} -``` +Transformations are achieved using the [gm library](https://github.com/aheckmann/gm). #### Keeping the Original File @@ -201,30 +205,19 @@ styles: { } ``` -#### Multiples Transformations - -Use another properties under the style to provide more transformations - -```javascript -styles: { - small: { - crop: '120x120', - blur: '5x10' //radius x stigma - } -} -``` - More information about 'blur' at the [ImageMagick website] http://www.imagemagick.org/script/command-line-options.php#blur #### Changing the Destination Format -You can change the destination format by using the special transformation '$format' with a known file extension like *png*, *jpg*, *gif*, etc. +You can specify a format option to change the format of the output. Example: styles: { as_jpeg: { - '$format': 'jpg' + options: { + format: 'jpg' + } } } From 08c1772891131d0ce672635d2a98b2f030c0080c Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 09:07:17 +0900 Subject: [PATCH 16/28] Tweak the spec. --- test/bootstrap.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/bootstrap.js b/test/bootstrap.js index 0b3a0d5..617d893 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -43,8 +43,12 @@ if (!mongoose.models.User) { styles: { original: { }, thumbnail: { - thumbnail: '25x25^', - gravity: 'center', + transform: function(image) { + return image + .thumbnail(25, 25) + .gravity('center') + ; + } } } }, From 7c9c2524ee8c5c26546a0765d79a7427930ed54b Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 09:25:41 +0900 Subject: [PATCH 17/28] Code clean up. --- lib/attachments.js | 54 +++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index 8d816a6..8b6bf8a 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -19,6 +19,7 @@ // THE SOFTWARE. var im = require('imagemagick'); +var gm = require('gm'); var fs = require('fs'); var path = require('path'); var async = require('async'); @@ -81,15 +82,19 @@ function findImageMagickFormats(options, callback) { } return callback(null,formats); } else { - return callback(new Error("No format supports the requested operation(s): " - + Object.keys(opts).toString() - + " . Check 'convert -list format'")); + return callback(new Error( + "No format supports the requested operation(s): " + + Object.keys(opts).toString() + + " . Check 'convert -list format'" + )); } }); } var plugin = function(schema, options) { + options = options || {}; + if(typeof(options.directory) !== 'string') throw new Error('option "directory" is required'); if(typeof(options.properties) !== 'object') throw new Error('option "properties" is required'); if(typeof(options.storage) !== 'object') throw new Error('option "storage" is required'); @@ -103,14 +108,18 @@ var plugin = function(schema, options) { var providerOptions = storageOptions.options || {}; var providerInstance = new providerPrototype(providerOptions); - if(typeof providerInstance.getUrl !== 'function') { + + if (typeof providerInstance.getUrl !== 'function') { throw new Error('Provider ' + storageOptions.providerName + ' does not have a method getUrl'); } - if(typeof providerInstance.createOrReplace !== 'function') { + + if (typeof providerInstance.createOrReplace !== 'function') { throw new Error('Provider ' + storageOptions.providerName + ' does not have a method createOrReplace'); } + var propertyNames = Object.keys(options.properties); propertyNames.forEach(function(propertyName) { + var propertyOptions = options.properties[propertyName]; if(!propertyOptions) throw new Error('property "' + propertyName + '" requires an specification'); @@ -122,15 +131,15 @@ var plugin = function(schema, options) { var propSchema = addOp[propertyName] = {}; styleNames.forEach(function(styleName) { propSchema[styleName] = { - size: Number // Size of the File - , oname: String // Original name of the file - , mtime: Date - , ctime: Date - , path: String // Storage Path - , defaultUrl: String // Default (non-secure, most of the time public) Url - , format: String // Format of the File(provided by identify). - , depth: Number - , dims: { // Dimensions of the Image + size: Number, // Size of the File + oname: String, // Original name of the file + mtime: Date, + ctime: Date, + path: String, // Storage Path + defaultUrl: String, // Default (non-secure, most of the time public) Url + format: String, // Format of the File(provided by identify). + depth: Number, + dims: { // Dimensions of the Image h: Number, // Height w: Number // Width } @@ -139,6 +148,7 @@ var plugin = function(schema, options) { // Add the Property schema.add(addOp); + }); // for each property name // Finally we set the method 'attach' @@ -201,13 +211,13 @@ var plugin = function(schema, options) { var optionKeys = Object.keys(styleOptions); var transformationNames = []; optionKeys.forEach(function(transformationName) { - if(transformationName.indexOf('$') != 0) { // if is not special command, add it as an special transformation argument + if (transformationName.indexOf('$') !== 0) { // if is not special command, add it as an special transformation argument transformationNames.push(transformationName); } }); - if(optionKeys.length != 0) { - if(canTransform) { - var styleFileExt = styleOptions['$format'] ? ('.' + styleOptions['$format']) : fileExt; + if (optionKeys.length !== 0) { + if (canTransform) { + var styleFileExt = styleOptions.$format ? ('.' + styleOptions.$format) : fileExt; var styleFileName = path.basename(attachmentInfo.path, fileExt); styleFileName += '-' + styleName + styleFileExt; var styleFilePath = path.join(path.dirname(attachmentInfo.path), styleFileName); @@ -325,14 +335,14 @@ plugin.registerStorageProvider = function(name, provider) { if(typeof(name) !== 'string') throw new Error('storage engine name is required'); if(provider && provider._super == StorageProvider) throw new Error('provider is not valid. it does not inherits from StorageEngine'); providersRegistry[name] = provider; -} +}; plugin.providersRegistry = providersRegistry; // Register a Known Decoding Format(e.g 'PNG') plugin.registerDecodingFormat = function(name) { supportedDecodingFormats.push(name); -} +}; /* * Use this to register all formats for which your local ImageMagick installation supports @@ -340,7 +350,7 @@ plugin.registerDecodingFormat = function(name) { */ plugin.registerImageMagickDecodingFormats = function() { plugin.registerImageMagickFormats({ read: true }); -} +}; /* * You can register formats based on certain modes or a combination of those: @@ -363,7 +373,7 @@ plugin.registerImageMagickFormats = function(options, callback) { }; } findImageMagickFormats(options, callback); -} +}; // Export the Plugin for mongoose.js module.exports = plugin; From 5b1882916543e54ddca10def15df5a0ace66ebb1 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 09:30:04 +0900 Subject: [PATCH 18/28] If spacing. --- lib/attachments.js | 54 ++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index 8b6bf8a..f197d96 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -24,6 +24,7 @@ var fs = require('fs'); var path = require('path'); var async = require('async'); var existsFn = fs.exists || path.exists; +var Q = require('q'); // keeps a global registry of storage providers var providersRegistry = {}; @@ -37,7 +38,7 @@ var supportedDecodingFormats = [ function findProvider(name) { var provider = providersRegistry[name]; - if(!provider) throw new Error('Storage Provider "' + name + '" can not be found'); + if (!provider) throw new Error('Storage Provider "' + name + '" can not be found'); return provider; } @@ -95,15 +96,15 @@ var plugin = function(schema, options) { options = options || {}; - if(typeof(options.directory) !== 'string') throw new Error('option "directory" is required'); - if(typeof(options.properties) !== 'object') throw new Error('option "properties" is required'); - if(typeof(options.storage) !== 'object') throw new Error('option "storage" is required'); - if(typeof(options.idAsDirectory) !== 'boolean') options.idAsDirectory = false; + if (typeof(options.directory) !== 'string') throw new Error('option "directory" is required'); + if (typeof(options.properties) !== 'object') throw new Error('option "properties" is required'); + if (typeof(options.storage) !== 'object') throw new Error('option "storage" is required'); + if (typeof(options.idAsDirectory) !== 'boolean') options.idAsDirectory = false; var storageOptions = options.storage; storageOptions.schema = schema; - if(typeof(storageOptions.providerName) !== 'string') throw new Error('option "storage.providerName" is required'); + if (typeof(storageOptions.providerName) !== 'string') throw new Error('option "storage.providerName" is required'); var providerPrototype = findProvider(storageOptions.providerName); var providerOptions = storageOptions.options || {}; @@ -121,11 +122,11 @@ var plugin = function(schema, options) { propertyNames.forEach(function(propertyName) { var propertyOptions = options.properties[propertyName]; - if(!propertyOptions) throw new Error('property "' + propertyName + '" requires an specification'); + if (!propertyOptions) throw new Error('property "' + propertyName + '" requires an specification'); var styles = propertyOptions.styles || {}; var styleNames = Object.keys(styles); - if(styleNames.length == 0) throw new Error('property "' + propertyName + '" needs to define at least one style'); + if (styleNames.length == 0) throw new Error('property "' + propertyName + '" needs to define at least one style'); var addOp = {}; var propSchema = addOp[propertyName] = {}; @@ -159,21 +160,22 @@ var plugin = function(schema, options) { // mime: String(optional). Mime type of the file. schema.methods.attach = function(propertyName, attachmentInfo, cb) { var selfModel = this; - if(propertyNames.indexOf(propertyName) == -1) return cb(new Error('property "' + propertyName + '" was not registered as an attachment property')); + if (propertyNames.indexOf(propertyName) == -1) return cb(new Error('property "' + propertyName + '" was not registered as an attachment property')); var propertyOptions = options.properties[propertyName]; var styles = propertyOptions.styles || {}; - if(!attachmentInfo || typeof(attachmentInfo) !== 'object') return cb(new Error('attachmentInfo is not valid')); - if(typeof(attachmentInfo.path) !== 'string') return cb(new Error('attachmentInfo has no valid path')); - if(!attachmentInfo.name) { + if (!attachmentInfo || typeof(attachmentInfo) !== 'object') return cb(new Error('attachmentInfo is not valid')); + if (typeof(attachmentInfo.path) !== 'string') return cb(new Error('attachmentInfo has no valid path')); + if (!attachmentInfo.name) { // No original name provided? We infer it from the path attachmentInfo.name = path.basename(attachmentInfo.path); } + existsFn(attachmentInfo.path, function(exists) { - if(!exists) return cb(new Error('file to attach at path "' + attachmentInfo.path + '" does not exists')); + if (!exists) return cb(new Error('file to attach at path "' + attachmentInfo.path + '" does not exists')); fs.stat(attachmentInfo.path, function(err, stats) { - if(!stats.isFile()) return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); + if (!stats.isFile()) return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); im.identify(attachmentInfo.path, function(err, atts) { - if(err) return cb(new Error('identify didn\'t work. Maybe imagemagick is not installed? "' + err + '"')); + if (err) return cb(new Error('identify didn\'t work. Maybe imagemagick is not installed? "' + err + '"')); // if 'identify' fails, that probably means the file is not an image. var canTransform = !!atts && supportedDecodingFormats.indexOf(atts.format) != -1; @@ -189,10 +191,10 @@ var plugin = function(schema, options) { var ext = path.extname(styleFilePath); var filenameId = options.filenameId ? selfModel[options.filenameId] : selfModel.id; var storageStylePath = [ options.directory, propertyName, [ filenameId, styleName + ext].join( options.idAsDirectory ? '/':'-') ].join('/'); - if(storageStylePath[0] != '/'){ storageStylePath = '/' + storageStylePath; } + if (storageStylePath[0] != '/'){ storageStylePath = '/' + storageStylePath; } fs.stat(styleFilePath, function(err, stats) { - if(err) return cb(err); + if (err) return cb(err); cb(null, { style: { name: styleName, @@ -241,11 +243,11 @@ var plugin = function(schema, options) { // invoke 'convert' im.convert(convertArgs, function(err, stdout, stderr) { - if(err) return cb(err); + if (err) return cb(err); // run identify in the styled image im.identify(styleFilePath, function(err, atts) { - if(err) return cb(err); + if (err) return cb(err); finishConversion(styleFilePath, atts, cb); }); }); @@ -264,7 +266,7 @@ var plugin = function(schema, options) { }); // for each style async.parallel(tasks, function(err, convertResults) { - if(err) return cb(err); + if (err) return cb(err); //console.log(convertResults); tasks = []; @@ -273,7 +275,7 @@ var plugin = function(schema, options) { // tell the provider to create or replace the attachment providerInstance.createOrReplace(convertResult, function(err, attachment) { - if(err) return cb(err); + if (err) return cb(err); cb(null, attachment); }); @@ -281,11 +283,11 @@ var plugin = function(schema, options) { }); async.parallel(tasks, function(err, storageResults) { - if(err) return cb(err); + if (err) return cb(err); // Finally Update the Model var propModel = selfModel[propertyName]; - if(storageResults.length > 0) { // only update the model if a transformation was performed. + if (storageResults.length > 0) { // only update the model if a transformation was performed. storageResults.forEach(function(styleStorage) { var modelStyle = propModel[styleStorage.style.name]; modelStyle.defaultUrl = styleStorage.defaultUrl; @@ -295,7 +297,7 @@ var plugin = function(schema, options) { modelStyle.ctime = styleStorage.stats.ctime; modelStyle.mtime = styleStorage.stats.mtime; modelStyle.oname = attachmentInfo.name; // original name of the file - if(atts) { + if (atts) { modelStyle.format = styleStorage.features.format; modelStyle.depth = styleStorage.features.depth; modelStyle.dims.h = styleStorage.features.height; @@ -332,8 +334,8 @@ plugin.StorageProvider = StorageProvider; // Method to Register Storage Providers plugin.registerStorageProvider = function(name, provider) { - if(typeof(name) !== 'string') throw new Error('storage engine name is required'); - if(provider && provider._super == StorageProvider) throw new Error('provider is not valid. it does not inherits from StorageEngine'); + if (typeof(name) !== 'string') throw new Error('storage engine name is required'); + if (provider && provider._super == StorageProvider) throw new Error('provider is not valid. it does not inherits from StorageEngine'); providersRegistry[name] = provider; }; From 4b33166e4512ec7c6dc5c147b8d295eda754e7b7 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 11:34:06 +0900 Subject: [PATCH 19/28] Main functionality is now working using gm. --- lib/attachments.js | 277 ++++++++++++++--------------- package.json | 4 +- test/bootstrap.js | 7 +- test/fixtures/mongodb-original.png | Bin 0 -> 1557 bytes test/path.spec.js | 2 +- test/resampling.spec.js | 2 +- 6 files changed, 148 insertions(+), 144 deletions(-) create mode 100644 test/fixtures/mongodb-original.png diff --git a/lib/attachments.js b/lib/attachments.js index f197d96..2a1a9be 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -22,6 +22,7 @@ var im = require('imagemagick'); var gm = require('gm'); var fs = require('fs'); var path = require('path'); +var _ = require('lodash'); var async = require('async'); var existsFn = fs.exists || path.exists; var Q = require('q'); @@ -99,7 +100,8 @@ var plugin = function(schema, options) { if (typeof(options.directory) !== 'string') throw new Error('option "directory" is required'); if (typeof(options.properties) !== 'object') throw new Error('option "properties" is required'); if (typeof(options.storage) !== 'object') throw new Error('option "storage" is required'); - if (typeof(options.idAsDirectory) !== 'boolean') options.idAsDirectory = false; + _.defaults(options, { idAsDirectory: false, gm: {} }); + _.defaults(options.gm, { imageMagick: true }); var storageOptions = options.storage; storageOptions.schema = schema; @@ -126,10 +128,12 @@ var plugin = function(schema, options) { var styles = propertyOptions.styles || {}; var styleNames = Object.keys(styles); - if (styleNames.length == 0) throw new Error('property "' + propertyName + '" needs to define at least one style'); + + if (styleNames.length === 0) throw new Error('property "' + propertyName + '" needs to define at least one style'); var addOp = {}; var propSchema = addOp[propertyName] = {}; + styleNames.forEach(function(styleName) { propSchema[styleName] = { size: Number, // Size of the File @@ -155,14 +159,17 @@ var plugin = function(schema, options) { // Finally we set the method 'attach' // => propertyName: String. Name of the property to attach the file to. // => attachmentInfo: { - // path: String(required). Path to the file in the file system. - // name: String(optional). Original Name of the file. - // mime: String(optional). Mime type of the file. + // path: String(required). Path to the file in the file system. + // name: String(optional). Original Name of the file. + // mime: String(optional). Mime type of the file. + // } schema.methods.attach = function(propertyName, attachmentInfo, cb) { + var selfModel = this; if (propertyNames.indexOf(propertyName) == -1) return cb(new Error('property "' + propertyName + '" was not registered as an attachment property')); var propertyOptions = options.properties[propertyName]; var styles = propertyOptions.styles || {}; + if (!attachmentInfo || typeof(attachmentInfo) !== 'object') return cb(new Error('attachmentInfo is not valid')); if (typeof(attachmentInfo.path) !== 'string') return cb(new Error('attachmentInfo has no valid path')); if (!attachmentInfo.name) { @@ -171,153 +178,145 @@ var plugin = function(schema, options) { } existsFn(attachmentInfo.path, function(exists) { - if (!exists) return cb(new Error('file to attach at path "' + attachmentInfo.path + '" does not exists')); + + if (!exists) { + return cb(new Error('file to attach at path "' + attachmentInfo.path + '" does not exists')); + } + fs.stat(attachmentInfo.path, function(err, stats) { if (!stats.isFile()) return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); - im.identify(attachmentInfo.path, function(err, atts) { - if (err) return cb(new Error('identify didn\'t work. Maybe imagemagick is not installed? "' + err + '"')); - - // if 'identify' fails, that probably means the file is not an image. - var canTransform = !!atts && supportedDecodingFormats.indexOf(atts.format) != -1; - var fileExt = path.extname(attachmentInfo.path); - var styles = propertyOptions.styles || {}; - var styleNames = Object.keys(styles); - - var tasks = []; - var stylesToReset = []; // names of the style that needs to be reset at the end of the process. - styleNames.forEach(function(styleName) { - var styleOptions = styles[styleName] || {}; - var finishConversion = function(styleFilePath, atts, cb) { - var ext = path.extname(styleFilePath); - var filenameId = options.filenameId ? selfModel[options.filenameId] : selfModel.id; - var storageStylePath = [ options.directory, propertyName, [ filenameId, styleName + ext].join( options.idAsDirectory ? '/':'-') ].join('/'); - if (storageStylePath[0] != '/'){ storageStylePath = '/' + storageStylePath; } - - fs.stat(styleFilePath, function(err, stats) { - if (err) return cb(err); - cb(null, { - style: { - name: styleName, - options: styleOptions - }, - filename: styleFilePath, - stats: stats, - propertyName: propertyName, - model: selfModel, - path: storageStylePath, - defaultUrl: null, // let the storage assign this - features: atts - }); - }); - }; - var optionKeys = Object.keys(styleOptions); - var transformationNames = []; - optionKeys.forEach(function(transformationName) { - if (transformationName.indexOf('$') !== 0) { // if is not special command, add it as an special transformation argument - transformationNames.push(transformationName); - } - }); - if (optionKeys.length !== 0) { - if (canTransform) { - var styleFileExt = styleOptions.$format ? ('.' + styleOptions.$format) : fileExt; - var styleFileName = path.basename(attachmentInfo.path, fileExt); - styleFileName += '-' + styleName + styleFileExt; - var styleFilePath = path.join(path.dirname(attachmentInfo.path), styleFileName); - var convertArgs = [attachmentInfo.path]; // source file name - - // add all the transformations args - - transformationNames.forEach(function(transformationName) { - convertArgs.push('-' + transformationName); - if (styleOptions[transformationName] instanceof Array) { - styleOptions[transformationName].forEach(function (arg) { - convertArgs.push(arg); - }); - } else { - convertArgs.push(styleOptions[transformationName]); - } - }); - - convertArgs.push(styleFilePath); - tasks.push(function(cb) { - - // invoke 'convert' - im.convert(convertArgs, function(err, stdout, stderr) { - if (err) return cb(err); - - // run identify in the styled image - im.identify(styleFilePath, function(err, atts) { - if (err) return cb(err); - finishConversion(styleFilePath, atts, cb); - }); - }); - - }); // tasks.push - } else { - stylesToReset.push(styleName); - }// if can decode - } else { - // keep the file as original - tasks.push(function(cb) { - finishConversion(attachmentInfo.path, atts, cb); - }); - } - }); // for each style + // Build the gm image object. we'll use this to build + // the destination image. + var image = gm(attachmentInfo.path).options(options.gm); - async.parallel(tasks, function(err, convertResults) { - if (err) return cb(err); + Q.ninvoke(image, 'format') + .then(function(format) { - //console.log(convertResults); - tasks = []; - convertResults.forEach(function(convertResult) { - tasks.push(function(cb) { + // First we need to check whether or not the format is supported. + // If it's not, throw an error + var canTransform = supportedDecodingFormats.indexOf(format) != -1; + if (!canTransform) { throw new Error('File format: ' + format + ' is not supported.'); } - // tell the provider to create or replace the attachment - providerInstance.createOrReplace(convertResult, function(err, attachment) { - if (err) return cb(err); - cb(null, attachment); - }); + var fileExt = path.extname(attachmentInfo.path); + var styles = propertyOptions.styles || {}; - }); + return Q.all(_.map(styles, function(style, name) { + _.defaults(style, { options: {} }); + + return ( + Q.when(_.isFunction(style.transform) ? style.transform(image) : image) + ).then(function(image) { + return { + image: image, + style: style, + styleName: name, + attachmentInfo: attachmentInfo, + fileExt: fileExt + }; }); - - async.parallel(tasks, function(err, storageResults) { - if (err) return cb(err); - - // Finally Update the Model - var propModel = selfModel[propertyName]; - if (storageResults.length > 0) { // only update the model if a transformation was performed. - storageResults.forEach(function(styleStorage) { - var modelStyle = propModel[styleStorage.style.name]; - modelStyle.defaultUrl = styleStorage.defaultUrl; - modelStyle.path = styleStorage.path; - modelStyle.size = styleStorage.stats.size; - modelStyle.mime = styleStorage.mime; - modelStyle.ctime = styleStorage.stats.ctime; - modelStyle.mtime = styleStorage.stats.mtime; - modelStyle.oname = attachmentInfo.name; // original name of the file - if (atts) { - modelStyle.format = styleStorage.features.format; - modelStyle.depth = styleStorage.features.depth; - modelStyle.dims.h = styleStorage.features.height; - modelStyle.dims.w = styleStorage.features.width; - } - }); - } - - stylesToReset.forEach(function(resetStyleName) { - var path = [propertyName, resetStyleName].join('.'); - selfModel.set(path, null); + })); + + }) + .then(function(variants) { + + // Now write files to the temporary path. + // @todo: in the future, this should probably just pass the gm image + // object to the provider. + return Q.all(_.map(variants, function(variant) { + var styleFileExt = variant.style.options.format ? ('.' + variant.style.options.format) : variant.fileExt; + var styleFileName = path.basename(variant.attachmentInfo.path, variant.fileExt); + styleFileName += '-' + variant.styleName + styleFileExt; + var styleFilePath = path.join(path.dirname(variant.attachmentInfo.path), styleFileName); + + return Q.ninvoke(image, 'write', styleFilePath) + .then(function() { + return _.merge(variant, { styleFilePath: styleFilePath }); + }); + })); + + }) + .then(function(variants) { + + // Pass each individual file off to the registered provider + return Q.all(_.map(variants, function(variant) { + + var ext = path.extname(variant.styleFilePath); + var filenameId = options.filenameId ? selfModel[options.filenameId] : selfModel.id; + var storageStylePath = path.join( + options.directory, + propertyName, + [filenameId, variant.styleName + ext].join(options.idAsDirectory ? '/':'-') + ); + + // Providers expect both stat and identify results for the output image + return Q.all([ + Q.ninvoke(fs, 'stat', variant.styleFilePath), + Q.ninvoke(gm(variant.styleFilePath).options(options.gm), 'identify') + ]) + .spread(function(stats, atts) { + return { + style: { + name: variant.styleName, + options: variant.style + }, + filename: variant.styleFilePath, + stats: stats, + propertyName: propertyName, + model: selfModel, + path: storageStylePath, + defaultUrl: null, // let the storage assign this + features: atts + }; + }) + .then(function(providerInput) { + return Q.ninvoke(providerInstance, 'createOrReplace', providerInput); + }) + .then(function(storageResult) { + return _.merge(variant, { + storageResult: storageResult, + propertyName: propertyName }); - - cb(null); }); + })); + + }) + .then(function(variants) { + + _.forEach(variants, function(variant) { + var propModel = selfModel[variant.propertyName]; + var modelStyle = propModel[variant.storageResult.style.name]; + + modelStyle.defaultUrl = variant.storageResult.defaultUrl; + modelStyle.path = variant.storageResult.path; + modelStyle.size = variant.storageResult.stats.size; + modelStyle.mime = variant.storageResult.mime; + modelStyle.ctime = variant.storageResult.stats.ctime; + modelStyle.mtime = variant.storageResult.stats.mtime; + modelStyle.oname = variant.attachmentInfo.name; // original name of the file + modelStyle.format = variant.storageResult.features.format; + modelStyle.depth = variant.storageResult.features.depth; + modelStyle.dims.h = variant.storageResult.features.size.height; + modelStyle.dims.w = variant.storageResult.features.size.width; }); - }); + + return variants; + + }) + .then(function() { + // If everything's good, callback. + cb(null); + }) + .fail(function(err) { + return cb(err); + }) + .done(); + }); + }); + }; // method attach }; @@ -339,7 +338,7 @@ plugin.registerStorageProvider = function(name, provider) { providersRegistry[name] = provider; }; -plugin.providersRegistry = providersRegistry; +plugin.findProvider = findProvider; // Register a Known Decoding Format(e.g 'PNG') plugin.registerDecodingFormat = function(name) { diff --git a/package.json b/package.json index 3b25a33..e035da4 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,9 @@ "dependencies": { "async": "0.1.x", "gm": "^1.17.0", - "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis" + "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis", + "lodash": "^2.4.1", + "q": "^1.0.1" }, "devDependencies": { "chai": "^1.9.2", diff --git a/test/bootstrap.js b/test/bootstrap.js index 617d893..b85a771 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -5,9 +5,11 @@ var fs = require('fs'); var path = require('path'); var file = require('file'); var mongoose = require('mongoose'); -var plugin = require('../lib/attachments'); +var plugin = require('../lib/attachments.js'); -if (!plugin.providersRegistry.fakeProvider) { +try { + plugin.findProvider('fakeProvider'); +} catch (err) { var fakeProvider = function(){}; @@ -37,6 +39,7 @@ if (!mongoose.models.User) { UserSchema.plugin(plugin, { directory: path.join(process.cwd(), 'test', 'tmp'), storage: { providerName: 'fakeProvider', options: { } }, + gm: { imageMagick: true, }, properties: { profile: { styles: { original: { } } }, avatar: { diff --git a/test/fixtures/mongodb-original.png b/test/fixtures/mongodb-original.png new file mode 100644 index 0000000000000000000000000000000000000000..f15866079599f0d950f87fe512c7e1cfa1f0f01a GIT binary patch literal 1557 zcmZ{k2~d+q6vr3op&&X{i$_cNIFf>rlO%*sD7i@p`Eqk9nCr^{B*EkZLdI6bTdW6{ z3{WdzJuo1pS`}^UI7$(nK?Q2ZQtOFF>lBY^wRNOl=tZZ~nSJ|q_x=9w?VFw1O-dv^ zEM!3l03b{%5vp-NKVVaX@%c$osS0;{;z%@Bz5F&r^NOUgbA!+GnWkDZ?O3>(&Dn7H69!9g9Wf=tw_v%a`C&pAO_Z~;x-A3Imnd$?f@Lgh4@A51) zBQ1fDp`}>bwVuQJk}kcrNv3JakS=5J$b{{mTBWJ)AP$c4kk-|m?>v;RX_ToNWpZCC zp8;*$s~54N6)RHoo$BJQyyA{Lb%RvdAVoIt1#rx|mI59v5?PhH)UUL4X4?;DD|bp1 zJ0-|wfgm+jRsrW6M9dvpv|X#HPetIVts%BqFpJet(T%xy>V+7MZdFk?juKRJfaj#9p#YW`R!U(Xjv}8Y&l{Tm#R#oO4y|F@o^`7G!uW+`Is8f;69jG=)dyQv$x6yehx}K`D^AkQ-15X z^4uINiNk|IMp?SBvEh5`EPOMqM3UW9>bNyr_IgzOTQaQh16S5`llOr6} z(dt*e{`g-4hs$iYRQ$i-ZuFN3E|3Q*cw82&+~7um)M2oqa)Z@wDuUP)4kek)fmC!h z(mB3VLd3ia-9uVP%izqI)wSV)TLOk)jKw_<})M12Sq03b2K%E#2 zD{<5V==;V`P;qANBxa&C3`ZB|*=D{R#EJQn2)W&X zVihGQn79+Q#A!|I&I+_SxsqIqQ-IE-Gdal&b`r}xCJKC|vnJ)y*nKEqQP?s*|K1+o zFdj8cit5x-V6hjYc>h$L2X%X>P6K8$IH^Lk3@vt*1X`sk4W^<%vs8!6X?3|gDA|Bv o29qri^iVO>gHbJZFIMXQ3o#oh_ Date: Mon, 3 Nov 2014 11:41:54 +0900 Subject: [PATCH 20/28] Restructure and cleanup. --- lib/attachments.js | 57 ++++++++++++++++++----------------------- lib/storage_provider.js | 14 ++++++++++ 2 files changed, 39 insertions(+), 32 deletions(-) create mode 100644 lib/storage_provider.js diff --git a/lib/attachments.js b/lib/attachments.js index 2a1a9be..a1c8ed9 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -1,3 +1,5 @@ +/* jshint node:true */ + // Copyright (c) 2011-2013 Firebase.co - http://www.firebase.co // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,6 +20,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +'use strict'; + var im = require('imagemagick'); var gm = require('gm'); var fs = require('fs'); @@ -107,10 +111,9 @@ var plugin = function(schema, options) { storageOptions.schema = schema; if (typeof(storageOptions.providerName) !== 'string') throw new Error('option "storage.providerName" is required'); - var providerPrototype = findProvider(storageOptions.providerName); - + var ProviderPrototype = findProvider(storageOptions.providerName); var providerOptions = storageOptions.options || {}; - var providerInstance = new providerPrototype(providerOptions); + var providerInstance = new ProviderPrototype(providerOptions); if (typeof providerInstance.getUrl !== 'function') { throw new Error('Provider ' + storageOptions.providerName + ' does not have a method getUrl'); @@ -288,29 +291,28 @@ var plugin = function(schema, options) { var propModel = selfModel[variant.propertyName]; var modelStyle = propModel[variant.storageResult.style.name]; - modelStyle.defaultUrl = variant.storageResult.defaultUrl; - modelStyle.path = variant.storageResult.path; - modelStyle.size = variant.storageResult.stats.size; - modelStyle.mime = variant.storageResult.mime; - modelStyle.ctime = variant.storageResult.stats.ctime; - modelStyle.mtime = variant.storageResult.stats.mtime; - modelStyle.oname = variant.attachmentInfo.name; // original name of the file - modelStyle.format = variant.storageResult.features.format; - modelStyle.depth = variant.storageResult.features.depth; - modelStyle.dims.h = variant.storageResult.features.size.height; - modelStyle.dims.w = variant.storageResult.features.size.width; + _.merge(modelStyle, { + defaultUrl: variant.storageResult.defaultUrl, + path: variant.storageResult.path, + size: variant.storageResult.stats.size, + mime: variant.storageResult.mime, + ctime: variant.storageResult.stats.ctime, + mtime: variant.storageResult.stats.mtime, + oname: variant.attachmentInfo.name, // original name of the file + format: variant.storageResult.features.format, + depth: variant.storageResult.features.depth, + dims: { + h: variant.storageResult.features.size.height, + w: variant.storageResult.features.size.width, + } + }); }); return variants; }) - .then(function() { - // If everything's good, callback. - cb(null); - }) - .fail(function(err) { - return cb(err); - }) + .then(function() { cb(null); }) + .fail(function(err) { return cb(err); }) .done(); }); @@ -320,21 +322,12 @@ var plugin = function(schema, options) { }; // method attach }; -// Prototype for Storage Providers -function StorageProvider(options) { - this.options = options; -} - -StorageProvider.prototype.update = function(attachment, cb) { - throw new Error('method update implemented'); -}; - -plugin.StorageProvider = StorageProvider; +plugin.StorageProvider = require('./storage_provider.js'); // Method to Register Storage Providers plugin.registerStorageProvider = function(name, provider) { if (typeof(name) !== 'string') throw new Error('storage engine name is required'); - if (provider && provider._super == StorageProvider) throw new Error('provider is not valid. it does not inherits from StorageEngine'); + if (provider && provider._super == plugin.StorageProvider) throw new Error('provider is not valid. it does not inherits from StorageEngine'); providersRegistry[name] = provider; }; diff --git a/lib/storage_provider.js b/lib/storage_provider.js new file mode 100644 index 0000000..129872e --- /dev/null +++ b/lib/storage_provider.js @@ -0,0 +1,14 @@ +/* jshint node:true */ + +'use strict'; + +// Prototype for Storage Providers +function StorageProvider(options) { + this.options = options; +} + +StorageProvider.prototype.update = function(attachment, cb) { + throw new Error('method update implemented'); +}; + +module.exports = StorageProvider; From fa5b4bfc228c17fa90a09fe3c8d8a361745d6bd8 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 11:49:09 +0900 Subject: [PATCH 21/28] testFindImageMagickFormats belongs simply in test_formats.js --- test_formats.js | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 test_formats.js diff --git a/test_formats.js b/test_formats.js new file mode 100644 index 0000000..01a8c07 --- /dev/null +++ b/test_formats.js @@ -0,0 +1,74 @@ +/* jshint node: true */ + +'use strict'; + +var plugin = require('./lib/attachments.js'); + +plugin.registerImageMagickDecodingFormats(); + +plugin.registerImageMagickFormats({ read: true }, function(error, formats) { + if (error) console.log(error); + else { + if (formats.indexOf('DOT') >= 0) { + throw new Error ('DOT has no blob,read,write,multi support'); + } + if (formats.indexOf('XPS') < 0) { + throw new Error ('XPS has read support'); + } + if (formats.indexOf('UIL') >= 0) { + throw new Error ('UIL has no read,multi support'); + } + console.log("read support passed"); + } +}); + +plugin.registerImageMagickFormats({ write: true }, function(error, formats) { + if (error) console.log(error); + else { + if (formats.indexOf('DOT') >= 0) { + throw new Error ('DOT has no blob,read,write,multi support'); + } + if (formats.indexOf('XPS') >= 0) { + throw new Error ('XPS has no write,multi support'); + } + if (formats.indexOf('UIL') < 0) { + throw new Error ('UIL has write support'); + } + console.log("write support passed"); + } +}); + +plugin.registerImageMagickFormats({ write: true, blob: true }, function(error, formats) { + if (error) console.log(error); + else { + if (formats.indexOf('DOT') >= 0) { + throw new Error ('DOT has no blob,read,write,multi support'); + } + if (formats.indexOf('WMV') >= 0) { + throw new Error ('XPS has write but no blob support'); + } + if (formats.indexOf('UIL') < 0) { + throw new Error ('UIL has write and blob support'); + } + console.log("write and blob support passed"); + } +}); + +plugin.registerImageMagickFormats({ read: true, multi: true }, function(error, formats) { + if (error) console.log(error); + else { + if (formats.indexOf('DOT') >= 0) { + throw new Error ('DOT has no blob,read,write,multi support'); + } + if (formats.indexOf('XPS') >= 0) { + throw new Error ('XPS has read but no multi support'); + } + if (formats.indexOf('UIL') >= 0) { + throw new Error ('UIL has no read,multi support'); + } + if (formats.indexOf('X') < 0) { + throw new Error ('X has read and multi support'); + } + console.log("read and multi support passed"); + } +}); From 5734f7604672fe8de3068a6b3f226dd6b8739bef Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 11:53:33 +0900 Subject: [PATCH 22/28] Revert "testFindImageMagickFormats belongs simply in test_formats.js" This reverts commit fa5b4bfc228c17fa90a09fe3c8d8a361745d6bd8. --- test_formats.js | 74 ------------------------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 test_formats.js diff --git a/test_formats.js b/test_formats.js deleted file mode 100644 index 01a8c07..0000000 --- a/test_formats.js +++ /dev/null @@ -1,74 +0,0 @@ -/* jshint node: true */ - -'use strict'; - -var plugin = require('./lib/attachments.js'); - -plugin.registerImageMagickDecodingFormats(); - -plugin.registerImageMagickFormats({ read: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') < 0) { - throw new Error ('XPS has read support'); - } - if (formats.indexOf('UIL') >= 0) { - throw new Error ('UIL has no read,multi support'); - } - console.log("read support passed"); - } -}); - -plugin.registerImageMagickFormats({ write: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') >= 0) { - throw new Error ('XPS has no write,multi support'); - } - if (formats.indexOf('UIL') < 0) { - throw new Error ('UIL has write support'); - } - console.log("write support passed"); - } -}); - -plugin.registerImageMagickFormats({ write: true, blob: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('WMV') >= 0) { - throw new Error ('XPS has write but no blob support'); - } - if (formats.indexOf('UIL') < 0) { - throw new Error ('UIL has write and blob support'); - } - console.log("write and blob support passed"); - } -}); - -plugin.registerImageMagickFormats({ read: true, multi: true }, function(error, formats) { - if (error) console.log(error); - else { - if (formats.indexOf('DOT') >= 0) { - throw new Error ('DOT has no blob,read,write,multi support'); - } - if (formats.indexOf('XPS') >= 0) { - throw new Error ('XPS has read but no multi support'); - } - if (formats.indexOf('UIL') >= 0) { - throw new Error ('UIL has no read,multi support'); - } - if (formats.indexOf('X') < 0) { - throw new Error ('X has read and multi support'); - } - console.log("read and multi support passed"); - } -}); From 44e47fd9d3398952d280ac8488c1e2fb7567f5f9 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 11:54:52 +0900 Subject: [PATCH 23/28] Remove logic that derives logic from imagemagick - seems overkill --- lib/attachments.js | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index a1c8ed9..6ff8d60 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -338,36 +338,5 @@ plugin.registerDecodingFormat = function(name) { supportedDecodingFormats.push(name); }; -/* - * Use this to register all formats for which your local ImageMagick installation supports - * read operations. - */ -plugin.registerImageMagickDecodingFormats = function() { - plugin.registerImageMagickFormats({ read: true }); -}; - -/* - * You can register formats based on certain modes or a combination of those: - * 'read' : true|false - * 'write': true|false - * 'multi': true|false - * 'blob' : true|false - * options is optional and defaults to { read: true }. If several modes with value true are given, - * only formats supporting all of them are included. - */ -plugin.registerImageMagickFormats = function(options, callback) { - if (!callback) { - callback = function(error, formats) { - if (error) throw new Error(error); - else if (formats && formats.length > 0) { - supportedDecodingFormats = formats; - } else { - throw new Error("No formats supported for decoding!"); - } - }; - } - findImageMagickFormats(options, callback); -}; - // Export the Plugin for mongoose.js module.exports = plugin; From 7b13f139953046d8ea8268e7a861f3d216e37d38 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 15:40:38 +0900 Subject: [PATCH 24/28] Support for non-image files. --- .gitignore | 3 +- lib/attachments.js | 66 ++++++++++++++++++++++++++++----------- test/bootstrap.js | 5 +++ test/fixtures/sample.pdf | Bin 0 -> 218882 bytes test/notimage.spec.js | 16 ++++++++++ 5 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 test/fixtures/sample.pdf create mode 100644 test/notimage.spec.js diff --git a/.gitignore b/.gitignore index 5c5f717..6bbe58a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ results node_modules test/tmp/* -test/fixtures/mongodb-thumbnail.png +test/fixtures/*-thumbnail* +test/fixtures/*-original* diff --git a/lib/attachments.js b/lib/attachments.js index 6ff8d60..94f9883 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -132,7 +132,9 @@ var plugin = function(schema, options) { var styles = propertyOptions.styles || {}; var styleNames = Object.keys(styles); - if (styleNames.length === 0) throw new Error('property "' + propertyName + '" needs to define at least one style'); + if (styleNames.length === 0) { + throw new Error('property "' + propertyName + '" needs to define at least one style'); + } var addOp = {}; var propSchema = addOp[propertyName] = {}; @@ -187,44 +189,56 @@ var plugin = function(schema, options) { } fs.stat(attachmentInfo.path, function(err, stats) { - if (!stats.isFile()) return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); + + if (!stats.isFile()) { + return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); + } // Build the gm image object. we'll use this to build // the destination image. var image = gm(attachmentInfo.path).options(options.gm); Q.ninvoke(image, 'format') - .then(function(format) { + .then(function(format) { // First we need to check whether or not the format is supported. // If it's not, throw an error - var canTransform = supportedDecodingFormats.indexOf(format) != -1; - if (!canTransform) { throw new Error('File format: ' + format + ' is not supported.'); } + return supportedDecodingFormats.indexOf(format) !== -1; + }) + + .fail(function(err) { + // Failing here means that the file format is not a supported image. + // So return false for `canTransform` + return false; + }) + + .then(function(canTransform) { var fileExt = path.extname(attachmentInfo.path); var styles = propertyOptions.styles || {}; return Q.all(_.map(styles, function(style, name) { - _.defaults(style, { options: {} }); + _.defaults(style, { + options: {}, + transform: function(i) { return i; } + }); - return ( - Q.when(_.isFunction(style.transform) ? style.transform(image) : image) - ).then(function(image) { - return { - image: image, - style: style, - styleName: name, - attachmentInfo: attachmentInfo, - fileExt: fileExt - }; + return Q.when({ + image: canTransform ? style.transform(image) : null, + file: canTransform ? null : fs.createReadStream(attachmentInfo.path), + style: style, + styleName: name, + attachmentInfo: attachmentInfo, + fileExt: fileExt }); })); }) + .then(function(variants) { // Now write files to the temporary path. - // @todo: in the future, this should probably just pass the gm image + // @todo: in the future, this should probably just pass the gm image/stream // object to the provider. return Q.all(_.map(variants, function(variant) { var styleFileExt = variant.style.options.format ? ('.' + variant.style.options.format) : variant.fileExt; @@ -232,13 +246,23 @@ var plugin = function(schema, options) { styleFileName += '-' + variant.styleName + styleFileExt; var styleFilePath = path.join(path.dirname(variant.attachmentInfo.path), styleFileName); - return Q.ninvoke(image, 'write', styleFilePath) + return ( + variant.image ? + Q.ninvoke(variant.image, 'write', styleFilePath) : + (function() { + var deferred = Q.defer(); + variant.file.pipe(fs.createWriteStream(styleFilePath)) + .on('finish', deferred.resolve); + return deferred.promise; + })() + ) .then(function() { return _.merge(variant, { styleFilePath: styleFilePath }); }); })); }) + .then(function(variants) { // Pass each individual file off to the registered provider @@ -256,6 +280,7 @@ var plugin = function(schema, options) { return Q.all([ Q.ninvoke(fs, 'stat', variant.styleFilePath), Q.ninvoke(gm(variant.styleFilePath).options(options.gm), 'identify') + .fail(function() { return null; }) ]) .spread(function(stats, atts) { return { @@ -285,6 +310,7 @@ var plugin = function(schema, options) { })); }) + .then(function(variants) { _.forEach(variants, function(variant) { @@ -299,18 +325,20 @@ var plugin = function(schema, options) { ctime: variant.storageResult.stats.ctime, mtime: variant.storageResult.stats.mtime, oname: variant.attachmentInfo.name, // original name of the file + }, variant.storageResult.features ? { format: variant.storageResult.features.format, depth: variant.storageResult.features.depth, dims: { h: variant.storageResult.features.size.height, w: variant.storageResult.features.size.width, } - }); + } : {}); }); return variants; }) + .then(function() { cb(null); }) .fail(function(err) { return cb(err); }) .done(); diff --git a/test/bootstrap.js b/test/bootstrap.js index b85a771..f0e73fc 100644 --- a/test/bootstrap.js +++ b/test/bootstrap.js @@ -41,6 +41,11 @@ if (!mongoose.models.User) { storage: { providerName: 'fakeProvider', options: { } }, gm: { imageMagick: true, }, properties: { + document: { + styles: { + original: {} + } + }, profile: { styles: { original: { } } }, avatar: { styles: { diff --git a/test/fixtures/sample.pdf b/test/fixtures/sample.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f8996f6a8c00882da3607ef310ea34e5d65f598 GIT binary patch literal 218882 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\vQ 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�J+6+SsJpRTVs|CmELZdFga6>hV; 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 G Date: Mon, 3 Nov 2014 15:41:40 +0900 Subject: [PATCH 25/28] Remove imagemagick dependency. --- lib/attachments.js | 51 ---------------------------------------------- package.json | 1 - 2 files changed, 52 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index 94f9883..117760c 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -22,7 +22,6 @@ 'use strict'; -var im = require('imagemagick'); var gm = require('gm'); var fs = require('fs'); var path = require('path'); @@ -47,56 +46,6 @@ function findProvider(name) { return provider; } -function findImageMagickFormats(options, callback) { - var opts = { read: true }; - if (typeof options === 'function') { - callback = options; - } else if (options.read || options.write || options.multi || options.blob ) { - opts = options; - } else { - callback(new Error("Options have to contain one or more of 'read', 'write', 'multi', 'blob'")); - } - im.convert(['-list','format'], function(err, stdout, stderr) { - if (err) return callback(err); - if (stderr && stderr.search(/\S/) >= 0) return callback(new Error(stderr)); - if (stdout && stdout.search(/\S/) >= 0) { - // capture groups: - // 0: all - // 1: format - // 2: if '*' = native blob support; if ' ' (whitespace) none. Not set with graphicsmagick - therefore optional in regex - // 3: module - // 4: if 'r' = read support; if '-' none - // 5: if 'w' = write support; if '-' none - // 6: if '+' = support for multiple images; if '-' none - // 7: description - var regex = /^\s*([^\*\s]+)(\*|\s)?\s(\S+)\s+([-r])([-w])([-+])\s+(.*)$/; - var lines = stdout.split("\n"); - var comps = []; - var formats = []; - var i, currentLine; - for (i in lines) { - currentLine = lines[i]; - comps = regex.exec(currentLine); - if (comps) { - if ((!opts.read || comps[4] === 'r') && - (!opts.write || comps[5] === 'w') && - (!opts.multi || comps[6] === '+') && - (!opts.blob || comps[2] === '*')) { - formats.push(comps[1]); - } - } - } - return callback(null,formats); - } else { - return callback(new Error( - "No format supports the requested operation(s): " + - Object.keys(opts).toString() + - " . Check 'convert -list format'" - )); - } - }); -} - var plugin = function(schema, options) { options = options || {}; diff --git a/package.json b/package.json index e035da4..c3063b9 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "dependencies": { "async": "0.1.x", "gm": "^1.17.0", - "imagemagick": "git://github.com/nathankot/node-imagemagick.git#wedis", "lodash": "^2.4.1", "q": "^1.0.1" }, From 6137822bd845d70a9832f2b33b87edaa86afe8e2 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 16:06:49 +0900 Subject: [PATCH 26/28] Remove some stuff. --- README.md | 39 --------------------------------------- 1 file changed, 39 deletions(-) diff --git a/README.md b/README.md index f6cd697..5dc30e3 100644 --- a/README.md +++ b/README.md @@ -245,45 +245,6 @@ To add a format call the following method before using the plugin in the mongoos attachments.registerDecodingFormat('BMP'); ``` -##### Formats Provided by ImageMagick - -ImageMagick (or GraphicsMagick) list the supported formats when calling `convert -list format` (or `identify`). -The formats are flagged to show which operations are supported with each: - -* `*` native blob support (only ImageMagick, not GraphicsMagick) -* `r` read support -* `w` write support -* `+` support for multiple images - -You can register the formats that are supported for read operation like so: - -```javascript -attachments.registerImageMagickDecodingFormats(); -``` - -To register formats supporting different operations there is a more general function. Specifying certain operations will select only those formats that support all of them. Formats supporting only a subset won't be included. The following call yields the list of formats that support `read`,`write`,`multi`: - -```javascript -attachments.registerImageMagickFormats({ read: true, write: true, multi: true }); -``` - -If you want to use the output list that was generated for your own benefit you can specify a callback as second argument to that above method. Note, however, that in that case the supported decoding formats won't be changed on the plugin. - -You could use that callback to assure that the formats you want your client to support are indeed supported by the backing ImageMagick (or GraphicsMagick) installation. For example, checking TIFF support: - -```javascript -attachments.registerImageMagickFormats({ read: true }, function(error, formats) { - if (error) throw new Error(error); - else if (formats && formats.length > 0) { - if (formats.indexOf('TIFF') < 0) { - throw new Error('No TIFF support!'); - } - } else { - throw new Error("No formats supported for decoding!"); - } -}); -``` - ### Contributors * [Johan Hernandez](https://github.com/thepumpkin1979) From e5abb5863cc7950bd71d99c24e7acddc54064fc0 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 16:42:48 +0900 Subject: [PATCH 27/28] Need to prefix storage style path with slash. --- lib/attachments.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/attachments.js b/lib/attachments.js index 117760c..f4efa48 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -225,6 +225,10 @@ var plugin = function(schema, options) { [filenameId, variant.styleName + ext].join(options.idAsDirectory ? '/':'-') ); + if (storageStylePath[0] != '/') { + storageStylePath = '/' + storageStylePath; + } + // Providers expect both stat and identify results for the output image return Q.all([ Q.ninvoke(fs, 'stat', variant.styleFilePath), From 939cf947956811b5c387d19bbfd34033ea089849 Mon Sep 17 00:00:00 2001 From: Nathan Kot Date: Mon, 3 Nov 2014 17:29:30 +0900 Subject: [PATCH 28/28] Subclass gm, dont mix image objects. --- lib/attachments.js | 13 +++++-------- test/fixtures/mongodb-original.png | Bin 1557 -> 2965 bytes 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/attachments.js b/lib/attachments.js index f4efa48..0062666 100644 --- a/lib/attachments.js +++ b/lib/attachments.js @@ -22,7 +22,7 @@ 'use strict'; -var gm = require('gm'); +var gmSuper = require('gm'); var fs = require('fs'); var path = require('path'); var _ = require('lodash'); @@ -56,6 +56,8 @@ var plugin = function(schema, options) { _.defaults(options, { idAsDirectory: false, gm: {} }); _.defaults(options.gm, { imageMagick: true }); + var gm = gmSuper.subClass(options.gm); + var storageOptions = options.storage; storageOptions.schema = schema; @@ -143,12 +145,7 @@ var plugin = function(schema, options) { return cb(new Error('path to attach from "' + attachmentInfo.path + '" is not a file')); } - // Build the gm image object. we'll use this to build - // the destination image. - var image = gm(attachmentInfo.path).options(options.gm); - - Q.ninvoke(image, 'format') - + Q.ninvoke(gm(attachmentInfo.path), 'format') .then(function(format) { // First we need to check whether or not the format is supported. // If it's not, throw an error @@ -173,7 +170,7 @@ var plugin = function(schema, options) { }); return Q.when({ - image: canTransform ? style.transform(image) : null, + image: canTransform ? style.transform(gm(attachmentInfo.path)) : null, file: canTransform ? null : fs.createReadStream(attachmentInfo.path), style: style, styleName: name, diff --git a/test/fixtures/mongodb-original.png b/test/fixtures/mongodb-original.png index f15866079599f0d950f87fe512c7e1cfa1f0f01a..e3d0848fe6eb5a02d7172d07946a7cff75bad169 100644 GIT binary patch delta 2837 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 literal 1557 zcmZ{k2~d+q6vr3op&&X{i$_cNIFf>rlO%*sD7i@p`Eqk9nCr^{B*EkZLdI6bTdW6{ z3{WdzJuo1pS`}^UI7$(nK?Q2ZQtOFF>lBY^wRNOl=tZZ~nSJ|q_x=9w?VFw1O-dv^ zEM!3l03b{%5vp-NKVVaX@%c$osS0;{;z%@Bz5F&r^NOUgbA!+GnWkDZ?O3>(&Dn7H69!9g9Wf=tw_v%a`C&pAO_Z~;x-A3Imnd$?f@Lgh4@A51) zBQ1fDp`}>bwVuQJk}kcrNv3JakS=5J$b{{mTBWJ)AP$c4kk-|m?>v;RX_ToNWpZCC zp8;*$s~54N6)RHoo$BJQyyA{Lb%RvdAVoIt1#rx|mI59v5?PhH)UUL4X4?;DD|bp1 zJ0-|wfgm+jRsrW6M9dvpv|X#HPetIVts%BqFpJet(T%xy>V+7MZdFk?juKRJfaj#9p#YW`R!U(Xjv}8Y&l{Tm#R#oO4y|F@o^`7G!uW+`Is8f;69jG=)dyQv$x6yehx}K`D^AkQ-15X z^4uINiNk|IMp?SBvEh5`EPOMqM3UW9>bNyr_IgzOTQaQh16S5`llOr6} z(dt*e{`g-4hs$iYRQ$i-ZuFN3E|3Q*cw82&+~7um)M2oqa)Z@wDuUP)4kek)fmC!h z(mB3VLd3ia-9uVP%izqI)wSV)TLOk)jKw_<})M12Sq03b2K%E#2 zD{<5V==;V`P;qANBxa&C3`ZB|*=D{R#EJQn2)W&X zVihGQn79+Q#A!|I&I+_SxsqIqQ-IE-Gdal&b`r}xCJKC|vnJ)y*nKEqQP?s*|K1+o zFdj8cit5x-V6hjYc>h$L2X%X>P6K8$IH^Lk3@vt*1X`sk4W^<%vs8!6X?3|gDA|Bv o29qri^iVO>gHbJZFIMXQ3o#oh_