1.0.0 • Published 10 years ago
koop-provider v1.0.0
koop-provider
Koop provider toolkit
Use this to create a provider module for Koop.
Install
npm install -S koop-providerUsage
Provides methods for creating koop providers, models, and controllers.
provider(options)
To create a koop provider:
var pkg = require('./package')
var provider = require('koop-provider')
var myProvider = provider({
  name: 'providerName',
  version: pkg.version,
  model: require('./model'),
  controller: require('./controller'),
  routes: require('./routes')
})
module.exports = myProviderA type of 'provider' is automatically set (cannot be overridden).
Required settings:
- name: provider name
- version: provider version (from package.json)
- model: provider model method
- controller: provider controller method
- routes: provider routes module
Optional settings:
- hosts: boolean flag indicating whether or not this provider supports multiple instances (e.g. socrata data can be hosted in many socrata instances, github gist data is always on gist.github.com)
provider.model(koop)
To create a model:
var provider = require('koop-provider')
/**
 * creates new model with access to koop instance
 *
 * @param {Object} koop - instance of koop app
 */
function myModel (koop) {
  var model = provider.model(koop)
  var TABLE_NAME = 'my_table'
  model.config = koop.config
  // model methods, e.g.
  /**
   * Method for retrieving data by ID.
   *
   * @param {object} options - id (required), query (optional)
   * @param {function} callback - err, geojson
   */
  model.find = function (options, callback) {
    var id = options.id
    var query = options.query || {}
    koop.Cache.get(TABLE_NAME, id, query, function (err, entry) {
      if (!err) return callback(null, entry)
      // retrieve data, insert into cache, fire callback with `(err, geojson)`
    })
  }
  return model
}
module.exports = myModelMethods inherited from base model:
- log
- files
- cacheDir
- exportToFormat
- exportLarge
- exportFile
- finishExport
- parseSpatialReference
- tileGet
- plugin
- generateThumbnail
- getImageServiceTile
- getServiceTile
- getGeoHash
- saveFile
- getCount
- getExtent
provider.controller()
To create a controller:
var provider = require('koop-provider')
/**
 * creates new controller
 *
 * @param {object} model - instance of model
 */
function myController (model) {
  var ctrl = provider.controller()
  // controller methods, e.g.
  /**
   * renders index view
   *
   * @param {object} req - incoming request object
   * @param {object} res - outgoing response object
   */
  ctrl.index = function (req, res) {
    res.render(__dirname + '/../views/index', {
      baseUrl: req.baseUrl
    })
  }
  return ctrl
}
module.exports = myControllerMethods inherited from base controller:
- errorResponse
- processFeatureServer
Routes
The routes file in a koop provider maps http verbs and routes to controller methods.
Example from koop-gist:
module.exports = {
  'get /gist': 'index',
  'get /gist/rate_limit': 'rate_limit',
  'get /gist/raw/:id': 'find',
  'get /gist/raw/:id/:layer': 'find',
  'get /gist/:id': 'find',
  'get /gist/:id.:format': 'find',
  'get /gist/:id/preview': 'preview',
  'get /gist/:id/FeatureServer': 'featureservice',
  'get /gist/:id/FeatureServer/:layer': 'featureservice',
  'get /gist/:id/FeatureServer/:layer/:method': 'featureservice'
}Test
koop-provider uses tape for testing.
npm testLicense
1.0.0
10 years ago
1.0.0-beta
10 years ago
1.0.0-alpha.4
10 years ago
1.0.0-alpha.3
10 years ago
1.0.0-alpha.2
10 years ago
1.0.0-alpha.1
10 years ago
1.0.0-alpha
10 years ago