/
resourceful-methods.js
104 lines (90 loc) · 2.14 KB
/
resourceful-methods.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// custom-methods.js - example of extending resources to have methods
//
var resourceful = require('../lib/resourceful');
resourceful.use('memory');
var Creature = resourceful.define('creature');
function fire (options, callback) {
var result = {
status: "fired",
direction: options.direction,
power: options.power
};
if(callback) {
return callback(null, result);
}
return result;
};
//
// Resource.method takes three arguments:
//
// name, Function, schema
//
// The schema represents an optional JSON-Schema,
// which if present, is enforced on the Function's arguments
//
//
var poke = function(target, velocity){
console.log(target, velocity);
};
Creature.method('poke', poke, { properties: {
"target": {
"type": "string",
"required": true
},
"velocity": {
"type": "string",
"default": "ten"
}
}});
Creature.method('fire', fire, {
"description": "fires a lazer at a certain power and direction",
"properties": {
"options": {
"type": "object",
"properties": {
"power": {
"type": "number",
"default": 1
},
"direction": {
"type": "string",
"enum": ["up", "down", "left", "right"],
"required": true,
"default": "up"
}
}
},
"callback": {
"type": "function",
"required": false
}
}
});
Creature.fire({ direction: "side-ways"}, function(err, result){
// errors since side-ways is not in enum
console.log(err, result);
});
Creature.poke("someone");
Creature.poke("someone-else", "six");
// throws validation error
// Creature.fire({ powa: "TOO HIGH"});
Creature.create({
id: 'Marak'
}, function(err, marak){
if(err){
console.log(err);
}
marak.poke("somebody");
marak.poke("somebody-else", "seven");
marak.fire({ "direction": "side-ways", "power": 20}, function(err, result){
// errors since Tside-ways is not in enum
console.log(err, result);
});
// throws validation error
// marak.fire({ power: "TOO HIGH"});
marak.fire({ "direction": "up", "power": 20}, function(err, result){
// fires correctly
console.log(err, result);
});
});