Skip to content

Commit 304c272

Browse files
committed
Initial
0 parents  commit 304c272

8 files changed

+551
-0
lines changed

.gitignore

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Logs
2+
logs
3+
*.log
4+
5+
# Runtime data
6+
pids
7+
*.pid
8+
*.seed
9+
10+
# Directory for instrumented libs generated by jscoverage/JSCover
11+
lib-cov
12+
13+
# Coverage directory used by tools like istanbul
14+
coverage
15+
16+
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17+
.grunt
18+
19+
# Compiled binary addons (http://nodejs.org/api/addons.html)
20+
build/Release
21+
22+
# Dependency directory
23+
# Deployed apps should consider commenting this line out:
24+
# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
25+
node_modules

format.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var toJsonObject = require('object-tojson'),
2+
transformData = require('./transformData');
3+
4+
module.exports = function(sequelizeResult, prequelizeModel, callback){
5+
var rawData = toJsonObject(sequelizeResult);
6+
7+
if(sequelizeResult && sequelizeResult.sequelize){
8+
return callback(null, transformData(rawData, prequelizeModel, prequelizeModel.settings.transformProperty.from));
9+
}
10+
11+
callback(null, rawData);
12+
};

index.js

Lines changed: 344 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,344 @@
1+
var parseSettings = require('./parseSettings'),
2+
transformData = require('./transformData'),
3+
format = require('./format'),
4+
righto = require('righto'),
5+
abbott = require('abbott'),
6+
errors = require('generic-errors'),
7+
merge = require('flat-merge'),
8+
extend = require('cyclic-deep-extend'),
9+
oneResultOrError = require('./oneResultOrError'),
10+
resultOrError = require('./resultOrError');
11+
12+
function extendSettings(settings, extendedSettings){
13+
settings = merge({}, settings);
14+
settings.where = extend({}, settings.where);
15+
settings.include = extend({}, settings.include);
16+
return settings;
17+
}
18+
19+
/*
20+
## Get.
21+
22+
Get exactly one result by ID.
23+
24+
If no results are found, the call will be rejected with an Error with code 404.
25+
*/
26+
function get(id, settings, callback){
27+
var prequelizeModel = this;
28+
29+
settings = extendSettings(settings, {
30+
where: {
31+
id: id
32+
}
33+
});
34+
35+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
36+
37+
sequelizeSettings.transaction = settings.transaction;
38+
39+
var result = prequelizeModel.findOne(sequelizeSettings);
40+
41+
callback && result(callback);
42+
43+
return result;
44+
}
45+
46+
/*
47+
## Find.
48+
49+
Find the first result of a query.
50+
51+
If no results are found, the call will be resolved no result.
52+
*/
53+
function find(settings, callback){
54+
var prequelizeModel = this;
55+
56+
settings = extendSettings(settings);
57+
58+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
59+
60+
extend(sequelizeSettings, {
61+
limit: 1,
62+
transaction: settings.transaction
63+
});
64+
65+
var sequelizeResult = prequelizeModel.model.find(sequelizeSettings);
66+
67+
var result = righto(format, sequelizeResult, prequelizeModel);
68+
69+
callback && result(callback);
70+
71+
return result;
72+
}
73+
74+
/*
75+
## Find All.
76+
77+
Find all results of a query.
78+
*/
79+
function findAll(settings, callback){
80+
var prequelizeModel = this;
81+
82+
settings = extendSettings(settings);
83+
84+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
85+
86+
extend(sequelizeSettings, {
87+
transaction: settings.transaction
88+
});
89+
90+
var sequelizeResult = prequelizeModel.model.findAll(sequelizeSettings);
91+
92+
var result = righto(format, sequelizeResult, prequelizeModel);
93+
94+
callback && result(callback);
95+
96+
return result;
97+
}
98+
99+
/*
100+
## Find All.
101+
102+
Find and count all results of a query.
103+
*/
104+
function findAndCountAll(settings, callback){
105+
var prequelizeModel = this;
106+
107+
settings = extendSettings(settings);
108+
109+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
110+
111+
extend(sequelizeSettings, {
112+
transaction: settings.transaction
113+
});
114+
115+
var sequelizeResult = prequelizeModel.model.findAndCountAll(sequelizeSettings);
116+
117+
var result = righto(format, sequelizeResult, prequelizeModel);
118+
119+
callback && result(callback);
120+
121+
return result;
122+
}
123+
124+
/*
125+
## Find one.
126+
127+
Find exactly one result of a query.
128+
129+
If no results are found, the call will be rejected with an Error with code 404.
130+
131+
If more than one result is found, the call will throw.
132+
*/
133+
function findOne(settings, callback){
134+
var prequelizeModel = this;
135+
136+
settings = extendSettings(settings);
137+
138+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
139+
140+
extend(sequelizeSettings, {
141+
limit: 2,
142+
transaction: settings.transaction
143+
});
144+
145+
var sequelizeResult = prequelizeModel.model.findAll(sequelizeSettings);
146+
147+
var result = righto(oneResultOrError, sequelizeResult, prequelizeModel);
148+
149+
callback && result(callback);
150+
151+
return result;
152+
}
153+
154+
/*
155+
## Remove.
156+
157+
Remove all results of a query.
158+
*/
159+
function remove(settings, callback){
160+
var prequelizeModel = this;
161+
162+
settings = extendSettings(settings);
163+
164+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
165+
166+
extend(sequelizeSettings, {
167+
transaction: settings.transaction
168+
});
169+
170+
var sequelizeResult = prequelizeModel.model.remove(sequelizeSettings);
171+
172+
var result = righto(format, sequelizeResult, prequelizeModel);
173+
174+
callback && result(callback);
175+
176+
return result;
177+
}
178+
179+
/*
180+
## Remove One.
181+
182+
Remove exactly one result of a query.
183+
184+
If no results are found, the call will be rejected with an Error with code 404.
185+
186+
If more than one result is found, the call will throw.
187+
*/
188+
function removeOne(settings, callback){
189+
var prequelizeModel = this;
190+
191+
settings = extendSettings(settings);
192+
193+
var sequelizeSettings = parseSettings(settings, prequelizeModel),
194+
removeTransaction = settings.transaction ?
195+
null :
196+
prequelizeModel.model.sequelize.transaction();
197+
198+
extend(sequelizeSettings, {
199+
transaction: settings.transaction || removeTransaction
200+
});
201+
202+
var sequelizeResult = prequelizeModel.model.remove(sequelizeSettings);
203+
204+
function resolveResult(done){
205+
var deleteResult = righto(format, sequelizeResult, prequelizeModel);
206+
207+
deleteResult(function(error, result){
208+
if(error){
209+
if(removeTransaction){
210+
return abbott(removeTransaction.rollback())(function(){
211+
done(error, result);
212+
});
213+
}
214+
215+
return done(error);
216+
}
217+
218+
if(result > 2){
219+
throw new Error('Expected only 1 affected row, instead affected ' + result);
220+
}
221+
222+
function checkOne(error, result){
223+
if(error || result < 1){
224+
return done(error || new errors.NotFound());
225+
}
226+
227+
done(null, result);
228+
}
229+
230+
if(removeTransaction){
231+
return abbott(removeTransaction.commit())(function(commitError){
232+
checkOne(commitError, result);
233+
});
234+
}
235+
236+
checkOne(null, result);
237+
});
238+
}
239+
240+
var result = righto(resolveResult);
241+
242+
callback && result(callback);
243+
244+
return result;
245+
}
246+
247+
/*
248+
## Create.
249+
250+
Create a record.
251+
*/
252+
function create(data, settings, callback){
253+
var prequelizeModel = this;
254+
255+
settings = extendSettings(settings);
256+
257+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
258+
259+
extend(sequelizeSettings, {
260+
transaction: settings.transaction
261+
});
262+
263+
var sequelizeResult = prequelizeModel.model.create(
264+
transformData(data, prequelizeModel, prequelizeModel.settings.transformProperty.to),
265+
sequelizeSettings
266+
);
267+
268+
var result = righto(format, sequelizeResult, prequelizeModel);
269+
270+
callback && result(callback);
271+
272+
return result;
273+
}
274+
275+
/*
276+
## Update.
277+
278+
Update all results of a query.
279+
*/
280+
function update(data, settings, callback){
281+
var prequelizeModel = this;
282+
283+
settings = extendSettings(settings);
284+
285+
var sequelizeSettings = parseSettings(settings, prequelizeModel);
286+
287+
extend(sequelizeSettings, {
288+
transaction: settings.transaction
289+
});
290+
291+
var sequelizeResult = prequelizeModel.model.update(
292+
transformData(data, prequelizeModel, prequelizeModel.settings.transformProperty.to),
293+
sequelizeSettings
294+
);
295+
296+
var result = righto(format, sequelizeResult, prequelizeModel);
297+
298+
callback && result(callback);
299+
300+
return result;
301+
}
302+
303+
var defaultTransformProperty = {
304+
to: function(data){
305+
return data;
306+
},
307+
from: function(data){
308+
return data;
309+
}
310+
}
311+
312+
function createModelMethods(model, modelName, settings) {
313+
var modelSettings = settings.modelSettings && settings.modelSettings[modelName],
314+
prequelizeModel = {
315+
name: modelName,
316+
prequelizeSettings: settings,
317+
settings: {
318+
transformProperty:
319+
settings.transformProperty ||
320+
defaultTransformProperty
321+
},
322+
model: model
323+
};
324+
325+
prequelizeModel.get = get.bind(prequelizeModel);
326+
prequelizeModel.find = find.bind(prequelizeModel);
327+
prequelizeModel.findAll = findAll.bind(prequelizeModel);
328+
prequelizeModel.findAndCountAll = findAndCountAll.bind(prequelizeModel);
329+
prequelizeModel.findOne = findOne.bind(prequelizeModel);
330+
prequelizeModel.remove = remove.bind(prequelizeModel);
331+
prequelizeModel.removeOne = removeOne.bind(prequelizeModel);
332+
prequelizeModel.create = create.bind(prequelizeModel);
333+
prequelizeModel.update = update.bind(prequelizeModel);
334+
335+
return prequelizeModel;
336+
}
337+
338+
module.exports = function(models, settings){
339+
settings = settings || {};
340+
return Object.keys(models).reduce(function(result, key){
341+
result[key] = createModelMethods(models[key], key, settings);
342+
return result;
343+
}, {});
344+
};

0 commit comments

Comments
 (0)