ende 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +2 -2
  3. data/components/indefinido/indemma/master/component.json +27 -17
  4. data/components/indefinido/indemma/master/lib/record/associable.js +74 -75
  5. data/components/indefinido/indemma/master/lib/record/dirtyable.js +40 -0
  6. data/components/indefinido/indemma/master/lib/record/queryable.js +2 -2
  7. data/components/indefinido/indemma/master/lib/record/resource.js +1 -1
  8. data/components/indefinido/indemma/master/lib/record/rest.js +7 -2
  9. data/components/indefinido/indemma/master/lib/record/restfulable.js +37 -10
  10. data/components/indefinido/indemma/master/lib/record/scopable.js +20 -47
  11. data/components/indefinido/indemma/master/lib/record/storable.js +11 -0
  12. data/components/indefinido/indemma/master/lib/record/validatable.js +195 -1068
  13. data/components/indefinido/indemma/master/lib/record.js +1 -1
  14. data/components/indefinido/indemma/master/vendor/stampit.js +568 -242
  15. data/components/indefinido/observable/es6-modules/component.json +39 -0
  16. data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/lib/adapters/rivets.js +3 -1
  17. data/components/indefinido/observable/es6-modules/lib/legacy/notifierable.js +145 -0
  18. data/components/indefinido/observable/es6-modules/lib/legacy/schedulerable.js +114 -0
  19. data/components/indefinido/observable/es6-modules/lib/lookup.js +38 -0
  20. data/components/indefinido/observable/es6-modules/lib/observable/keypath_observer.js +38 -0
  21. data/components/indefinido/observable/es6-modules/lib/observable/observation.js +45 -0
  22. data/components/indefinido/observable/es6-modules/lib/observable/selection.js +57 -0
  23. data/components/indefinido/observable/es6-modules/lib/observable/self_observer.js +38 -0
  24. data/components/indefinido/observable/es6-modules/lib/observable.js +90 -0
  25. data/components/indefinido/observable/es6-modules/lib/platform.js +12 -0
  26. data/components/indefinido/observable/es6-modules/vendor/observe-js/observe.js +1631 -0
  27. data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors.js +85 -10
  28. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +1 -1
  29. data/lib/ende/version.rb +1 -1
  30. data/vendor/assets/components/ende_build.js +18379 -26828
  31. metadata +20 -128
  32. data/components/indefinido/indemma/master/.gitignore +0 -17
  33. data/components/indefinido/indemma/master/.ruby-gemset +0 -1
  34. data/components/indefinido/indemma/master/.ruby-version +0 -1
  35. data/components/indefinido/indemma/master/Gemfile +0 -13
  36. data/components/indefinido/indemma/master/Guardfile +0 -39
  37. data/components/indefinido/indemma/master/History.md +0 -0
  38. data/components/indefinido/indemma/master/Readme.md +0 -447
  39. data/components/indefinido/indemma/master/build/build.js +0 -26288
  40. data/components/indefinido/indemma/master/build/development.js +0 -22200
  41. data/components/indefinido/indemma/master/build/release.js +0 -22139
  42. data/components/indefinido/indemma/master/build/test.js +0 -22200
  43. data/components/indefinido/indemma/master/components/chaijs-assertion-error/component.json +0 -18
  44. data/components/indefinido/indemma/master/components/chaijs-assertion-error/index.js +0 -110
  45. data/components/indefinido/indemma/master/components/chaijs-chai/component.json +0 -47
  46. data/components/indefinido/indemma/master/components/chaijs-chai/index.js +0 -1
  47. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/assertion.js +0 -130
  48. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/core/assertions.js +0 -1270
  49. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/assert.js +0 -1080
  50. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/expect.js +0 -12
  51. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/should.js +0 -76
  52. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +0 -94
  53. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addMethod.js +0 -37
  54. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addProperty.js +0 -40
  55. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/eql.js +0 -129
  56. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/flag.js +0 -32
  57. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getActual.js +0 -19
  58. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +0 -25
  59. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getMessage.js +0 -49
  60. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getName.js +0 -20
  61. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getPathValue.js +0 -102
  62. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getProperties.js +0 -35
  63. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/index.js +0 -108
  64. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/inspect.js +0 -320
  65. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/objDisplay.js +0 -48
  66. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +0 -51
  67. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +0 -54
  68. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/test.js +0 -26
  69. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/transferFlags.js +0 -44
  70. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/type.js +0 -45
  71. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai.js +0 -80
  72. data/components/indefinido/indemma/master/components/component-bind/component.json +0 -14
  73. data/components/indefinido/indemma/master/components/component-bind/index.js +0 -24
  74. data/components/indefinido/indemma/master/components/component-jquery/component.json +0 -14
  75. data/components/indefinido/indemma/master/components/component-jquery/index.js +0 -9601
  76. data/components/indefinido/indemma/master/components/component-type/component.json +0 -18
  77. data/components/indefinido/indemma/master/components/component-type/index.js +0 -32
  78. data/components/indefinido/indemma/master/components/indefinido-advisable/component.json +0 -21
  79. data/components/indefinido/indemma/master/components/indefinido-advisable/index.js +0 -1
  80. data/components/indefinido/indemma/master/components/indefinido-advisable/lib/advisable.js +0 -60
  81. data/components/indefinido/indemma/master/components/indefinido-observable/component.json +0 -25
  82. data/components/indefinido/indemma/master/components/indefinido-observable/components/cjohansen-sinon/sinon.js +0 -4290
  83. data/components/indefinido/indemma/master/components/indefinido-observable/lib/observable.js +0 -323
  84. data/components/indefinido/indemma/master/components/kapit-observe-utils/component.json +0 -13
  85. data/components/indefinido/indemma/master/components/paulmillr-es6-shim/component.json +0 -17
  86. data/components/indefinido/indemma/master/components/paulmillr-es6-shim/es6-shim.js +0 -996
  87. data/components/indefinido/indemma/master/components/pluma-assimilate/component.json +0 -25
  88. data/components/indefinido/indemma/master/components/pluma-assimilate/dist/assimilate.js +0 -127
  89. data/components/indefinido/indemma/master/karma.conf.js +0 -76
  90. data/components/indefinido/indemma/master/package.json +0 -9
  91. data/components/indefinido/indemma/master/spec/record/associable_spec.js +0 -137
  92. data/components/indefinido/indemma/master/spec/record/persistable_spec.js +0 -36
  93. data/components/indefinido/indemma/master/spec/record/queryable_spec.js +0 -33
  94. data/components/indefinido/indemma/master/spec/record/resource_spec.js +0 -93
  95. data/components/indefinido/indemma/master/spec/record/rest_spec.js +0 -32
  96. data/components/indefinido/indemma/master/spec/record/restfulable_spec.js +0 -300
  97. data/components/indefinido/indemma/master/spec/record/scopable_spec.js +0 -212
  98. data/components/indefinido/indemma/master/spec/record/storable_spec.js +0 -53
  99. data/components/indefinido/indemma/master/spec/record/translationable.js +0 -28
  100. data/components/indefinido/indemma/master/spec/record/validatable_spec.js +0 -111
  101. data/components/indefinido/indemma/master/spec/record/validations/associated_spec.js +0 -43
  102. data/components/indefinido/indemma/master/spec/record/validations/confirmation_spec.js +0 -36
  103. data/components/indefinido/indemma/master/spec/record/validations/cpf_spec.js +0 -35
  104. data/components/indefinido/indemma/master/spec/record/validations/presence_spec.js +0 -28
  105. data/components/indefinido/indemma/master/spec/record/validations/remote_spec.js +0 -87
  106. data/components/indefinido/indemma/master/spec/record/validations/type_spec.js +0 -48
  107. data/components/indefinido/indemma/master/spec/record_spec.js +0 -37
  108. data/components/indefinido/indemma/master/spec/spec_helper.js +0 -11
  109. data/components/indefinido/indemma/master/spec/support/value_objects/phone.js +0 -45
  110. data/components/indefinido/indemma/master/src/lib/extensions/rivets.coffee +0 -17
  111. data/components/indefinido/indemma/master/src/lib/record/associable.coffee +0 -380
  112. data/components/indefinido/indemma/master/src/lib/record/errors.coffee +0 -20
  113. data/components/indefinido/indemma/master/src/lib/record/maid.coffee +0 -16
  114. data/components/indefinido/indemma/master/src/lib/record/persistable.coffee +0 -32
  115. data/components/indefinido/indemma/master/src/lib/record/queryable.coffee +0 -30
  116. data/components/indefinido/indemma/master/src/lib/record/resource.coffee +0 -106
  117. data/components/indefinido/indemma/master/src/lib/record/rest.coffee +0 -28
  118. data/components/indefinido/indemma/master/src/lib/record/restfulable.coffee +0 -447
  119. data/components/indefinido/indemma/master/src/lib/record/scopable.coffee +0 -294
  120. data/components/indefinido/indemma/master/src/lib/record/storable.coffee +0 -46
  121. data/components/indefinido/indemma/master/src/lib/record/translationable.coffee +0 -18
  122. data/components/indefinido/indemma/master/src/lib/record/validatable.coffee +0 -207
  123. data/components/indefinido/indemma/master/src/lib/record/validations/associated.coffee +0 -30
  124. data/components/indefinido/indemma/master/src/lib/record/validations/confirmation.coffee +0 -17
  125. data/components/indefinido/indemma/master/src/lib/record/validations/cpf.coffee +0 -57
  126. data/components/indefinido/indemma/master/src/lib/record/validations/presence.coffee +0 -16
  127. data/components/indefinido/indemma/master/src/lib/record/validations/remote.coffee +0 -61
  128. data/components/indefinido/indemma/master/src/lib/record/validations/type.coffee +0 -31
  129. data/components/indefinido/indemma/master/src/lib/record/validations/validatorable.coffee +0 -5
  130. data/components/indefinido/indemma/master/src/lib/record.coffee +0 -138
  131. data/components/indefinido/indemma/master/src/spec/record/associable_spec.coffee +0 -130
  132. data/components/indefinido/indemma/master/src/spec/record/persistable_spec.coffee +0 -30
  133. data/components/indefinido/indemma/master/src/spec/record/queryable_spec.coffee +0 -27
  134. data/components/indefinido/indemma/master/src/spec/record/resource_spec.coffee +0 -69
  135. data/components/indefinido/indemma/master/src/spec/record/rest_spec.coffee +0 -22
  136. data/components/indefinido/indemma/master/src/spec/record/restfulable_spec.coffee +0 -215
  137. data/components/indefinido/indemma/master/src/spec/record/scopable_spec.coffee +0 -191
  138. data/components/indefinido/indemma/master/src/spec/record/storable_spec.coffee +0 -40
  139. data/components/indefinido/indemma/master/src/spec/record/translationable.coffee +0 -19
  140. data/components/indefinido/indemma/master/src/spec/record/validatable_spec.coffee +0 -100
  141. data/components/indefinido/indemma/master/src/spec/record/validations/associated_spec.coffee +0 -35
  142. data/components/indefinido/indemma/master/src/spec/record/validations/confirmation_spec.coffee +0 -25
  143. data/components/indefinido/indemma/master/src/spec/record/validations/cpf_spec.coffee +0 -28
  144. data/components/indefinido/indemma/master/src/spec/record/validations/presence_spec.coffee +0 -24
  145. data/components/indefinido/indemma/master/src/spec/record/validations/remote_spec.coffee +0 -74
  146. data/components/indefinido/indemma/master/src/spec/record/validations/type_spec.coffee +0 -33
  147. data/components/indefinido/indemma/master/src/spec/record_spec.coffee +0 -23
  148. data/components/indefinido/indemma/master/src/spec/spec_helper.coffee +0 -9
  149. data/components/indefinido/indemma/master/src/spec/support/value_objects/phone.coffee +0 -30
  150. data/components/indefinido/indemma/master/vendor/object/mixin.js +0 -196
  151. data/components/indefinido/indemma/master/vendor/sinon.js +0 -4290
  152. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/index.js +0 -0
  153. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors-legacy.js +0 -0
  154. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/array.indexOf.js +0 -0
  155. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/object.create.js +0 -0
@@ -1,447 +0,0 @@
1
- merge = require('assimilate').withStrategy 'deep'
2
- type = require 'type'
3
- observable = require('observable').mixin
4
- $ = require 'jquery' # TODO remove jquery dependency and use simple promises implementation
5
- rest = require './rest.js'
6
- root = exports ? @
7
-
8
- util =
9
- model:
10
- map: (records) ->
11
- @ record for record in records
12
-
13
-
14
- restful =
15
- model:
16
- # returns an array of promises
17
- create: (params..., callback) ->
18
- throw new TypeError("No arguments provided for #{@resource}.create") unless arguments.length
19
- unless typeof callback == 'function'
20
- params.push callback
21
- callback = undefined
22
-
23
- params.unshift {} unless params.length
24
-
25
- savings = []
26
- for attributes in params
27
- # TODO accept dirty as attribute on record creation
28
- record = @ attributes
29
- record.dirty = true
30
- savings.push record.save callback
31
-
32
- $.when savings...
33
-
34
- # returns a promise
35
- # TODO move to scopable
36
- every: (conditions = {}, doned, failed) ->
37
- if typeof conditions == 'function'
38
- doned = conditions
39
- conditions = {}
40
-
41
- # TODO Consider parent resources
42
- # if @parent and not @parent._id
43
- # return callback.call @model, []
44
-
45
- $.when(rest.get.call @, conditions)
46
- .then(util.model.map )
47
- .done(doned )
48
- .fail failed
49
-
50
- first: (conditions = {}, callback) ->
51
- if typeof conditions == 'function'
52
- callback = conditions
53
- conditions = {}
54
-
55
- namespaced = conditions[@resource] || {}
56
- namespaced.limit = 1
57
- namespaced.order = 'desc'
58
-
59
- # TODO should fail when server returns more then one record
60
- @every conditions, callback
61
-
62
- # TODO better treating of arguments
63
- get: (action, data = {}) ->
64
- # TODO better way to override route
65
- old_route = @route
66
- default_route = "/#{model.pluralize @resource.name}"
67
- @route = default_route unless default_route == @route
68
-
69
- if action
70
- # TODO Get own property descriptor, or better way do override route
71
- Object.defineProperty @, 'route',
72
- value: "#{default_route}/#{action}"
73
- configurable: true
74
-
75
- # TODO not allow resource overriding
76
- resource = data.resource
77
- data = data.json() if data and data.json
78
-
79
- if resource?
80
- payload = data
81
- data = {}
82
- data[resource] = payload
83
-
84
- promise = rest.get.call @, data
85
-
86
- # TODO Get own property descriptor, or better way do override route
87
- Object.defineProperty @, 'route',
88
- value: old_route
89
- configurable: true
90
-
91
- promise
92
-
93
- put: rest.put
94
- delete: rest.delete
95
-
96
- record:
97
- ready: (callback) -> callback.call @
98
- reload: (params...) ->
99
-
100
- # TODO better signature implementation
101
- data = params.pop()
102
- params.push data if type(data) != 'object'
103
-
104
- promise = rest.get.call @, data || {}
105
- promise.done @assign_attributes
106
- promise.fail @failed
107
-
108
- @reloading = promise
109
- # Assign ready callback before, to allow promise override
110
- @ready = ->
111
- console.warn "resource.ready was deprecated, please use resource.reloading.done"
112
- promise.done arguments...
113
-
114
- # Bind one time save callbacks
115
- promise.done param for param in params
116
-
117
- promise
118
-
119
- assign_attributes: (attributes) ->
120
-
121
- # TODO only set associations on nested attributes!
122
- # First assign has_many associations
123
- # TODO implement setter on has_many association and move this code there
124
- for association_name in model[@resource.toString()].has_many
125
- associations_attributes = attributes[association_name]
126
-
127
- # TODO copy attributes object and don't change it inside the assignment method
128
- delete attributes[association_name] # Remove loaded json data
129
-
130
- # Clear current stored cache on this association
131
- # TODO implement setter on this association and let user to set
132
- # it to an empty array
133
- association = @[association_name]
134
-
135
- unless association?
136
- message = "Association '#{association_name}' not found. \n"
137
- message += "For record with resource #{@resource}. \n"
138
- message += "Probably defined on server side but not on client side.\n"
139
- message += "Skipping association assignment!"
140
- console.warn message
141
- continue
142
-
143
- # TODO implement association.clear
144
- Array.prototype.splice.call association, 0 if association.length
145
-
146
- # continue if no associations_attributes were found by the server
147
- continue unless associations_attributes? and associations_attributes.length
148
-
149
- singular_resource = model.singularize association_name
150
-
151
- # Normalize json data for building on association
152
- for association_attributes in associations_attributes
153
-
154
- # TODO only nest specified nested attributes on model definition
155
- # TODO create special deserialization method no plural association
156
- # TODO check if we need to nest attributes in other association types
157
- for association_name in model[singular_resource].has_many
158
- association_attributes["#{association_name}_attributes"] = association_attributes[association_name]
159
-
160
- # TODO copy attributes object and don't change it inside
161
- # the assignment method
162
- delete association_attributes[association_name]
163
-
164
- # Load new associations_attributes on this association
165
- association.add associations_attributes...
166
-
167
-
168
- # Nested attributes
169
- # TODO implement setter on has_one association and move this
170
- # code there
171
- for association_name in model[@resource.toString()].has_one
172
- association_attributes = attributes[association_name]
173
-
174
- # TODO copy attributes object and don't change it inside the
175
- # assignment method
176
- delete attributes[association_name]
177
- delete attributes[association_name + "_attributes"]
178
- @[association_name] = @["build_#{association_name}"] association_attributes if association_attributes
179
-
180
-
181
- # Assign remaining attributes
182
- # TODO see if it is a best practice not overriding unchanged attributes
183
- # TODO rename attributes for properties
184
- for name, attribute of attributes when attribute isnt @[name]
185
- # TODO faster object property assignment, get from model definition, instead of checking every attribute
186
- # TODO implement custom comparator for each object when es7 is out
187
- if type(attribute) == 'object'
188
- @[name] = attributes[name] if JSON.stringify(attribute) != JSON.stringify @[name]
189
- else
190
- @[name] = attributes[name]
191
-
192
- destroy: (doned, failed, data) ->
193
- throw new Error 'Can\'t delete record without id!' unless @id? or @_id?
194
-
195
- promise = rest.delete.call @, data
196
- promise.done @destroyed
197
- promise.fail @failed
198
-
199
- # Bind one time save callbacks
200
- promise.done doned
201
- promise.fail failed
202
-
203
- promise
204
-
205
- saving: false
206
- salvation: null
207
- save: (doned, failed, data) ->
208
- lock = JSON.stringify @json()
209
-
210
- # When saving and receive save command again check if the model
211
- # has changed, then abort the salvation operation and send a new
212
- # save request
213
- # TODO check dirty property instead of lock!
214
- if @saving
215
- if @lock == lock
216
- return @salvation
217
- else
218
- @salvation.abort()
219
-
220
- # TODO better lock generation
221
- @lock = lock
222
-
223
- # TODO remove jquery dependency
224
- # TODO think with wich value makes more sense to resolve the
225
- # absence of need to save the model
226
- salvation = $.Deferred().resolveWith @, null unless @dirty
227
- @saving = true
228
- salvation ||= rest[if @_id then 'put' else 'post'].call @, data
229
- @salvation = salvation
230
-
231
- salvation.done @saved
232
- salvation.fail @failed
233
- salvation.always -> @saving = false
234
-
235
- # Bind one time save callbacks
236
- salvation.done doned
237
- salvation.fail failed
238
-
239
- salvation
240
-
241
- saved: (data) ->
242
-
243
- # TODO better lock generation
244
- if @lock == JSON.stringify(@json())
245
- @dirty = false
246
- delete @lock
247
-
248
- @assign_attributes data if data?
249
-
250
- throw "Not supported after_save callback: " + callback for callback in @after_save if @after_save
251
-
252
- # Parse error json if any
253
- failed: (xhr, error, status) ->
254
- payload = xhr.responseJSON
255
- try payload ||= JSON.parse(xhr.responseText) catch e
256
- payload ||= xhr.responseText
257
-
258
- # When client fail
259
- switch xhr.status
260
- # TODO move to validatable
261
- when 0
262
- message = status or xhr.statusText
263
- switch message
264
- when 'abort'
265
- console.info "salvation probably aborted"
266
- when 'error'
267
- console.info "server probably unreachable"
268
- else
269
- throw new Error 'Unhandled status code for xhr'
270
-
271
- when 422
272
-
273
- definition = model[@resource.toString()]
274
-
275
- for attribute_name, messages of payload.errors
276
-
277
- # TODO add support for error checking message introspection
278
- # Check for association errors
279
- if (!definition.associations)
280
- # TODO update this attribute when associations are dinamically changed
281
- definition.associations = definition.has_one.concat(definition.has_many.concat(definition.belongs_to))
282
-
283
- # Only add errors to existing attributes
284
- # TODO shorten this verification
285
- unless @hasOwnProperty(attribute_name) or definition.hasOwnProperty(attribute_name) or definition.associations.indexOf(attribute_name) != -1 or attribute_name == 'base'
286
-
287
- message = "Server returned an validation error message for a attribute that is not defined in your model.\n"
288
- message += "The attribute was '#{attribute_name}', the model resource was '#{@resource}'.\n"
289
- message += "The model definition keys were '#{JSON.stringify Object.keys definition }'.\n"
290
- message += "Please remove server validation, or update your model definition."
291
- throw new TypeError message
292
-
293
- for message in messages
294
- @errors.add attribute_name, 'server', server_message: message
295
-
296
- # Unknown fail
297
- else
298
- message = "Fail in #{@resource}.save:\n"
299
- message += "Record: #{@}\n"
300
- message += "Status: #{status} (#{(payload || xhr).status})\n"
301
- message += "Error : #{payload.error || payload.message || payload}"
302
- console.log message
303
-
304
- # Finish saving
305
- @saving = false
306
-
307
- # TODO move to record.coffee
308
- toString: ->
309
- serialized = {}
310
- serialized[@resource] = @json()
311
-
312
- try
313
- # TODO figure out why it throws circular references sometines
314
- JSON.stringify serialized
315
- catch e
316
- console.warn "restfulable.toString: Failed to stringify record: #{e.message}. retrying..."
317
-
318
- for name, property of serialized
319
- delete serialized[name] if typeof property == 'object'
320
-
321
- JSON.stringify serialized
322
-
323
- # TODO move this to serializable module
324
- # TODO figure out why sometimes is rendering a circular referenced json
325
- # TODO rename to toJSON
326
- json: (methods = {}) ->
327
- json = {}
328
-
329
- definition = model[@resource.toString()]
330
-
331
- for name of @
332
- # TODO smarter way to ignore Dom node fix properties
333
- continue if observable.ignores.indexOf(name) != -1
334
-
335
- # TODO treat other associations to!
336
- # TODO create association reflection for god sake!
337
- nested = @nested_attributes.indexOf(name) != -1
338
-
339
- # Skip association attributes that are note nested TODO create
340
- # an associations array
341
- continue if not nested and (definition.belongs_to.indexOf(name) != -1 or definition.has_one.indexOf(name) != -1 or definition.has_many.indexOf(name) != -1)
342
-
343
- # TODO Bypass only undefined values so we can erase data on server
344
- value = @[name]
345
- continue unless value?
346
-
347
- nature = type value
348
- continue if nature == 'function'
349
-
350
- if nature == 'object' or nature == 'element'
351
-
352
- if nested
353
- unless value.json
354
- console.warn "json: Tryied to serialize nested attribute '#{name}' without serialization method!"
355
- continue
356
-
357
- # TODO move nested attributes to model definition and
358
- # implement toJSON there
359
- json["#{name}_attributes"] = value.json methods[name]
360
-
361
- # Serialize complex type values
362
- else if value.toJSON? || value.json?
363
- # FIXME sometimes wrong pluralization occurs and we cannot
364
- # skip association objects, so detect them and skip here
365
- continue if value.resource
366
-
367
- # TODO rename json to toJSON
368
- if value.json?
369
- json[name] = value.json methods[name]
370
- else
371
- json[name] = value.toJSON methods[name]
372
-
373
- # It is a complex type value without serializtion support so
374
- # we just ignore it
375
- else
376
- # TODO maybe log warning based on debug or info flag here?
377
- continue
378
-
379
- else
380
-
381
- # Serialize primitive type values
382
- json[name] = value
383
-
384
- # Remove observable methods and dom node properties
385
- json = observable.unobserve json
386
-
387
- # TODO Store reserved words in a array
388
- # TODO Use _.omit function
389
- # TODO Use object.defineProperty to not need to delete this properties
390
- # Remove model reserved words
391
- delete json.dirty
392
- delete json.resource
393
- delete json.route
394
- delete json.initial_route # TODO implement better initial_route and remove attribute from here
395
-
396
- delete json.after_initialize
397
- delete json.before_initialize
398
- delete json.parent_resource
399
- delete json.nested_attributes
400
-
401
- delete json.reloading
402
- delete json.ready
403
-
404
- delete json.saving
405
- delete json.salvation
406
- delete json.sustained
407
-
408
- delete json.element
409
- delete json.default
410
- delete json.lock
411
-
412
- delete json.validated
413
- delete json.validation
414
- delete json.errors
415
-
416
- json
417
-
418
-
419
- # TODO put deprecation warning on json method
420
- # TODO rename json method to toJSON
421
- restful.toJSON = restful.json
422
-
423
-
424
- # Extend indemma
425
- model = window.model # TODO better way to get parent
426
- record = window.record # TODO better way to get parent
427
-
428
- model.restfulable = true
429
-
430
- record.mix (recordable) ->
431
- merge recordable, restful.record
432
-
433
-
434
- model.mix (modelable ) ->
435
- merge modelable , restful.model
436
-
437
-
438
- model.associable && model.associable.mix (singular_association, plural_association) ->
439
-
440
- # TODO move route setting to plural_association.after_mix
441
- plural_association.get = ->
442
- @route ||= "#{@parent.route}/#{@parent._id}/#{model.pluralize @resource.name}" if @parent?
443
- rest.get.apply @, arguments
444
-
445
- plural_association.post = ->
446
- @route ||= "#{@parent.route}/#{@parent._id}/#{model.pluralize @resource.name}" if @parent?
447
- rest.post.apply @, arguments