UNPKG

4.51 kBJavaScriptView Raw
1var _ = require('underscore');
2var Nodulator = require('../');
3var request = require('superagent');
4var async = require('async');
5
6var weaponConfig = {
7 schema: {
8 hitPoints: 'int'
9 }
10};
11
12var Weapons = Nodulator.Resource('weapon', Nodulator.Route.MultiRoute, weaponConfig);
13
14var unitConfig = {
15 abstract: true,
16 schema: {
17 level: 'int',
18 life: 'int',
19 weapon: {
20 type: Weapons,
21 localKey: 'weaponId',
22 optional: true
23 },
24 weaponId: {
25 type: 'int',
26 optional: true
27 }
28 }
29};
30
31var Units = Nodulator.Resource('unit', unitConfig);
32
33Units.prototype.Attack = Units._WrapPromise(function (target, done) {
34 target.life -= this.weapon.hitPoints;
35 target.Save(done);
36});
37
38Units.prototype.LevelUp = Units._WrapPromise(function (done) {
39 this.level++;
40 this.Save(done);
41});
42
43Units.Init();
44
45var UnitRoute = Nodulator.Route.MultiRoute.Extend();
46
47UnitRoute.prototype.Config = function () {
48 Nodulator.Route.MultiRoute.prototype.Config.apply(this);
49
50 this.Put('/:id/levelUp', function (Req) {
51 Req.instance.LevelUp();
52 });
53
54 this.Put('/:id/attack/:targetId', function (Req) {
55 // Hack to stay generic between children
56 var TargetResource;
57 if (this.name === 'players')
58 TargetResource = Monsters;
59 else if (this.name === 'monsters')
60 TargetResource = Players;
61
62 var watcher = Nodulator.Watch(function () {
63 if (TargetResource.error() !== undefined)
64 Req.Send(TargetResource.error());
65 });
66
67 TargetResource.Fetch(parseInt(Req.params.targetId), function (err, target) {
68 Req.instance.Attack(target, function (err) {
69 Req.Send(target);
70 watcher.Stop();
71 });
72 });
73 });
74};
75
76var Players = Units.Extend('player', UnitRoute);
77var Monsters = Units.Extend('monster', UnitRoute);
78
79//
80// Here stops the exemple,
81// And Here start the tests.
82//
83// Hack for keep track of weapon
84weaponId = [];
85
86async.series({
87 addWeapon: function (done) {
88 Nodulator.client.Post('/api/1/weapons', {hitPoints: 2}, function (err, res) {
89 weaponId.push(res.body.id);
90 done(err, res.body);
91 });
92 },
93
94 addWeapon2: function (done) {
95 Nodulator.client.Post('/api/1/weapons', {hitPoints: 1}, function (err, res) {
96 weaponId.push(res.body.id);
97 done(err, res.body);
98 });
99 },
100
101 addPlayer: function (done) {
102 Nodulator.client.Post('/api/1/players', {level: 1, life: 100, weaponId: weaponId[0]}, function (err, res) { done(err, res.body); });
103 },
104
105 testGet: function (done) {
106 Nodulator.client.Get('/api/1/players', function (err, res) { done(err, res.body); });
107 },
108
109 levelUp: function (done) {
110 Nodulator.client.Put('/api/1/players/1/levelUp', {}, function (err, res) { done(err, res.body); });
111 },
112
113 levelUp2: function (done) {
114 Nodulator.client.Put('/api/1/players/1/levelUp', {}, function (err, res) { done(err, res.body); });
115 },
116
117 addMonster: function (done) {
118 Nodulator.client.Post('/api/1/monsters', {level: 1, life: 20, weaponId: weaponId[1]}, function (err, res) { done(err, res.body); });
119 },
120
121 testGetMonster: function (done) {
122 Nodulator.client.Get('/api/1/monsters', function (err, res) { done(err, res.body); });
123 },
124
125 levelUpMonster: function (done) {
126 Nodulator.client.Put('/api/1/monsters/1/levelUp', {}, function (err, res) { done(err, res.body); });
127 },
128
129 levelUpMonster2: function (done) {
130 Nodulator.client.Put('/api/1/monsters/1/levelUp', {}, function (err, res) { done(err, res.body); });
131 },
132
133 playerAttack: function (done) {
134 Nodulator.client.Put('/api/1/players/1/attack/1', {}, function (err, res) { done(err, res.body); });
135 },
136
137 monsterAttack: function (done) {
138 Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
139 },
140
141 monsterAttack1: function (done) {
142 Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
143 },
144
145 monsterAttack2: function (done) {
146 Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
147 },
148
149 monsterAttack3: function (done) {
150 Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
151 },
152
153 monsterAttack4: function (done) {
154 Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
155 }
156}, function (err, results) {
157 util = require('util');
158 util.debug(util.inspect(err, {depth: null}));
159 util.debug(util.inspect(results, {depth: null}));
160});