ende 0.3.13 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +7 -0
  3. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +2 -2
  4. data/lib/assets/javascripts/aura/extensions/loader.js.coffee +13 -11
  5. data/lib/assets/javascripts/aura/extensions/mask.js.coffee +54 -40
  6. data/lib/assets/javascripts/aura/extensions/mediator.js +5 -3
  7. data/lib/assets/javascripts/aura/extensions/models.js.coffee.erb +2 -2
  8. data/lib/assets/javascripts/aura/extensions/rivets/accounting.js.coffee +7 -1
  9. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee +5 -1
  10. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +47 -29
  11. data/lib/assets/javascripts/aura/extensions/routes.js.coffee +10 -5
  12. data/lib/assets/javascripts/aura/extensions/states.js.coffee +2 -2
  13. data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +18 -19
  14. data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +15 -10
  15. data/lib/assets/javascripts/config/initializers/jquery.js.coffee +2 -1
  16. data/lib/assets/javascripts/config/initializers/requirejs.js.coffee +3 -4
  17. data/lib/assets/javascripts/config/initializers.js.coffee +3 -0
  18. data/lib/assets/javascripts/config/load_components.js.coffee +106 -83
  19. data/lib/assets/javascripts/ende.js.coffee +13 -4
  20. data/lib/assets/javascripts/widgets/authenticator/presenter.js.coffee +3 -2
  21. data/lib/assets/javascripts/widgets/dialog/main.js.coffee +7 -3
  22. data/lib/assets/javascripts/widgets/support/main.js.coffee +3 -4
  23. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +35 -103
  24. data/lib/assets/javascripts/widgets/viewer/presenters/default.js.coffee +2 -4
  25. data/lib/ende/version.rb +1 -1
  26. data/vendor/assets/components/build.js +30877 -0
  27. data/vendor/assets/components/ende_build.js +2487 -148
  28. data/vendor/assets/components/indemma_with_none.js +30553 -0
  29. data/vendor/assets/javascripts/spin/spin.js +349 -0
  30. data/vendor/components/indefinido-indemma/.gitignore +3 -0
  31. data/vendor/components/indefinido-indemma/.ruby-gemset +1 -1
  32. data/vendor/components/indefinido-indemma/.ruby-version +1 -1
  33. data/vendor/components/indefinido-indemma/build/development.js +17 -14
  34. data/vendor/components/indefinido-indemma/build/release.js +213 -148
  35. data/vendor/components/indefinido-indemma/build/test.js +213 -148
  36. data/vendor/components/indefinido-indemma/component.json +3 -1
  37. data/vendor/components/indefinido-indemma/karma.conf.js +50 -60
  38. data/vendor/components/indefinido-indemma/lib/record/associable.js +17 -17
  39. data/vendor/components/indefinido-indemma/lib/record/persistable.js +8 -1
  40. data/vendor/components/indefinido-indemma/lib/record/queryable.js +3 -0
  41. data/vendor/components/indefinido-indemma/lib/record/resource.js +25 -45
  42. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +82 -28
  43. data/vendor/components/indefinido-indemma/lib/record/scopable.js +28 -2
  44. data/vendor/components/indefinido-indemma/lib/record/storable.js +1 -1
  45. data/vendor/components/indefinido-indemma/lib/record/validatable.js +15 -23
  46. data/vendor/components/indefinido-indemma/lib/record/validations/associated.js +3 -5
  47. data/vendor/components/indefinido-indemma/lib/record/validations/confirmation.js +3 -5
  48. data/vendor/components/indefinido-indemma/lib/record/validations/cpf.js +5 -7
  49. data/vendor/components/indefinido-indemma/lib/record/validations/presence.js +3 -5
  50. data/vendor/components/indefinido-indemma/lib/record/validations/remote.js +3 -7
  51. data/vendor/components/indefinido-indemma/lib/record/validations/type.js +2 -2
  52. data/vendor/components/indefinido-indemma/lib/record/validations/validatorable.js +12 -0
  53. data/vendor/components/indefinido-indemma/package.json +9 -0
  54. data/vendor/components/indefinido-indemma/spec/record/restfulable_spec.js +12 -0
  55. data/vendor/components/indefinido-indemma/spec/record/validatable_spec.js +4 -4
  56. data/vendor/components/indefinido-indemma/spec/record/validations/associated_spec.js +2 -2
  57. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +44 -20
  58. data/vendor/components/indefinido-indemma/src/lib/record/persistable.coffee +7 -2
  59. data/vendor/components/indefinido-indemma/src/lib/record/queryable.coffee +1 -0
  60. data/vendor/components/indefinido-indemma/src/lib/record/resource.coffee +32 -32
  61. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +79 -22
  62. data/vendor/components/indefinido-indemma/src/lib/record/scopable.coffee +27 -8
  63. data/vendor/components/indefinido-indemma/src/lib/record/storable.coffee +1 -1
  64. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +20 -19
  65. data/vendor/components/indefinido-indemma/src/lib/record/validations/associated.coffee +3 -5
  66. data/vendor/components/indefinido-indemma/src/lib/record/validations/confirmation.coffee +2 -4
  67. data/vendor/components/indefinido-indemma/src/lib/record/validations/cpf.coffee +4 -5
  68. data/vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee +2 -5
  69. data/vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee +3 -7
  70. data/vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee +2 -3
  71. data/vendor/components/indefinido-indemma/src/lib/record/validations/validatorable.coffee +5 -0
  72. data/vendor/components/indefinido-indemma/src/spec/record/restfulable_spec.coffee +8 -0
  73. data/vendor/components/indefinido-indemma/src/spec/record/validatable_spec.coffee +4 -4
  74. data/vendor/components/indefinido-indemma/src/spec/record/validations/associated_spec.coffee +2 -2
  75. metadata +9 -3
  76. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~ +0 -0
@@ -3,11 +3,12 @@ type = require 'type'
3
3
  observable = require('observable').mixin
4
4
  $ = require 'jquery' # TODO remove jquery dependency and use simple promises implementation
5
5
  rest = require './rest.js'
6
+ root = exports ? @
6
7
 
7
8
  util =
8
9
  model:
9
- map: (models) ->
10
- @ model for model in models
10
+ map: (records) ->
11
+ @ record for record in records
11
12
 
12
13
 
13
14
  restful =
@@ -32,9 +33,9 @@ restful =
32
33
 
33
34
  # returns a promise
34
35
  # TODO move to scopable
35
- all: (conditions = {}, callback) ->
36
+ all: (conditions = {}, doned, failed) ->
36
37
  if typeof conditions == 'function'
37
- callback = conditions
38
+ doned = conditions
38
39
  conditions = {}
39
40
 
40
41
  # TODO Consider parent resources
@@ -44,7 +45,8 @@ restful =
44
45
 
45
46
  $.when(rest.get.call @, conditions)
46
47
  .then(util.model.map )
47
- .done callback
48
+ .done(doned )
49
+ .fail failed
48
50
 
49
51
  first: (conditions = {}, callback) ->
50
52
  if typeof conditions == 'function'
@@ -61,9 +63,15 @@ restful =
61
63
  # TODO better treating of arguments
62
64
  get: (action, data = {}) ->
63
65
  # TODO better way to override route
64
- old_route = @route
65
- @route = "/#{model.pluralize @resource.name}"
66
- @route += "/#{action}" if action
66
+ old_route = @route
67
+ default_route = "/#{model.pluralize @resource.name}"
68
+ @route = default_route unless default_route == @route
69
+
70
+ if action
71
+ # TODO Get own property descriptor, or better way do override route
72
+ Object.defineProperty @, 'route',
73
+ value: "#{default_route}/#{action}"
74
+ configurable: true
67
75
 
68
76
  # TODO not allow resource overriding
69
77
  resource = data.resource
@@ -76,7 +84,10 @@ restful =
76
84
 
77
85
  promise = rest.get.call @, data
78
86
 
79
- route = old_route
87
+ # TODO Get own property descriptor, or better way do override route
88
+ Object.defineProperty @, 'route',
89
+ value: old_route
90
+ configurable: true
80
91
 
81
92
  promise
82
93
 
@@ -84,6 +95,7 @@ restful =
84
95
  delete: rest.delete
85
96
 
86
97
  record:
98
+ ready: (callback) -> callback.call @
87
99
  reload: (params...) ->
88
100
 
89
101
  # TODO better signature implementation
@@ -94,6 +106,12 @@ restful =
94
106
  promise.done @assign_attributes
95
107
  promise.fail @failed
96
108
 
109
+ @reloading = promise
110
+ # Assign ready callback before, to allow promise override
111
+ @ready = ->
112
+ console.warn "resource.ready was deprecated, please use resource.reloading.done"
113
+ promise.done arguments...
114
+
97
115
  # Bind one time save callbacks
98
116
  promise.done param for param in params
99
117
 
@@ -163,8 +181,14 @@ restful =
163
181
 
164
182
  # Assign remaining attributes
165
183
  # TODO see if it is a best practice not overriding unchanged attributes
166
- for attribute of attributes when attribute isnt @[attribute]
167
- @[attribute] = attributes[attribute]
184
+ # TODO rename attributes for properties
185
+ for name, attribute of attributes when attribute isnt @[name]
186
+ # TODO faster object property assignment, get from model definition, instead of checking every attribute
187
+ # TODO implement custom comparator for each object when es7 is out
188
+ if type(attribute) == 'object'
189
+ @[name] = attributes[name] if JSON.stringify(attribute) != JSON.stringify @[name]
190
+ else
191
+ @[name] = attributes[name]
168
192
 
169
193
  destroy: (doned, failed, data) ->
170
194
  throw new Error 'Can\'t delete record without id!' unless @id? or @_id?
@@ -182,18 +206,28 @@ restful =
182
206
  saving: false
183
207
  salvation: null
184
208
  save: (doned, failed, data) ->
185
- return @salvation if @saving
209
+ lock = JSON.stringify @json()
210
+
211
+ # When saving and receive save command again check if the model
212
+ # has changed, then abort the salvation operation and send a new
213
+ # save request
214
+ # TODO check dirty property instead of lock!
215
+ if @saving
216
+ if @lock == lock
217
+ return @salvation
218
+ else
219
+ @salvation.abort()
186
220
 
187
221
  # TODO better lock generation
188
- @lock = JSON.stringify @json()
222
+ @lock = lock
189
223
 
190
224
  # TODO remove jquery dependency
191
225
  # TODO think with wich value makes more sense to resolve the
192
226
  # absence of need to save the model
193
227
  salvation = $.Deferred().resolveWith @, null unless @dirty
228
+ @saving = true
194
229
  salvation ||= rest[if @_id then 'put' else 'post'].call @, data
195
230
  @salvation = salvation
196
- @saving = true
197
231
 
198
232
  salvation.done @saved
199
233
  salvation.fail @failed
@@ -211,9 +245,6 @@ restful =
211
245
  if @lock == JSON.stringify(@json())
212
246
  @dirty = false
213
247
  delete @lock
214
- # Delayed optimistic lock
215
- else
216
- return @save()
217
248
 
218
249
  @assign_attributes data if data?
219
250
 
@@ -225,13 +256,22 @@ restful =
225
256
  try payload ||= JSON.parse(xhr.responseText) catch e
226
257
  payload ||= xhr.responseText
227
258
 
228
-
229
259
  # When client fail
230
260
  switch xhr.status
231
261
  # TODO move to validatable
262
+ when 0
263
+ message = status or xhr.statusText
264
+ switch message
265
+ when 'abort'
266
+ console.info "salvation probably aborted"
267
+ when 'error'
268
+ console.info "server probably unreachable"
269
+ else
270
+ throw new Error 'Unhandled status code for xhr'
271
+
232
272
  when 422
233
273
 
234
- definition = model[@resource]
274
+ definition = model[@resource.toString()]
235
275
 
236
276
  for attribute_name, messages of payload.errors
237
277
 
@@ -258,8 +298,9 @@ restful =
258
298
  else
259
299
  message = "Fail in #{@resource}.save:\n"
260
300
  message += "Record: #{@}\n"
261
- message += "Status: #{status} (#{payload.status || xhr.status})\n"
301
+ message += "Status: #{status} (#{(payload || xhr).status})\n"
262
302
  message += "Error : #{payload.error || payload.message || payload}"
303
+ console.log message
263
304
 
264
305
  # Finish saving
265
306
  @saving = false
@@ -272,8 +313,17 @@ restful =
272
313
  json: (methods = {}) ->
273
314
  json = {}
274
315
 
275
- for name, value of @ when type(value) isnt 'function'
276
- continue unless value? # Bypass null, and undefined values
316
+ definition = model[@resource.toString()]
317
+
318
+ for name of @ when type(value)
319
+ # TODO treat other associations to!
320
+ # TODO create association reflection for god sake!
321
+ continue if definition.belongs_to.indexOf(name) != -1 and @nested_attributes.indexOf(name) == -1
322
+
323
+ # TODO Bypass only undefined values so we can erase data on server
324
+ value = @[name]
325
+ continue unless value?
326
+ continue if type(value) == 'function'
277
327
 
278
328
  if type(value) == 'object'
279
329
 
@@ -302,16 +352,23 @@ restful =
302
352
  delete json.resource
303
353
  delete json.route
304
354
  delete json.initial_route # TODO implement better initial_route and remove attribute from here
355
+
305
356
  delete json.after_initialize
306
357
  delete json.before_initialize
307
358
  delete json.parent_resource
308
359
  delete json.nested_attributes
360
+
361
+ delete json.reloading
362
+ delete json.ready
363
+
309
364
  delete json.saving
310
365
  delete json.salvation
311
366
  delete json.sustained
367
+
312
368
  delete json.element
313
369
  delete json.default
314
370
  delete json.lock
371
+
315
372
  delete json.validated
316
373
  delete json.validation
317
374
 
@@ -1,13 +1,20 @@
1
1
  require './restfulable'
2
2
  require './resource'
3
3
 
4
- stampit = require '../../vendor/stampit'
5
- extend = require 'assimilate'
6
- merge = extend.withStrategy 'deep'
7
- $ = require 'jquery'
8
- rest = require './rest'
9
-
4
+ stampit = require '../../vendor/stampit'
5
+ extend = require 'assimilate'
6
+ observable = require('observable').mixin
7
+ merge = extend.withStrategy 'deep'
8
+ $ = require 'jquery'
9
+ rest = require './rest'
10
+
11
+ # TODO merge all with fetch and remove this util object
12
+ util =
13
+ model:
14
+ map: (records) ->
15
+ (@build or @).call @, record for record, index in records
10
16
 
17
+ # TODO better responsibilty division for this code
11
18
  scopable =
12
19
  builder: stampit().enclose ->
13
20
 
@@ -35,7 +42,13 @@ scopable =
35
42
  fail: []
36
43
  declared: []
37
44
  fetch: (data, done, fail) ->
45
+
46
+ if typeof data == 'function'
47
+ done = data
48
+ data = {}
49
+
38
50
  scope = extend {}, @scope.data
51
+ observable.unobserve scope
39
52
 
40
53
  if scope.noned?
41
54
  deferred = $.Deferred()
@@ -44,8 +57,9 @@ scopable =
44
57
  deferred = rest.get.call(@, extend scope, data)
45
58
 
46
59
  deferred
47
- .done(@scope.then.concat done)
48
- .fail([@scope.fail, fail])
60
+ .then(util.model.map)
61
+ .done(@scope.then.concat [done])
62
+ .fail(@scope.fail.concat [fail])
49
63
 
50
64
  @scope.clear()
51
65
 
@@ -85,7 +99,12 @@ scopable =
85
99
  @scope.data.noned = true
86
100
  @
87
101
 
102
+ # TODO merge with all object
88
103
  fetch: (data, done, fail) ->
104
+ if typeof data == 'function'
105
+ done = data
106
+ data = null
107
+
89
108
  @scope.fetch.call @, data, done, fail
90
109
 
91
110
  # TODO optmize this iterations or add support for stampit on associable and merge factories
@@ -19,7 +19,7 @@ storable = stampit
19
19
  @writes++
20
20
 
21
21
  # TODO use object.defineProperty
22
- value.sustained = true
22
+ value.sustained ||= true
23
23
  collection[key] = value
24
24
 
25
25
  values: ->
@@ -1,6 +1,6 @@
1
1
  require './translationable'
2
2
 
3
- root = exports ? window
3
+ root = exports ? @
4
4
  stampit = require '../../vendor/stampit'
5
5
  observable = require('observable').mixin
6
6
  type = require 'type'
@@ -90,9 +90,9 @@ initializers =
90
90
  # TODO only execute save operation if record is valid
91
91
  @before 'save', -> @validate() if @save
92
92
 
93
- # TODO move this functionality control to validatorable
93
+ # TODO move this functionality control to validatable
94
94
  @validated = false
95
- @subscribe 'dirty', (value) -> @validated = false
95
+ @subscribe 'dirty', (value) -> value and @validated = false
96
96
 
97
97
  Object.defineProperty @, 'valid',
98
98
  get: ->
@@ -173,7 +173,16 @@ extensions =
173
173
  @validation.fail failed
174
174
 
175
175
  # TODO store this callback
176
- @validation.then (record) -> record.validated = true
176
+ @validation.then (record) ->
177
+ # Disable dirty checking to prevent validation believe that
178
+ # the model values has changed
179
+ old_dirty = record.dirty
180
+ record.dirty = null
181
+
182
+ record.validated ||= true
183
+
184
+ # Restore dirty state
185
+ record.dirty = old_dirty
177
186
 
178
187
  @validation
179
188
 
@@ -188,11 +197,6 @@ manager =
188
197
  # builder = @validators[name] ||= require "validations/#{name}"
189
198
 
190
199
 
191
- validatable = stampit
192
- validate: -> throw new Error 'Composed factory must override the validate method'
193
- validate_each: -> throw new Error 'Composed factory must override the validate each method'
194
-
195
-
196
200
  # TODO better stampit integration
197
201
  model.mix (modelable) ->
198
202
  jQuery.extend modelable, extensions.model
@@ -204,14 +208,11 @@ model.mix (modelable) ->
204
208
 
205
209
  model.validators = manager.validators
206
210
 
207
- # Globalize definitions
208
- root.validatable = validatable
209
- root.manager = manager
210
-
211
211
  # TODO async validator loading
212
- require './validations/confirmation'
213
- require './validations/associated'
214
- require './validations/presence'
215
- require './validations/remote'
216
- require './validations/type'
217
- require './validations/cpf'
212
+ manager.validators.confirmation = require './validations/confirmation'
213
+ manager.validators.associated = require './validations/associated'
214
+ manager.validators.presence = require './validations/presence'
215
+ manager.validators.remote = require './validations/remote'
216
+ manager.validators.type = require './validations/type'
217
+ manager.validators.cpf = require './validations/cpf'
218
+
@@ -1,10 +1,9 @@
1
1
  # TODO Add base settings to validation
2
2
  # model = window.model
3
-
4
3
  # TODO implement method
4
+
5
5
  # model[resource].validators_on 'field' # Get all validators related to this field
6
6
 
7
- validations = require '../validatable'
8
7
  stampit = require '../../../vendor/stampit'
9
8
 
10
9
  associationable = stampit
@@ -26,7 +25,6 @@ associationable = stampit
26
25
  associated_validation
27
26
 
28
27
 
29
- composed = stampit.compose(validations.validatable, associationable)
28
+ composed = stampit.compose(require('./validatorable'), associationable)
30
29
  composed.definition_key = 'validates_associated'
31
-
32
- validations.manager.validators.association = composed
30
+ module.exports = composed
@@ -4,7 +4,6 @@
4
4
  # TODO implement method
5
5
  # model[resource].validators_on 'field' # Get all validators related to this field
6
6
 
7
- validations = require '../validatable'
8
7
  stampit = require '../../../vendor/stampit'
9
8
 
10
9
  confirmationable = stampit
@@ -13,7 +12,6 @@ confirmationable = stampit
13
12
  record.errors.add "#{attribute}_confirmation", 'confirmation', @options
14
13
 
15
14
 
16
- composed = stampit.compose(validations.validatable, confirmationable)
15
+ composed = stampit.compose require('./validatorable'), confirmationable
17
16
  composed.definition_key = 'validates_confirmation_of'
18
-
19
- validations.manager.validators.confirmation = composed
17
+ module.exports = composed
@@ -4,7 +4,6 @@
4
4
  # TODO implement method
5
5
  # model[resource].validators_on 'field' # Get all validators related to this field
6
6
 
7
- validations = require '../validatable'
8
7
  stampit = require '../../../vendor/stampit'
9
8
 
10
9
  cpfable = stampit
@@ -24,7 +23,7 @@ cpfable = stampit
24
23
  v = false
25
24
  i = 0
26
25
 
27
- for i in [1..9]
26
+ for i in [0..9]
28
27
  d1 += c.charAt(i) * (10 - i)
29
28
 
30
29
  return false if d1 == 0
@@ -35,7 +34,7 @@ cpfable = stampit
35
34
  return false if +dv.charAt(0) != d1
36
35
 
37
36
  d1 *= 2
38
- for i in [1..9]
37
+ for i in [0..9]
39
38
  d1 += c.charAt(i) * (11 - i)
40
39
 
41
40
 
@@ -53,6 +52,6 @@ cpfable = stampit
53
52
 
54
53
 
55
54
 
56
- composed = stampit.compose validations.validatable, cpfable
55
+ composed = stampit.compose require('./validatorable'), cpfable
57
56
  composed.definition_key = 'validates_cpf_format'
58
- validations.manager.validators.cpf = composed
57
+ module.exports = composed
@@ -4,7 +4,6 @@
4
4
  # TODO implement method
5
5
  # model[resource].validators_on 'field' # Get all validators related to this field
6
6
 
7
- validations = require '../validatable'
8
7
  stampit = require '../../../vendor/stampit'
9
8
 
10
9
  presenceable = stampit
@@ -12,8 +11,6 @@ presenceable = stampit
12
11
  if value == null or value == '' or value == undefined
13
12
  record.errors.add attribute, 'blank', @options
14
13
 
15
-
16
- composed = stampit.compose(validations.validatable, presenceable)
14
+ composed = stampit.compose require('./validatorable'), presenceable
17
15
  composed.definition_key = 'validates_presence_of'
18
-
19
- validations.manager.validators.presence = composed
16
+ module.exports = composed
@@ -1,12 +1,9 @@
1
1
  # TODO Add base settings to validation
2
2
  # model = window.model
3
3
 
4
- # TODO implement method
4
+ # TODO implement method
5
5
  # model[resource].validators_on 'field' # Get all validators related to this field
6
6
 
7
- root = exports ? window
8
-
9
- validations = require '../validatable'
10
7
  rest = require '../rest'
11
8
  stampit = require '../../../vendor/stampit'
12
9
 
@@ -59,7 +56,6 @@ remoteable = stampit
59
56
  @
60
57
 
61
58
 
62
- composed = stampit.compose(validations.validatable, remoteable)
59
+ composed = stampit.compose require('./validatorable'), remoteable
63
60
  composed.definition_key = 'validates_remotely'
64
-
65
- validations.manager.validators.remote = composed
61
+ module.exports = composed
@@ -26,7 +26,6 @@ typeable = stampit
26
26
  throw new Error "Invalid attribute value type! Found #{typeof value} expected #{@type.name}"
27
27
 
28
28
 
29
- composed = stampit.compose(validations.validatable, typeable)
29
+ composed = stampit.compose require('./validatorable'), typeable
30
30
  composed.definition_key = 'validates_type_of'
31
-
32
- validations.manager.validators.type = composed
31
+ module.exports = composed
@@ -0,0 +1,5 @@
1
+ stampit = require '../../../vendor/stampit'
2
+
3
+ module.exports = stampit
4
+ validate: -> throw new Error 'Composed factory must override the validate method'
5
+ validate_each: -> throw new Error 'Composed factory must override the validate each method'
@@ -105,6 +105,14 @@ describe 'restfulable', ->
105
105
  belongs_to: 'person'
106
106
 
107
107
  # TODO implement setter on has many association and move this code to there
108
+ it 'should not assign attribute with the same value twice', ->
109
+ object = {}
110
+
111
+ arthur = person name: object
112
+ arthur.assign_attributes name: {}
113
+
114
+ arthur.name.should.not.be.eq object
115
+
108
116
  it 'assigns associations properly', ->
109
117
  arthur = person name: 'Arthur Dent'
110
118
  ford = friend name: 'Ford Perfect'
@@ -13,11 +13,11 @@ describe 'model', ->
13
13
  person.should.have.property 'validators'
14
14
  person.validators.should.be.an 'array'
15
15
 
16
- describe '#()', ->
16
+ describe '(validates_... : ...)', ->
17
17
 
18
18
  describe 'validators instatiation', ->
19
19
 
20
- it 'should instantiate validators with prefix validates_', ->
20
+ it 'should have validators', ->
21
21
  person = model.call
22
22
  resource : 'person'
23
23
  name : String
@@ -27,7 +27,7 @@ describe 'model', ->
27
27
  validator = person.validators[0]
28
28
  validator.should.have.property 'attribute_name', 'name'
29
29
 
30
- it 'should instantiate validators with in the key validates'
30
+ it 'should have validators with in the key validates'
31
31
  #person = model.call
32
32
  # resource : 'person'
33
33
  # name : String
@@ -35,7 +35,7 @@ describe 'model', ->
35
35
 
36
36
  #person.validators.should.have.key 'name'
37
37
 
38
- describe '#validate_attribute', ->
38
+ describe '.validate_attribute()', ->
39
39
 
40
40
  beforeEach ->
41
41
  # TODO implement better model redefinition pattern
@@ -2,7 +2,7 @@ root = exports ? window
2
2
 
3
3
  require 'indemma/lib/record/validatable'
4
4
 
5
- describe 'model #() validates_associated', ->
5
+ describe 'model ( validates_associated: ... )', ->
6
6
 
7
7
  describe 'basic usage', ->
8
8
  model = root.model
@@ -23,7 +23,7 @@ describe 'model #() validates_associated', ->
23
23
  person.validators.length = 0
24
24
  address.validators.length = 0
25
25
 
26
- describe '#validate', ->
26
+ describe '.validate()', ->
27
27
 
28
28
  it 'should add error to record when fields does not match', ->
29
29
  arthur = person {}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ende
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heitor Salazar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-25 00:00:00.000000000 Z
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -79,7 +79,6 @@ files:
79
79
  - lib/assets/javascripts/aura/extensions/rivets.js.coffee
80
80
  - lib/assets/javascripts/aura/extensions/rivets/accounting.js.coffee
81
81
  - lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee
82
- - lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~
83
82
  - lib/assets/javascripts/aura/extensions/routes.js.coffee
84
83
  - lib/assets/javascripts/aura/extensions/states.js.coffee
85
84
  - lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee
@@ -87,6 +86,7 @@ files:
87
86
  - lib/assets/javascripts/aura/extensions/widget/napable.js.coffee
88
87
  - lib/assets/javascripts/aura/extensions/widget/presentable.js.coffee
89
88
  - lib/assets/javascripts/aura/presentable.js.coffee
89
+ - lib/assets/javascripts/config/initializers.js.coffee
90
90
  - lib/assets/javascripts/config/initializers/jquery.js.coffee
91
91
  - lib/assets/javascripts/config/initializers/requirejs.js.coffee
92
92
  - lib/assets/javascripts/config/load_components.js.coffee
@@ -140,8 +140,10 @@ files:
140
140
  - lib/ende/version.rb
141
141
  - lib/tasks/.gitkeep
142
142
  - vendor/assets/components/build.css
143
+ - vendor/assets/components/build.js
143
144
  - vendor/assets/components/ende_build.css
144
145
  - vendor/assets/components/ende_build.js
146
+ - vendor/assets/components/indemma_with_none.js
145
147
  - vendor/assets/javascripts/accounting/accounting.js
146
148
  - vendor/assets/javascripts/ende/build.js
147
149
  - vendor/assets/javascripts/jquery/inputmask.extensions.js
@@ -150,6 +152,7 @@ files:
150
152
  - vendor/assets/javascripts/jquery/inview.js
151
153
  - vendor/assets/javascripts/lennon/lennon.js
152
154
  - vendor/assets/javascripts/shims/es6-map-shim.js
155
+ - vendor/assets/javascripts/spin/spin.js
153
156
  - vendor/assets/javascripts/stampit/stampit.js
154
157
  - vendor/components/KapIT-observe-utils/component.json
155
158
  - vendor/components/KapIT-observe-utils/lib/observe-utils.js
@@ -286,6 +289,8 @@ files:
286
289
  - vendor/components/indefinido-indemma/lib/record/validations/presence.js
287
290
  - vendor/components/indefinido-indemma/lib/record/validations/remote.js
288
291
  - vendor/components/indefinido-indemma/lib/record/validations/type.js
292
+ - vendor/components/indefinido-indemma/lib/record/validations/validatorable.js
293
+ - vendor/components/indefinido-indemma/package.json
289
294
  - vendor/components/indefinido-indemma/spec/record/associable_spec.js
290
295
  - vendor/components/indefinido-indemma/spec/record/persistable_spec.js
291
296
  - vendor/components/indefinido-indemma/spec/record/queryable_spec.js
@@ -325,6 +330,7 @@ files:
325
330
  - vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee
326
331
  - vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee
327
332
  - vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee
333
+ - vendor/components/indefinido-indemma/src/lib/record/validations/validatorable.coffee
328
334
  - vendor/components/indefinido-indemma/src/spec/record/associable_spec.coffee
329
335
  - vendor/components/indefinido-indemma/src/spec/record/persistable_spec.coffee
330
336
  - vendor/components/indefinido-indemma/src/spec/record/queryable_spec.coffee