## MAS.ACL

### 构造函数

**constructor(acl: MAS.ACL|Object)**

### 实例方法

**setPublicReadAccess(isRead: number)**
设置公共读取权限

**setPublicWriteAccess(isWrite: number)**
设置公共写入权限

**setReadAccess(obj: MAS.Role|MAS.User, isRead: boolean)**
设置读取权限

**setWriteAccess(obj MAS.Role|MAS.User, isWrite: boolean)**
设置写入权限

**toJSON() ==> object**
返回MAS.ACL对象


## MAS.Object

### 构造函数

**constructor(className: string)**

### 静态方法

**extend(className: string, methods: object) ==> MAS.Object**
返回一个经过扩展的,基于MAS.Object的类
示例:
```
var Post = Object.extend("Post",{
    sayHello: function(){
        alert('hello world!');
    }
});
Post.sayHello(); // hello world!
     
var instance = new Post();
instance = Post.new({
    username: 'zyEros',
    password: 'zyEros'
});
```

**new(className,attributes) ==> MAS.Object**
MAS.Object.extend的快捷方法,返回的是MAS.Object的实例
示例:
```
var post = Object.new('Post',{
    username: 'zyEros',
    password: 'zyEros'
});
```

### 实例方法

**set(attrKey: string, value: any)**

**get(attrKey: string) ==> any**

**toJSON() ==> object**
返回attributes的副本

**setId(id: number)**
设置objectId,若不正确，会导致object无法通过验证

**getId() ==> number**
获取对应的objectId

**setACL(acl: MAS.ACL)**
设置ACL权限
```
var post = MAS.Object.new('Post');
var acl = new MAS.ACL();
post.setACL(acl);
```

**fetchWhenSave(isSaved: boolean)**
save操作的时候是否根据返回值进行attributes的更新

**unset(attrKey: string)**
删除对应字段数据

**increment(attrKey: string, amount: number)**
对属性的值增加amount制定的数值
```
var post = MAS.Object.new('Post');
post.increment('age', 1);
```

**add(attrKey: string, value: string| array)**
对Relation及Array进行add操作（不排除重复）
```
var post = MAS.Object.new('Post');
post.add('favs', 'apple');
post.add('favs', ['orange']);
```

**addUnique(attrKey: string, value: string| array)**
对Relation及Array进行add操作（排除重复）

**remove(attrKey: string, value: string| array)**
删除Relation及Array中的元素

**save([,attributes: object])**
根据objectId判断是新增object还是更新object

**fetch() ==> Promise**
fetch对应objectId的数据，并且更新自身

**destroy() ==> Promise**
softDelete对应objectId的数据

**saveAll(objs: array<MAS.Object>) ==> Promise**
批量save对应的数据

```
var Post = Object.extend('Post');
var p1 = new Post();
var p2 = new Post();
p1.fetch().then(function(){
    return p2.fetch();
}).then(function(){
    return Object.saveAll([p1,p2]);
}).then(function(){
    console.log('success');
});
```

**fetchAll(objs: array<MAS.Object>) ==> Promise**


**destroyAll(objs: array<MAS.Object>) ==> Promise**
```
// 批量softDelete对应的Object数据
var Post = Object.extend('Post');
var p1 = new Post();
var p2 = new Post();
p1.fetch().then(function(){
    return p2.fetch();
}).then(function(){
    return Object.destoryAll([p1,p2]);
}).then(function(){
    console.log('success');
});
```


## MAS.Query

### 构造函数

**constructor(iClass: string|MAS.Object)**
```
var Post = Object.extend('Post');
var query = new Query(Post);
query = new Query('Post');
```

### 静态方法

**or(...MAS.Query)**
```
// 同时返回多个查询条件的结果
var q1 = new Query('Post');
q1.startWith('zyEros');

var q2 = new Query('Post');
q2.endWith('zyEros');

Query.or(q1,q2).then(function(posts){
    console.log(posts);
})
```

### 实例方法

**get(objectId) ==> Promise**
获取对应objectId对象的相关信息
```
var query = new Query('Post');
query.get('xxxxxx').then(function(post){
    console.log(post.toJSON());
})
```

**first()  ==> Promise**
得到对应对象模型中第一个数据
```
var query = new Query('Post');
query.first().then(function(post){
    if(post != null){
        console.log(post.toJSON());
    }
})
```

**find() ==> Promise**
得到对应查询的相关数据对象
```
var query = new Query('Post');
query.find().then(function(posts){
    if(posts.length){
        console.log(posts);
    }
})
```

**count() ==> Promise**
获取对应模型中数据的总容量
```
var query = new Query('Post');
query.count().then(function(count){
    console.log(count);
})

```

**equalTo(attrKey: string, value: any) ==> Promise**
Mongo属性对等  
```
var query = new MAS.Query('Post');
query.equalTo('name', 'zyEros').first().then(function (post) {

});
```

**notEqualTo(attrKey: string, value: any) ==> Promise**
Mongo属性不对等

**containsAll(attrKey: string, value: Array<any>) ==> Promise**
Mongo Array对象全等

**containedIn(attrKey: string, Array<any>) ==> Promise**
Mongo Array对象in操作

**notContainedIn(attrKey: string, value: Array<any>) ==> Promise**
Mongo Array对象not in操作

**matches(attrKey: string, reg:  RegExp)**
Mongo String对象自定义Regex操作
```
var query = new MAS.Query('Post');
query.matches('name', /^zyeros1$/i).first().then(function (post) {

});
```

**limit(num: number)**
Mongo limit操作
```
var query = new MAS.Query('Post');
query.equalTo('name', 'zyEros').limit(11).find().then(function (posts) {
        
});
```

**skip(num: number)**
Mongo skip操作

**addAscending(attrKey: string)**
Mongo 升序操作
```
var query = new MAS.Query('Post');
query.equalTo('name', 'zyEros').addAscending('objectId').skip(0).limit(2).find().then(function (posts) {
});
```

**addDescending(attrKey: string)**
Mongo 降序操作

**greaterThan(attrKey: string, value:number)**
Mongo Number gt操作
```
var query = new MAS.Query('Post');
query.greaterThan('createdAt', xxxx).first().then(function (post) {

});
```

**greaterThanOrEqualTo(attrKey: string, value:number)**
Mongo Number gte操作

**lessThan(attrKey: string, value: number)**
Mongo Number lt操作

**lessThanOrEqualTo(attrKey: string, value: number)**
Mongo Number lte操作

**exists(attrKey: string)**
Mongo exists操作

**doesNotExist(attrKey: string)**
Mongo not exists操作

**startsWith(attrKey: string, value:string)**
Mongo String对象Regex操作

**endWith(attrKey: string, value:string)**
Mongo String对象Regex操作
```
var query = new MAS.Query('Post');
query.endWith('name', 'zyEros1').first().then(function (post) {

});
```

**select(...key:string)**
设置展现
```
var query = new MAS.Query('Post');
query.select('createdUid').first().then(function (post) {

});
```


## MAS.User

### 构造函数

**constructor()**
返回的实例拥有`isLoginIn`和`isSignIn`属性

### 实例方法

**set(attrKey: string, value: any)**

**get(attrKey: string) ==> any**

**register() ==> Promise**

**login() ==> Promise**

**logout() ==> Promise**

**save([,attributes: object) ==> Promise**

**setUsername(username: string)**

**setPassword(password: string)**

**setEmail(email: string)**

**setPhonenumber(phonenumber: string)**

**getUsername()**

**getPassword()**

**getEmail()**

**getPhonenumber()**

**getToken()**

**getTokenExpires()**

**toJSON()**
返回attributes的副本


## MAS.Role

### 构造函数

**constructor(name: string)**

### 实例方法

**set(attrKey: string, value: string| Array)**
```
var role = new MAS.Role();
role.set('name', 'zyEros');

var user = new MAS.User();
user.set('name', 'zyEros1');
var role = new MAS.Role();
role.set('users', [{"name": 'zyEros'}, user]);
```

**get(attrKey: string)**

**save([,attributes: object])**

**addUser(user: MAS.User)**
```
var user = new MAS.User();
var role = new MAS.Role();
role.addUser(user);
```

**getUsers() ==> Array<MAS.User>**

**removeUser(user: MAS.User)**

**user: MAS.User.toJSON()**
返回attributes的副本

## MAS.HttpProxy

**send(method: string, url: string, [,data: object], [,headers: object], [,onprogress: function]) ==> Promise**

## MAS.Cache

**command(cmd) ==> Promise**;

## MAS.SMS

**MAS.SMS(mobiles: String| Array<String>, content: String) ==> Promise** 

## MAS.Mail
**MAS.Mail(from: String, to: String|Array<String>, subject: String, html: String) ==> Promise**