You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.3 KiB
CoffeeScript
98 lines
2.3 KiB
CoffeeScript
Model = require "./model"
|
|
knex = require "knex"
|
|
|
|
class YAORM
|
|
constructor: (options) ->
|
|
@_models = {}
|
|
|
|
if options.knex?
|
|
@knex = options.knex
|
|
else if options.hostname?
|
|
@knex = knex({
|
|
client: switch options.driver
|
|
# Some aliases...
|
|
when "postgres", "postgresql" then "pg"
|
|
when "mysql" then "mysql2"
|
|
else options.driver
|
|
connection:
|
|
host: options.hostname
|
|
user: options.username
|
|
password: options.password
|
|
database: options.database
|
|
charset: options.charset ? "utf8"
|
|
debug: options.debug ? false
|
|
})
|
|
else if options.knexfile?
|
|
knexfile = require "knexfile"
|
|
|
|
if knexfile.connection?
|
|
# Basic configuration
|
|
@knex = knex(knexfile)
|
|
else
|
|
# Environment configuration
|
|
if not options.environment?
|
|
# FIXME: Error
|
|
null
|
|
@knex = knex(knexfile[options.environment])
|
|
else
|
|
# FIXME: Error
|
|
|
|
_registerModel: (model) ->
|
|
model._YAORM = this
|
|
@_models[model.name] = model
|
|
return this
|
|
|
|
_createRelation: (type, options) ->
|
|
options.type = type
|
|
return options
|
|
|
|
loadModel: (modelPath) ->
|
|
# We use the existing model as a prototype, so that we don't run into conflicts if two different YAORM instances were to use the same loaded model.
|
|
baseModel = require(modelPath)
|
|
model = Object.create(baseModel)
|
|
@_registerModel(model)
|
|
|
|
defineModel: (modelName, options) ->
|
|
model = new Model(modelName, options)
|
|
@_registerModel(model)
|
|
|
|
model: (modelName) ->
|
|
return @_models[modelName]
|
|
|
|
express: ->
|
|
return (req, res, next) ->
|
|
null
|
|
next()
|
|
|
|
hasOne: (modelName, options = {}) ->
|
|
if options.foreignKey?
|
|
options.remoteKey = options.foreignKey
|
|
delete options.foreignKey
|
|
|
|
options.modelName = modelName
|
|
@_createRelation "hasOne", options
|
|
|
|
hasMany: (modelName, options = {}) ->
|
|
if options.foreignKey?
|
|
options.remoteKey = options.foreignKey
|
|
delete options.foreignKey
|
|
|
|
options.modelName = modelName
|
|
@_createRelation "hasMany", options
|
|
|
|
belongsTo: (modelName, options = {}) ->
|
|
if options.foreignKey?
|
|
options.localKey = options.foreignKey
|
|
delete options.foreignKey
|
|
|
|
options.modelName = modelName
|
|
@_createRelation "belongsTo", options
|
|
|
|
exportMethod = (options) ->
|
|
return new YAORM(options)
|
|
|
|
exportMethod.defineModel = (modelName, options) ->
|
|
return new Model(modelName, options)
|
|
|
|
module.exports = exportMethod
|