Skip to content

Instantly share code, notes, and snippets.

@zolazhou
Last active December 20, 2015 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save zolazhou/6051879 to your computer and use it in GitHub Desktop.
Save zolazhou/6051879 to your computer and use it in GitHub Desktop.
database access wrapper API proposal
# Define database connection
Discover.define 'repo',
name: 'default'
provider:
type: 'mysql'
options:
host: 'localhost'
port: 3306
password: '123123'
user: 'root'
database: 'test'
Discover.define 'repo',
name: 'pg'
provider:
type: 'postgresql'
options:
host: 'localhost'
port: 3306
password: '123123'
user: 'root'
database: 'test'
Discover.define 'cache',
name: 'default'
provider:
name: 'redis'
options:
host: 'localhost'
port: 6379
# Define an model
User = new Model
meta:
table: 'users'
repo: 'pg' # default repo name is 'default'
cache: 'default' # set to false to disable caching
fields: [
{name: 'userId', type: 'string', column: 'user_id', required: true}
{name: 'email', type: 'string', validator: 'email'}
{name: 'age', type: 'integer', validator: new IntegerValidator(10, 100)}
{name: 'extra', type: 'json'}
{name: 'created', type: 'timestamp'}
]
indices: [
{name: 'pk', fields: ['userId'], unique: true}
{name: 'email', fields: ['email'], unique: true}
]
sayHi: () ->
console.log 'hi'
# Creating instance
user = new User
userId: 23
email: 'zolazhou@gmail.com'
age: 30
promise = user.save()
# Updating attributes
user.age = 31
user.extra = { nick: 'zola' }
promise = user.update()
# Deleting instance
promise = user.delete()
# Query
promise = User.find(userId: 123).first()
promise = User.find(age: 30, created__gt: 2334343).first()
promise = User.find('age > ? and created > ?', [30, 234242])
.orderBy('created').desc()
.list(0, 10)
promise = User.find('age > :age and created > :created')
.set(age: 30, created: 1234324234)
.orderBy('created').desc()
.list(0, 10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment