joosy 1.2.0.beta.4 → 1.2.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codoopts +1 -1
- data/Gruntfile.coffee +3 -3
- data/README.md +4 -0
- data/bower.json +1 -1
- data/build/joosy.js +2 -2
- data/build/joosy/form.js +1 -1
- data/build/joosy/resources.js +1 -1
- data/package.json +2 -2
- data/source/joosy/application.coffee +2 -2
- data/source/joosy/form.coffee +4 -4
- data/source/joosy/helpers/form.coffee +12 -3
- data/source/joosy/helpers/index.coffee +0 -1
- data/source/joosy/helpers/view.coffee +16 -3
- data/source/joosy/layout.coffee +0 -4
- data/source/joosy/module.coffee +16 -1
- data/source/joosy/modules/dom.coffee +106 -101
- data/source/joosy/modules/events.coffee +44 -10
- data/source/joosy/modules/filters.coffee +64 -60
- data/source/joosy/modules/page.coffee +3 -0
- data/source/joosy/modules/page/scrolling.coffee +46 -29
- data/source/joosy/modules/page/title.coffee +14 -0
- data/source/joosy/modules/renderer.coffee +219 -190
- data/source/joosy/modules/resources.coffee +3 -0
- data/source/joosy/modules/resources/cacher.coffee +81 -10
- data/source/joosy/modules/resources/function.coffee +26 -29
- data/source/joosy/modules/resources/identity_map.coffee +64 -42
- data/source/joosy/modules/resources/model.coffee +127 -73
- data/source/joosy/modules/time_manager.coffee +2 -0
- data/source/joosy/page.coffee +3 -6
- data/source/joosy/resources/array.coffee +87 -2
- data/source/joosy/resources/hash.coffee +53 -1
- data/source/joosy/resources/rest.coffee +59 -3
- data/source/joosy/resources/scalar.coffee +47 -1
- data/source/joosy/router.coffee +63 -21
- data/source/joosy/templaters/jst.coffee +3 -0
- data/source/joosy/widget.coffee +17 -11
- data/spec/joosy/core/helpers/view_spec.coffee +14 -0
- data/spec/joosy/core/modules/dom_spec.coffee +1 -1
- data/spec/joosy/core/modules/filters_spec.coffee +2 -2
- data/spec/joosy/core/modules/module_spec.coffee +1 -1
- data/spec/joosy/core/modules/renderer_spec.coffee +19 -1
- data/spec/joosy/core/router_spec.coffee +80 -45
- data/spec/joosy/core/widget_spec.coffee +9 -0
- data/spec/joosy/resources/modules/cacher_spec.coffee +3 -3
- data/spec/joosy/resources/modules/function_spec.coffee +2 -2
- data/spec/joosy/resources/modules/identity_map_spec.coffee +2 -2
- data/spec/joosy/resources/modules/model_spec.coffee +1 -1
- metadata +2 -5
- data/source/joosy/helpers/routes.coffee +0 -17
- data/source/joosy/modules/widgets_manager.coffee +0 -90
- data/spec/joosy/core/helpers/routes_spec.coffee +0 -15
@@ -1,13 +1,73 @@
|
|
1
1
|
#= require ../resources
|
2
2
|
|
3
|
+
#
|
4
|
+
# Cacher allows you to implement the delayed refresh of a resource.
|
5
|
+
#
|
6
|
+
# During the first fetch it stores the current value to localStorage
|
7
|
+
# and on the second call it returns the cached value. At the same moment
|
8
|
+
# it starts the new fetch and triggers 'changed' event as soon as
|
9
|
+
# the new value arrives.
|
10
|
+
#
|
11
|
+
# When used in conjuction with `@renderDynamic` it allows you to render
|
12
|
+
# template with cached value immediately. And the new arrived value will
|
13
|
+
# automatically be injected into DOM.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# class Test extends Joosy.Resources.Hash
|
17
|
+
# @concern Joosy.Modules.Resources.Cacher
|
18
|
+
#
|
19
|
+
# @cache 'test' # key to use at localStorage
|
20
|
+
# @fetcher (callback) ->
|
21
|
+
# $.get '...', (data) -> callback data
|
22
|
+
#
|
23
|
+
# Test.cached (instance) ->
|
24
|
+
# # ...
|
25
|
+
#
|
3
26
|
# @mixin
|
4
27
|
Joosy.Modules.Resources.Cacher =
|
5
28
|
|
6
|
-
|
7
|
-
|
8
|
-
|
29
|
+
ClassMethods:
|
30
|
+
#
|
31
|
+
# Defines the key that will be used to reference
|
32
|
+
# the cached value at localStorage. Unless specified
|
33
|
+
# localStorage will not be used.
|
34
|
+
#
|
35
|
+
# @param [String] cacheKey
|
36
|
+
# @example
|
37
|
+
# class Test extends Joosy.Resources.Hash
|
38
|
+
# @concern Joosy.Modules.Resources.Cacher
|
39
|
+
# @cache 'test'
|
40
|
+
#
|
41
|
+
cache: (cacheKey) -> @::__cacheKey = cacheKey
|
9
42
|
|
10
|
-
|
43
|
+
#
|
44
|
+
# Defines the asynchronous routine that will be used
|
45
|
+
# to load the actual value of resource when `cached` is called.
|
46
|
+
#
|
47
|
+
# @param [Function<Function>] fetcher
|
48
|
+
# @example
|
49
|
+
# class Test extends Joosy.Resources.Hash
|
50
|
+
# @concern Joosy.Modules.Resources.Cacher
|
51
|
+
# @fetcher (callback) ->
|
52
|
+
# $.get '...', (data) -> callback data
|
53
|
+
#
|
54
|
+
fetcher: (fetcher) -> @::__fetcher = fetcher
|
55
|
+
|
56
|
+
#
|
57
|
+
# The main resolver of current value. If the cached
|
58
|
+
# value is available it is returned immediately. Otherwise
|
59
|
+
# the actual value is loaded.
|
60
|
+
#
|
61
|
+
# During the first fetch it stores the current value to localStorage
|
62
|
+
# and on the second call it returns the cached value. At the same moment
|
63
|
+
# it starts the new fetch and triggers 'changed' event as soon as
|
64
|
+
# the new value arrives.
|
65
|
+
#
|
66
|
+
# @param [Function<Cacher>] callback Action to perform with resulting instance of resource
|
67
|
+
# @param [String] cacheKey The override for {Joosy.Modules.Resources.Cacher.cache}
|
68
|
+
# @param [Function<Function>] fetcher The override for {Joosy.Modules.Resources.Cacher.fetcher}
|
69
|
+
#
|
70
|
+
cached: (callback, cacheKey=false, fetcher=false) ->
|
11
71
|
if typeof(cacheKey) == 'function'
|
12
72
|
fetcher = cacheKey
|
13
73
|
cacheKey = undefined
|
@@ -23,16 +83,27 @@ Joosy.Modules.Resources.Cacher =
|
|
23
83
|
@fetch (results) =>
|
24
84
|
instance = @build results...
|
25
85
|
callback? instance
|
26
|
-
|
27
|
-
|
86
|
+
#
|
87
|
+
# Low-level fetcher that gets the actual value and stores it to
|
88
|
+
# localStorage (if required)
|
89
|
+
#
|
90
|
+
# @param [Function<Mixed>] callback Action to perform with raw fetched value
|
91
|
+
#
|
92
|
+
fetch: (callback) ->
|
28
93
|
@::__fetcher (results...) =>
|
29
94
|
localStorage[@::__cacheKey] = JSON.stringify(results) if @::__cacheKey && localStorage
|
30
95
|
callback results
|
31
96
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
97
|
+
InstanceMethods:
|
98
|
+
#
|
99
|
+
# Refreshes the value in both – the cache and the resource itself
|
100
|
+
#
|
101
|
+
# @param [Function<Cacher>] callback Action to perform with resulting instance of resource
|
102
|
+
#
|
103
|
+
refresh: (callback) ->
|
104
|
+
@constructor.fetch (results) =>
|
105
|
+
@load results...
|
106
|
+
callback? @
|
36
107
|
|
37
108
|
# AMD wrapper
|
38
109
|
if define?.amd?
|
@@ -1,41 +1,38 @@
|
|
1
1
|
#
|
2
2
|
# Module allowing to emulate Fn-based instances in JS
|
3
3
|
#
|
4
|
-
# @mixin
|
5
|
-
#
|
6
4
|
# @example
|
7
|
-
# class Foo extends Joosy.
|
8
|
-
#
|
9
|
-
# @extend Joosy.Module.Function
|
5
|
+
# class Foo extends Joosy.Modules.Resources.Hash
|
6
|
+
# @concern Joosy.Module.Function
|
10
7
|
#
|
11
|
-
#
|
12
|
-
#
|
8
|
+
# foo = Foo.build foo: 'bar'
|
9
|
+
# typeof(foo) # 'function'
|
10
|
+
# foo('foo') # 'bar'
|
13
11
|
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
# foo = Foo.build 'test'
|
17
|
-
# typeof(foo) # 'function'
|
18
|
-
# foo() # 'test'
|
12
|
+
# @mixin
|
19
13
|
#
|
20
14
|
Joosy.Modules.Resources.Function =
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
ClassMethods:
|
17
|
+
# @nodoc
|
18
|
+
extended: ->
|
19
|
+
if @build
|
20
|
+
@aliasStaticMethodChain 'build', 'function'
|
21
|
+
else
|
22
|
+
@build = @buildWithFunction
|
23
|
+
@buildWithoutFunction = ->
|
24
|
+
new @ arguments...
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
# @nodoc
|
27
|
+
buildWithFunction: ->
|
28
|
+
shim = -> shim.__call.apply shim, arguments
|
29
|
+
proto = @buildWithoutFunction arguments...
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
31
|
+
if shim.__proto__
|
32
|
+
shim.__proto__ = proto
|
33
|
+
else
|
34
|
+
for key, value of proto
|
35
|
+
shim[key] = value
|
39
36
|
|
40
|
-
|
41
|
-
|
37
|
+
shim.constructor = proto.constructor
|
38
|
+
shim
|
@@ -1,47 +1,69 @@
|
|
1
1
|
#= require ../resources
|
2
2
|
|
3
|
+
#
|
4
|
+
# The basic implementation of Identity Map allowing you to automatically
|
5
|
+
# make all the instances of the same model to be a single JS Object.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# class Model extends Joosy.Resources.Hash
|
9
|
+
# @concern Joosy.Modules.Resources.Model
|
10
|
+
# @concern Joosy.Modules.Resources.IdentityMap
|
11
|
+
#
|
12
|
+
# foo = Test.build id: 1
|
13
|
+
# bar = Test.build id: 1 # bar === foo
|
14
|
+
#
|
3
15
|
# @mixin
|
16
|
+
#
|
4
17
|
Joosy.Modules.Resources.IdentityMap =
|
5
18
|
|
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
|
-
|
19
|
+
ClassMethods:
|
20
|
+
# @nodoc
|
21
|
+
extended: ->
|
22
|
+
@::__identityHolder = @
|
23
|
+
@aliasStaticMethodChain 'build', 'identityMap'
|
24
|
+
|
25
|
+
#
|
26
|
+
# Clears the identity map cache. Recomended to be called during layout switch to
|
27
|
+
# ensure correct garbage collection.
|
28
|
+
#
|
29
|
+
identityReset: ->
|
30
|
+
@::__identityHolder.identity = {}
|
31
|
+
|
32
|
+
#
|
33
|
+
# Defines the array of values identifying a unique object within a set
|
34
|
+
#
|
35
|
+
# @param [Mixed] data The data given upon object creation
|
36
|
+
# @return [Array<Mixed>] Uniqueness path
|
37
|
+
#
|
38
|
+
identityPath: (data) ->
|
39
|
+
[
|
40
|
+
@::__entityName, # entity name as a first-level entry to make inheritance safe
|
41
|
+
"s#{@__source || ''}", # save identity from overlaping on `@at` calls
|
42
|
+
data[@::__primaryKey] # direct identifier as a main distinguisher
|
43
|
+
]
|
44
|
+
|
45
|
+
#
|
46
|
+
# Wraps instance of resource inside shim-function allowing to track
|
47
|
+
# data changes. See class example
|
48
|
+
#
|
49
|
+
# @private
|
50
|
+
# @return [Mixed]
|
51
|
+
#
|
52
|
+
buildWithIdentityMap: (data={}) ->
|
53
|
+
elements = @identityPath(data)
|
54
|
+
|
55
|
+
if elements.filter((element) -> !element?).length == 0
|
56
|
+
location = @::__identityHolder.identity ?= {}
|
57
|
+
destination = elements.pop()
|
58
|
+
location = location[element] ?= {} for element in elements
|
59
|
+
|
60
|
+
# Data can be circulary referenced so we have to
|
61
|
+
# init identity cell as a first step...
|
62
|
+
preload = {}
|
63
|
+
preload[@::__primaryKey] = data[@::__primaryKey]
|
64
|
+
location[destination] ?= @buildWithoutIdentityMap preload
|
65
|
+
|
66
|
+
# ...and load data as a second
|
67
|
+
location[destination].load data
|
68
|
+
else
|
69
|
+
@buildWithoutIdentityMap data
|
@@ -1,18 +1,23 @@
|
|
1
1
|
#= require ../resources
|
2
2
|
|
3
|
+
#
|
4
|
+
# The collection of methods extending basic implemenetation of resources
|
5
|
+
# adding typical model features and making it aware of primary key and collection.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# class Test extends Joosy.Resources.Hash
|
9
|
+
# @concern Joosy.Modules.Resources.Model
|
10
|
+
#
|
3
11
|
# @mixin
|
4
12
|
Joosy.Modules.Resources.Model =
|
5
13
|
|
6
|
-
|
14
|
+
ClassMethods:
|
7
15
|
#
|
8
16
|
# Sets the field containing primary key.
|
9
17
|
#
|
10
|
-
# @note It has no direct use inside the REST resource itself and can be omited.
|
11
|
-
# But it usually should not since we have plans on adding some kind of Identity Map to Joosy.
|
12
|
-
#
|
13
18
|
# @param [String] primary Name of the field
|
14
19
|
#
|
15
|
-
|
20
|
+
primaryKey: (primaryKey) ->
|
16
21
|
@::__primaryKey = primaryKey
|
17
22
|
|
18
23
|
#
|
@@ -20,7 +25,7 @@ Joosy.Modules.Resources.Model =
|
|
20
25
|
#
|
21
26
|
# @param [Class] klass Class to use as a collection wrapper
|
22
27
|
#
|
23
|
-
|
28
|
+
collection: (klass) ->
|
24
29
|
@::__collection = klass
|
25
30
|
|
26
31
|
#
|
@@ -29,7 +34,7 @@ Joosy.Modules.Resources.Model =
|
|
29
34
|
#
|
30
35
|
# @param [String] name Singular name of resource
|
31
36
|
#
|
32
|
-
|
37
|
+
entity: (name) ->
|
33
38
|
@::__entityName = name
|
34
39
|
|
35
40
|
#
|
@@ -39,22 +44,26 @@ Joosy.Modules.Resources.Model =
|
|
39
44
|
# to handle inline changes with triggers and all that resources stuff
|
40
45
|
#
|
41
46
|
# @example Basic usage
|
42
|
-
# class
|
47
|
+
# class Model extends Joosy.Resources.Hash
|
48
|
+
# @concern Joosy.Modules.Resources.Model
|
49
|
+
#
|
50
|
+
# class Zombie extends Model
|
43
51
|
# @entity 'zombie'
|
44
|
-
#
|
52
|
+
#
|
53
|
+
# class Puppy extends Model
|
45
54
|
# @entity 'puppy'
|
46
55
|
# @map 'zombies'
|
47
56
|
#
|
48
57
|
# p = Puppy.build {zombies: [{foo: 'bar'}]}
|
49
58
|
#
|
50
|
-
# p('zombies')
|
59
|
+
# p.get('zombies') # Direct access: [{foo: 'bar'}]
|
51
60
|
# p.zombies # Wrapped Collection of Zombie instances
|
52
|
-
# p.zombies.
|
61
|
+
# p.zombies[0].get('foo') # bar
|
53
62
|
#
|
54
63
|
# @param [String] name Pluralized name of property to define
|
55
64
|
# @param [Class] klass Resource class to instantiate
|
56
65
|
#
|
57
|
-
|
66
|
+
map: (name, klass=false) ->
|
58
67
|
unless klass
|
59
68
|
|
60
69
|
klass = window[inflection.camelize inflection.singularize(name)]
|
@@ -77,10 +86,24 @@ Joosy.Modules.Resources.Model =
|
|
77
86
|
#
|
78
87
|
# @param [DOMElement] form Form to grab
|
79
88
|
#
|
80
|
-
|
89
|
+
grab: (form) ->
|
81
90
|
@build({}).grab form
|
82
91
|
|
83
|
-
|
92
|
+
#
|
93
|
+
# Registers dynamic accessors for given fields
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# class Test extends Joosy.Resources.Hash
|
97
|
+
# @concern Joosy.Modules.Resources.Model
|
98
|
+
#
|
99
|
+
# @attrAccessor 'field1', 'field2'
|
100
|
+
#
|
101
|
+
# test = Test.build(field1: 'test', field2: 'test')
|
102
|
+
#
|
103
|
+
# test.field1() # 'test'
|
104
|
+
# test.field2('new value') # 'new value'
|
105
|
+
#
|
106
|
+
attrAccessor: ->
|
84
107
|
for attribute in arguments
|
85
108
|
do (attribute) =>
|
86
109
|
@::[attribute] = (value) ->
|
@@ -89,63 +112,94 @@ Joosy.Modules.Resources.Model =
|
|
89
112
|
else
|
90
113
|
@get attribute
|
91
114
|
|
115
|
+
InstanceMethods:
|
116
|
+
#
|
117
|
+
# Default primary key field 'id'
|
118
|
+
#
|
119
|
+
__primaryKey: 'id'
|
120
|
+
|
121
|
+
#
|
122
|
+
# Default collection: Joosy.Resources.Array
|
123
|
+
#
|
124
|
+
__collection: Joosy.Resources.Array
|
125
|
+
|
126
|
+
#
|
127
|
+
# Getter for the primary key field
|
128
|
+
#
|
129
|
+
# @see Joosy.Modules.Resources.Model.primaryKey
|
130
|
+
#
|
131
|
+
id: ->
|
132
|
+
@data?[@__primaryKey]
|
133
|
+
|
134
|
+
#
|
135
|
+
# Returns the list of known fields for the resource
|
136
|
+
#
|
137
|
+
# @return [Array<String>]
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# class Test extends Joosy.Resources.Hash
|
141
|
+
# @concern Joosy.Modules.Resources.Model
|
142
|
+
#
|
143
|
+
# test = Test.build field1: 'test', field2: 'test'
|
144
|
+
#
|
145
|
+
# test.knownAttributes() # ['field1', 'field2']
|
146
|
+
#
|
147
|
+
knownAttributes: ->
|
148
|
+
Object.keys @data
|
149
|
+
|
150
|
+
#
|
151
|
+
# Set the resource data manually.
|
152
|
+
#
|
153
|
+
# Unlike the basic implementation of load, this one
|
154
|
+
# merges newer and older fieldsets that allows you to
|
155
|
+
# receive different parts of model data from different endpoints.
|
156
|
+
#
|
157
|
+
# @param [Object] data Data to store
|
158
|
+
# @param [Boolean] clear Whether previous data should be overwriten (not merged)
|
159
|
+
#
|
160
|
+
# @return [Object] Returns self
|
161
|
+
#
|
162
|
+
load: (data, clear=false) ->
|
163
|
+
@data = {} if clear
|
164
|
+
@__fillData data
|
165
|
+
@
|
166
|
+
|
167
|
+
#
|
168
|
+
# Defines how exactly prepared data should be saved
|
169
|
+
#
|
170
|
+
# @param [Object] data Raw data to store
|
171
|
+
# @private
|
172
|
+
#
|
173
|
+
__fillData: (data, notify=true) ->
|
174
|
+
@raw = data
|
175
|
+
@data = {} unless @hasOwnProperty 'data'
|
176
|
+
|
177
|
+
Joosy.Module.merge @data, @__applyBeforeLoads(data)
|
178
|
+
@trigger 'changed' if notify
|
179
|
+
null
|
180
|
+
|
181
|
+
#
|
182
|
+
# Updates the Resource with a data from given form
|
183
|
+
#
|
184
|
+
# @param [DOMElement] form Form to grab
|
185
|
+
#
|
186
|
+
# @example
|
187
|
+
# class Test extends Joosy.Resources.Hash
|
188
|
+
# @concern Joosy.Modules.Resources.Model
|
189
|
+
#
|
190
|
+
# test = Test.build().grab($ 'form')
|
191
|
+
#
|
192
|
+
grab: (form) ->
|
193
|
+
data = {}
|
194
|
+
for field in $(form).serializeArray()
|
195
|
+
unless data[field.name]
|
196
|
+
data[field.name] = field.value
|
197
|
+
else
|
198
|
+
data[field.name] = [data[field.name]] unless data[field.name] instanceof Array
|
199
|
+
data[field.name].push field.value
|
200
|
+
|
201
|
+
@load data
|
92
202
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
__primaryKey: 'id'
|
97
|
-
|
98
|
-
#
|
99
|
-
# Default collection: Joosy.Resources.Array
|
100
|
-
#
|
101
|
-
__collection: Joosy.Resources.Array
|
102
|
-
|
103
|
-
id: ->
|
104
|
-
@data?[@__primaryKey]
|
105
|
-
|
106
|
-
knownAttributes: ->
|
107
|
-
Object.keys @data
|
108
|
-
|
109
|
-
#
|
110
|
-
# Set the resource data manually
|
111
|
-
#
|
112
|
-
# @param [Object] data Data to store
|
113
|
-
#
|
114
|
-
# @return [Object] Returns self
|
115
|
-
#
|
116
|
-
load: (data, clear=false) ->
|
117
|
-
@data = {} if clear
|
118
|
-
@__fillData data
|
119
|
-
@
|
120
|
-
|
121
|
-
#
|
122
|
-
# Defines how exactly prepared data should be saved
|
123
|
-
#
|
124
|
-
# @param [Object] data Raw data to store
|
125
|
-
#
|
126
|
-
__fillData: (data, notify=true) ->
|
127
|
-
@raw = data
|
128
|
-
@data = {} unless @hasOwnProperty 'data'
|
129
|
-
|
130
|
-
Joosy.Module.merge @data, @__applyBeforeLoads(data)
|
131
|
-
@trigger 'changed' if notify
|
132
|
-
null
|
133
|
-
|
134
|
-
#
|
135
|
-
# Updates the Resource with a data from given form
|
136
|
-
#
|
137
|
-
# @param [DOMElement] form Form to grab
|
138
|
-
#
|
139
|
-
grab: (form) ->
|
140
|
-
data = {}
|
141
|
-
for field in $(form).serializeArray()
|
142
|
-
unless data[field.name]
|
143
|
-
data[field.name] = field.value
|
144
|
-
else
|
145
|
-
data[field.name] = [data[field.name]] unless data[field.name] instanceof Array
|
146
|
-
data[field.name].push field.value
|
147
|
-
|
148
|
-
@load data
|
149
|
-
|
150
|
-
toString: ->
|
151
|
-
"<Resource #{@__entityName}> #{JSON.stringify(@data)}"
|
203
|
+
# @nodoc
|
204
|
+
toString: ->
|
205
|
+
"<Resource #{@__entityName}> #{JSON.stringify(@data)}"
|