This repository has been archived by the owner on Nov 8, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
minimongoid.coffee
78 lines (59 loc) · 1.77 KB
/
minimongoid.coffee
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
class Minimongoid
id: undefined
attributes: {}
constructor: (attributes = {}) ->
if attributes._id
@attributes = @demongoize(attributes)
@id = attributes._id
else
@attributes = attributes
isPersisted: -> @id?
isValid: -> true
save: ->
return false unless @isValid()
attributes = @mongoize(@attributes)
attributes['_type'] = @constructor._type if @constructor._type?
if @isPersisted()
@constructor._collection.update @id, { $set: attributes }
else
@id = @constructor._collection.insert attributes
this
update: (@attributes) ->
@save()
destroy: ->
if @isPersisted()
@constructor._collection.remove @id
@id = null
mongoize: (attributes) ->
taken = {}
for name, value of attributes
continue if name.match(/^_/)
taken[name] = value
taken
demongoize: (attributes) ->
taken = {}
for name, value of attributes
continue if name.match(/^_/)
taken[name] = value
taken
@_collection: undefined
@_type: undefined
# Rubists will love me, everyone else will burn me!
#
# Allows calls like User.new firstname: 'John'
@new: (attributes) ->
new @(attributes)
@create: (attributes) ->
@new(attributes).save()
@where: (selector = {}, options = {}) ->
@_collection.find(selector, options)
@all: (selector = {}, options = {}) ->
@_collection.find(selector, options)
@toArray: (selector = {}, options = {}) ->
for attributes in @where(selector, options).fetch()
# eval is ok, because _type is never entered by user
new(eval(attributes._type) ? @)(attributes)
@count: (selector = {}, options = {}) ->
@where(selector, options).count()
@destroyAll: (selector = {}) ->
@_collection.remove(selector)