UNPKG

bird-api

Version:
129 lines (102 loc) 2.92 kB
# app/lib Name = require('./models').Name _ = require 'underscore' # meta information settings STAGE = 'development' meta = require('../package.json') host = meta.settings[STAGE].host port = meta.settings[STAGE].port version = meta.version.split('.')[0] ## taxonomies relationships upper_for = family: 'order' genus: 'family' species: 'genus' subspecies: 'species' ## taonomy idioms singular_for = orders: 'order' families: 'family' genuses: 'genus' species: 'species' birds: 'species' # alias subspecies: 'subspecies' getAPIbase = -> "/v#{version}" getAPIurl = (dir) -> "http://#{host}#{if port then ':' + port}#{getAPIbase()}/#{encodeURI dir}" buildBinomen = (species_sc, genus_sc) -> n = genus_sc.length return genus_sc[0].toUpperCase() + genus_sc[1...n].toLowerCase() + ' ' + species_sc.toLowerCase() # find upper taxonomies from db attachUpperTaxonomies = ({name, binomen, taxonomies, reference, fields, callback}) -> unless taxonomies? then taxonomies = [] promise1 = Name .findById reference.upper_id .select fields .exec() promise2 = Name .findById reference.upper_id .exec() Promise.all [promise1, promise2] .then ([upper, ref2Upper]) -> if reference.rank is 'species' binomen = buildBinomen reference.sc, ref2Upper.sc upper_id = reference.upper_id if upper_id? taxonomies.push upper attachUpperTaxonomies { name binomen taxonomies reference:ref2Upper fields callback } else callback {name,binomen, taxonomies} # check if elements in array `A` equal that of `B` atLeastContains = (A, B) -> for a in A for b in B if a is b then return true return false parseQuery = (req) -> #parse `fields` query if req.query.fields? fields = req.query.fields .split ',' .join ' ' else fields = '' # parse `offset` query if req.query.offset? offset = parseInt req.query.offset if offset isnt offset offset = 0 else if offset < 0 then offset = 0 else offset = 0 # parse `limit` query if req.query.limit? limit = parseInt req.query.limit if limit isnt limit limit = false else limit = false # parse `content` query content = req.query.content unless content? then content = '' return { fields, offset, limit, content } module.exports = { host port version getAPIbase getAPIurl attachUpperTaxonomies atLeastContains singular_for parseQuery }