-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhasMany.coffee
38 lines (30 loc) · 1013 Bytes
/
hasMany.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
BelongsToProperty = require './belongsTo'
class HasManyProperty extends (require './relationship')
@set kind: 'hasMany', unique: true, default: []
access: (key) ->
if key is '*'
(@value.map (e) => @fetch e).filter (e) -> e?
else
@fetch key if key in @value
push: (value) ->
list = @get()
list.push value
@set list
set: (value) ->
try super
catch e then throw new Error "unable to validate has-many relationship of #{@model.get 'name'}"
normalize: (value=@get()) ->
value = super value
super switch
when value instanceof Array
(value.filter (e) -> e?).map (e) => BelongsToProperty::normalize.call this, e
else undefined
validate: (value=@get()) ->
(super value) is true and value.every (e) => not @opts['require-instance'] or @model.instanceof (@fetch e)
serialize: (opts={}) ->
value=@get()
if @opts.embedded is true
value.map (e) -> e.serialize opts
else
super
module.exports = HasManyProperty