diff --git a/lib/cartodb/controllers/layergroup.js b/lib/cartodb/controllers/layergroup.js index f46bcecf..c81f7af5 100644 --- a/lib/cartodb/controllers/layergroup.js +++ b/lib/cartodb/controllers/layergroup.js @@ -3,8 +3,7 @@ var step = require('step'); var cors = require('../middleware/cors'); -var windshaft = require('windshaft'); -var MapStoreMapConfigProvider = windshaft.model.provider.MapStoreMapConfig; +var MapStoreMapConfigProvider = require('../models/mapconfig/map_store_provider'); /** * @param app diff --git a/lib/cartodb/models/mapconfig/map_store_provider.js b/lib/cartodb/models/mapconfig/map_store_provider.js new file mode 100644 index 00000000..e970614f --- /dev/null +++ b/lib/cartodb/models/mapconfig/map_store_provider.js @@ -0,0 +1,56 @@ +var _ = require('underscore'); +var dot = require('dot'); + +/** + * @param {MapStore} mapStore + * @param {Object} params + * @constructor + * @type {MapStoreMapConfigProvider} + */ +function MapStoreMapConfigProvider(mapStore, params) { + this.mapStore = mapStore; + this.params = params; + this.token = params.token; + this.cacheBuster = params.cache_buster || 0; +} + +module.exports = MapStoreMapConfigProvider; + +MapStoreMapConfigProvider.prototype.getMapConfig = function(callback) { + var self = this; + this.mapStore.load(this.token, function(err, mapConfig) { + return callback(err, mapConfig, self.params, {}); + }); +}; + +MapStoreMapConfigProvider.prototype.getKey = function() { + return this.createKey(false); +}; + +MapStoreMapConfigProvider.prototype.getCacheBuster = function() { + return this.cacheBuster; +}; + +MapStoreMapConfigProvider.prototype.filter = function(key) { + var regex = new RegExp('^' + this.createKey(true) + '.*'); + return key && key.match(regex); +}; + +// Configure bases for cache keys suitable for string interpolation +var baseKey = '{{=it.dbname}}:{{=it.token}}'; +var rendererKey = baseKey + ':{{=it.dbuser}}:{{=it.format}}:{{=it.layer}}:{{=it.scale_factor}}'; + +var baseKeyTpl = dot.template(baseKey); +var rendererKeyTpl = dot.template(rendererKey); + +MapStoreMapConfigProvider.prototype.createKey = function(base) { + var tplValues = _.defaults({}, this.params, { + dbname: '', + token: '', + dbuser: '', + format: '', + layer: '', + scale_factor: 1 + }); + return (base) ? baseKeyTpl(tplValues) : rendererKeyTpl(tplValues); +}; \ No newline at end of file diff --git a/lib/cartodb/models/mapconfig/named_map_provider.js b/lib/cartodb/models/mapconfig/named_map_provider.js index f226e172..ece76731 100644 --- a/lib/cartodb/models/mapconfig/named_map_provider.js +++ b/lib/cartodb/models/mapconfig/named_map_provider.js @@ -6,6 +6,10 @@ var step = require('step'); var MapConfig = require('windshaft').model.MapConfig; var templateName = require('../../backends/template_maps').templateName; +/** + * @constructor + * @type {NamedMapMapConfigProvider} + */ function NamedMapMapConfigProvider(templateMaps, pgConnection, owner, templateId, config, authToken, params) { this.templateMaps = templateMaps; this.pgConnection = pgConnection; @@ -131,7 +135,7 @@ NamedMapMapConfigProvider.prototype.getTemplate = function(callback) { }; NamedMapMapConfigProvider.prototype.getKey = function() { - return this.createKey(); + return this.createKey(false); }; NamedMapMapConfigProvider.prototype.getCacheBuster = function() {