ende 0.5.20 → 0.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +1 -1
  3. data/components/indefinido/indemma/master/.gitignore +17 -0
  4. data/components/indefinido/indemma/master/.ruby-gemset +1 -0
  5. data/components/indefinido/indemma/master/.ruby-version +1 -0
  6. data/components/indefinido/indemma/master/Gemfile +12 -0
  7. data/components/indefinido/indemma/master/Guardfile +39 -0
  8. data/components/indefinido/indemma/master/History.md +0 -0
  9. data/components/indefinido/indemma/master/Readme.md +445 -0
  10. data/components/indefinido/indemma/master/build/development.js +26123 -0
  11. data/components/indefinido/indemma/master/build/release.js +16741 -0
  12. data/components/indefinido/indemma/master/build/test.js +26123 -0
  13. data/components/indefinido/indemma/master/component.json +1 -1
  14. data/components/indefinido/indemma/master/components/chaijs/assertion-error/1.0.0/component.json +18 -0
  15. data/components/indefinido/indemma/master/components/chaijs/assertion-error/1.0.0/index.js +110 -0
  16. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.gitignore +22 -0
  17. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.mailmap +1 -0
  18. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.npmignore +14 -0
  19. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.travis.yml +14 -0
  20. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/CONTRIBUTING.md +173 -0
  21. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/History.md +895 -0
  22. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/Makefile +93 -0
  23. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/README.md +99 -0
  24. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/ReleaseNotes.md +482 -0
  25. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/bower.json +27 -0
  26. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/chai.js +4782 -0
  27. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/component.json +50 -0
  28. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/index.js +1 -0
  29. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/karma.conf.js +28 -0
  30. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/karma.sauce.js +41 -0
  31. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/assertion.js +130 -0
  32. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/config.js +50 -0
  33. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/core/assertions.js +1314 -0
  34. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/assert.js +1056 -0
  35. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/expect.js +12 -0
  36. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/should.js +78 -0
  37. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addChainableMethod.js +111 -0
  38. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addMethod.js +43 -0
  39. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addProperty.js +40 -0
  40. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/flag.js +32 -0
  41. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getActual.js +18 -0
  42. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getEnumerableProperties.js +25 -0
  43. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getMessage.js +49 -0
  44. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getName.js +20 -0
  45. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getPathValue.js +102 -0
  46. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getProperties.js +35 -0
  47. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/index.js +114 -0
  48. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/inspect.js +320 -0
  49. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/objDisplay.js +49 -0
  50. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteChainableMethod.js +53 -0
  51. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteMethod.js +51 -0
  52. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteProperty.js +54 -0
  53. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/test.js +26 -0
  54. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/transferFlags.js +44 -0
  55. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/type.js +45 -0
  56. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai.js +87 -0
  57. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/package.json +42 -0
  58. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/sauce.browsers.js +128 -0
  59. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/support/sauce/sauce_connect_block.sh +7 -0
  60. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/support/sauce/sauce_connect_setup.sh +53 -0
  61. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/assert.js +638 -0
  62. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/auth/.gitkeep +0 -0
  63. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/bootstrap/index.js +22 -0
  64. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/bootstrap/karma.js +22 -0
  65. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/configuration.js +133 -0
  66. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/display/errors.js +14 -0
  67. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/display/message.js +47 -0
  68. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/expect.js +814 -0
  69. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/globalShould.js +15 -0
  70. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/plugins.js +24 -0
  71. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/should.js +744 -0
  72. data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/utilities.js +309 -0
  73. data/components/indefinido/indemma/master/components/chaijs/deep-eql/0.1.3/component.json +20 -0
  74. data/components/indefinido/indemma/master/components/chaijs/deep-eql/0.1.3/lib/eql.js +257 -0
  75. data/components/indefinido/indemma/master/components/chaijs/type-detect/0.1.1/component.json +18 -0
  76. data/components/indefinido/indemma/master/components/chaijs/type-detect/0.1.1/lib/type.js +142 -0
  77. data/components/indefinido/indemma/master/components/component/bind/1.0.0/component.json +14 -0
  78. data/components/indefinido/indemma/master/components/component/bind/1.0.0/index.js +23 -0
  79. data/components/indefinido/indemma/master/components/component/jquery/1.0.0/component.json +10 -0
  80. data/components/indefinido/indemma/master/components/component/jquery/1.0.0/index.js +10308 -0
  81. data/components/indefinido/indemma/master/components/component/type/1.0.0/component.json +20 -0
  82. data/components/indefinido/indemma/master/components/component/type/1.0.0/index.js +32 -0
  83. data/components/indefinido/indemma/master/components/indefinido/advisable/master/component.json +21 -0
  84. data/components/indefinido/indemma/master/components/indefinido/advisable/master/index.js +1 -0
  85. data/components/indefinido/indemma/master/components/indefinido/advisable/master/lib/advisable.js +60 -0
  86. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/component.json +39 -0
  87. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/index.js +1 -0
  88. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/adapters/rivets.js +40 -0
  89. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/legacy/notifierable.js +145 -0
  90. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/legacy/schedulerable.js +147 -0
  91. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/lookup.js +38 -0
  92. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/keypath_observer.js +38 -0
  93. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/observation.js +45 -0
  94. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/selection.js +57 -0
  95. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/self_observer.js +38 -0
  96. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable.js +97 -0
  97. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/platform.js +12 -0
  98. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/observe-js/observe.js +1631 -0
  99. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/accessors-legacy.js +92 -0
  100. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/accessors.js +248 -0
  101. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/array.indexOf.js +8 -0
  102. data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/object.create.js +77 -0
  103. data/components/indefinido/indemma/master/components/pluma/assimilate/0.4.0/component.json +25 -0
  104. data/components/indefinido/indemma/master/components/pluma/assimilate/0.4.0/dist/assimilate.js +127 -0
  105. data/components/indefinido/indemma/master/karma.conf.js +75 -0
  106. data/components/indefinido/indemma/master/lib/record/associable.js +4 -2
  107. data/components/indefinido/indemma/master/lib/record/dirtyable.js +1 -1
  108. data/components/indefinido/indemma/master/package.json +9 -0
  109. data/components/indefinido/indemma/master/spec/record/associable_spec.js +211 -0
  110. data/components/indefinido/indemma/master/spec/record/dirtyable_spec.js +57 -0
  111. data/components/indefinido/indemma/master/spec/record/maid_spec.js +40 -0
  112. data/components/indefinido/indemma/master/spec/record/persistable_spec.js +46 -0
  113. data/components/indefinido/indemma/master/spec/record/queryable_spec.js +39 -0
  114. data/components/indefinido/indemma/master/spec/record/resource_spec.js +93 -0
  115. data/components/indefinido/indemma/master/spec/record/rest_spec.js +32 -0
  116. data/components/indefinido/indemma/master/spec/record/restfulable_spec.js +346 -0
  117. data/components/indefinido/indemma/master/spec/record/scopable_spec.js +242 -0
  118. data/components/indefinido/indemma/master/spec/record/storable_spec.js +44 -0
  119. data/components/indefinido/indemma/master/spec/record/translationable.js +28 -0
  120. data/components/indefinido/indemma/master/spec/record/validatable_spec.js +142 -0
  121. data/components/indefinido/indemma/master/spec/record/validations/associated_spec.js +43 -0
  122. data/components/indefinido/indemma/master/spec/record/validations/confirmation_spec.js +36 -0
  123. data/components/indefinido/indemma/master/spec/record/validations/cpf_spec.js +34 -0
  124. data/components/indefinido/indemma/master/spec/record/validations/presence_spec.js +28 -0
  125. data/components/indefinido/indemma/master/spec/record/validations/remote_spec.js +87 -0
  126. data/components/indefinido/indemma/master/spec/record/validations/type_spec.js +48 -0
  127. data/components/indefinido/indemma/master/spec/record_spec.js +49 -0
  128. data/components/indefinido/indemma/master/spec/spec_helper.js +15 -0
  129. data/components/indefinido/indemma/master/spec/support/value_objects/phone.js +45 -0
  130. data/components/indefinido/indemma/master/src/lib/extensions/rivets.coffee +17 -0
  131. data/components/indefinido/indemma/master/src/lib/record/associable.coffee +419 -0
  132. data/components/indefinido/indemma/master/src/lib/record/dirtyable.coffee +47 -0
  133. data/components/indefinido/indemma/master/src/lib/record/errors.coffee +20 -0
  134. data/components/indefinido/indemma/master/src/lib/record/maid.coffee +16 -0
  135. data/components/indefinido/indemma/master/src/lib/record/persistable.coffee +34 -0
  136. data/components/indefinido/indemma/master/src/lib/record/queryable.coffee +29 -0
  137. data/components/indefinido/indemma/master/src/lib/record/resource.coffee +107 -0
  138. data/components/indefinido/indemma/master/src/lib/record/rest.coffee +34 -0
  139. data/components/indefinido/indemma/master/src/lib/record/restfulable.coffee +487 -0
  140. data/components/indefinido/indemma/master/src/lib/record/scopable.coffee +279 -0
  141. data/components/indefinido/indemma/master/src/lib/record/storable.coffee +49 -0
  142. data/components/indefinido/indemma/master/src/lib/record/translationable.coffee +18 -0
  143. data/components/indefinido/indemma/master/src/lib/record/validatable.coffee +241 -0
  144. data/components/indefinido/indemma/master/src/lib/record/validations/associated.coffee +34 -0
  145. data/components/indefinido/indemma/master/src/lib/record/validations/confirmation.coffee +17 -0
  146. data/components/indefinido/indemma/master/src/lib/record/validations/cpf.coffee +57 -0
  147. data/components/indefinido/indemma/master/src/lib/record/validations/presence.coffee +16 -0
  148. data/components/indefinido/indemma/master/src/lib/record/validations/remote.coffee +61 -0
  149. data/components/indefinido/indemma/master/src/lib/record/validations/type.coffee +31 -0
  150. data/components/indefinido/indemma/master/src/lib/record/validations/validatorable.coffee +5 -0
  151. data/components/indefinido/indemma/master/src/lib/record.coffee +143 -0
  152. data/components/indefinido/indemma/master/src/spec/record/associable_spec.coffee +205 -0
  153. data/components/indefinido/indemma/master/src/spec/record/dirtyable_spec.coffee +47 -0
  154. data/components/indefinido/indemma/master/src/spec/record/maid_spec.coffee +34 -0
  155. data/components/indefinido/indemma/master/src/spec/record/persistable_spec.coffee +39 -0
  156. data/components/indefinido/indemma/master/src/spec/record/queryable_spec.coffee +33 -0
  157. data/components/indefinido/indemma/master/src/spec/record/resource_spec.coffee +69 -0
  158. data/components/indefinido/indemma/master/src/spec/record/rest_spec.coffee +22 -0
  159. data/components/indefinido/indemma/master/src/spec/record/restfulable_spec.coffee +257 -0
  160. data/components/indefinido/indemma/master/src/spec/record/scopable_spec.coffee +227 -0
  161. data/components/indefinido/indemma/master/src/spec/record/storable_spec.coffee +39 -0
  162. data/components/indefinido/indemma/master/src/spec/record/translationable.coffee +19 -0
  163. data/components/indefinido/indemma/master/src/spec/record/validatable_spec.coffee +127 -0
  164. data/components/indefinido/indemma/master/src/spec/record/validations/associated_spec.coffee +35 -0
  165. data/components/indefinido/indemma/master/src/spec/record/validations/confirmation_spec.coffee +25 -0
  166. data/components/indefinido/indemma/master/src/spec/record/validations/cpf_spec.coffee +27 -0
  167. data/components/indefinido/indemma/master/src/spec/record/validations/presence_spec.coffee +24 -0
  168. data/components/indefinido/indemma/master/src/spec/record/validations/remote_spec.coffee +74 -0
  169. data/components/indefinido/indemma/master/src/spec/record/validations/type_spec.coffee +33 -0
  170. data/components/indefinido/indemma/master/src/spec/record_spec.coffee +29 -0
  171. data/components/indefinido/indemma/master/src/spec/spec_helper.coffee +11 -0
  172. data/components/indefinido/indemma/master/src/spec/support/value_objects/phone.coffee +30 -0
  173. data/components/indefinido/indemma/master/vendor/object/mixin.js +196 -0
  174. data/components/indefinido/indemma/master/vendor/spec/sinon/assert.js +199 -0
  175. data/components/indefinido/indemma/master/vendor/spec/sinon/behavior.js +334 -0
  176. data/components/indefinido/indemma/master/vendor/spec/sinon/call.js +205 -0
  177. data/components/indefinido/indemma/master/vendor/spec/sinon/collection.js +155 -0
  178. data/components/indefinido/indemma/master/vendor/spec/sinon/match.js +245 -0
  179. data/components/indefinido/indemma/master/vendor/spec/sinon/mock.js +451 -0
  180. data/components/indefinido/indemma/master/vendor/spec/sinon/sandbox.js +144 -0
  181. data/components/indefinido/indemma/master/vendor/spec/sinon/spy.js +413 -0
  182. data/components/indefinido/indemma/master/vendor/spec/sinon/stub.js +161 -0
  183. data/components/indefinido/indemma/master/vendor/spec/sinon/test.js +77 -0
  184. data/components/indefinido/indemma/master/vendor/spec/sinon/test_case.js +99 -0
  185. data/components/indefinido/indemma/master/vendor/spec/sinon/util/event.js +94 -0
  186. data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_server.js +212 -0
  187. data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_server_with_clock.js +83 -0
  188. data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_timers.js +405 -0
  189. data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_xdomain_request.js +206 -0
  190. data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_xml_http_request.js +575 -0
  191. data/components/indefinido/indemma/master/vendor/spec/sinon/util/timers_ie.js +31 -0
  192. data/components/indefinido/indemma/master/vendor/spec/sinon/util/xdr_ie.js +14 -0
  193. data/components/indefinido/indemma/master/vendor/spec/sinon/util/xhr_ie.js +19 -0
  194. data/components/indefinido/indemma/master/vendor/spec/sinon.js +383 -0
  195. data/lib/assets/javascripts/value_objects/phone.js.coffee +3 -1
  196. data/lib/assets/javascripts/widgets/viewer/plugins/scopable.js.coffee +5 -5
  197. data/lib/ende/version.rb +1 -1
  198. data/vendor/assets/components/ende_build.css +4 -4
  199. data/vendor/assets/components/ende_build.js +7974 -7889
  200. metadata +191 -5
  201. data/vendor/assets/component/build.css +0 -112
  202. data/vendor/assets/components/build.css +0 -112
  203. data/vendor/assets/components/indemma_with_none.js +0 -30553
@@ -0,0 +1,142 @@
1
+ 'use strict';require('indemma/lib/record/validatable.js');
2
+
3
+ describe('model', function() {
4
+ var corporation, person;
5
+
6
+ person = corporation = null;
7
+ beforeEach(function() {
8
+ return person = model.call({
9
+ resource: 'person'
10
+ });
11
+ });
12
+ it('should store validators', function() {
13
+ person.should.have.property('validators');
14
+ return person.validators.should.be.an('array');
15
+ });
16
+ return describe('(validates_... : ...)', function() {
17
+ describe('validators instatiation', function() {
18
+ it('should have validators', function() {
19
+ var validator;
20
+
21
+ person = model.call({
22
+ resource: 'person',
23
+ name: String,
24
+ validates_presence_of: 'name'
25
+ });
26
+ person.validators.should.not.be.empty;
27
+ validator = person.validators[0];
28
+ return validator.should.have.property('attribute_name', 'name');
29
+ });
30
+ return it('should have validators with in the key validates');
31
+ });
32
+ describe('.validate_attribute()', function() {
33
+ beforeEach(function() {
34
+ person.validators.length = 0;
35
+ return person = model.call({
36
+ resource: 'person',
37
+ name: String,
38
+ validates_presence_of: 'name'
39
+ });
40
+ });
41
+ return it('should add error messages for the validated attribute', function() {
42
+ var arthur;
43
+
44
+ arthur = person({
45
+ name: null
46
+ });
47
+ arthur.validate_attribute('name');
48
+ arthur.errors.length.should.be.eq(1);
49
+ return arthur.errors.messages.should.have.property('name');
50
+ });
51
+ });
52
+ return describe('.valid', function() {
53
+ beforeEach(function() {
54
+ var _ref;
55
+
56
+ if ((_ref = this.personable) != null) {
57
+ _ref.validators.length = 0;
58
+ }
59
+ this.personable = model.call({
60
+ resource: 'person',
61
+ name: String,
62
+ validates_presence_of: 'name'
63
+ });
64
+ this.xhr = jQuery.Deferred();
65
+ return sinon.stub(jQuery, 'ajax').returns(this.xhr);
66
+ });
67
+ afterEach(function() {
68
+ return jQuery.ajax.restore();
69
+ });
70
+ it('should be true when valid', function() {
71
+ var arthur;
72
+
73
+ arthur = this.personable({
74
+ name: "Arthur"
75
+ });
76
+ arthur.should.have.property('valid');
77
+ arthur.valid.should.be["true"];
78
+ return arthur.errors.length.should.be.eq(0);
79
+ });
80
+ it('should exist as read only property', function() {
81
+ var arthur;
82
+
83
+ arthur = this.personable({
84
+ name: "Arthur"
85
+ });
86
+ return expect(function() {
87
+ return arthur.valid = false;
88
+ }).to["throw"](Error);
89
+ });
90
+ it('should validate record', function() {
91
+ var anonymous;
92
+
93
+ anonymous = this.personable({
94
+ name: null
95
+ });
96
+ anonymous.valid.should.be["false"];
97
+ return anonymous.errors.length.should.be.eq(1);
98
+ });
99
+ it('should not validate record multiple times even with remote', function() {
100
+ var arthur;
101
+
102
+ this.personable = model.call({
103
+ resource: 'person',
104
+ name: String,
105
+ validates_remotely: 'email'
106
+ });
107
+ arthur = this.personable({
108
+ name: "Arthur",
109
+ email: "arthur.dent@hitchhikers.guide"
110
+ });
111
+ arthur.valid;
112
+ arthur.valid;
113
+ arthur.valid;
114
+ arthur.valid;
115
+ return jQuery.ajax.callCount.should.be.eq(1);
116
+ });
117
+ it('should not validate record until it changes', function() {
118
+ var anonymous;
119
+
120
+ anonymous = this.personable({
121
+ name: null
122
+ });
123
+ anonymous.observation.deliver();
124
+ return anonymous.errors.length.should.be.eq(0);
125
+ });
126
+ return it('should not re-validate record until it changes', function() {
127
+ var anonymous, validation;
128
+
129
+ anonymous = this.personable({
130
+ name: null
131
+ });
132
+ anonymous.valid.should.be["false"];
133
+ anonymous.errors.length.should.be.eq(1);
134
+ validation = anonymous.validation;
135
+ anonymous.validate().should.be.eq(validation);
136
+ anonymous.dirty = true;
137
+ anonymous.observation.deliver();
138
+ return anonymous.validate().should.not.be.eq(validation);
139
+ });
140
+ });
141
+ });
142
+ });
@@ -0,0 +1,43 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model ( validates_associated: ... )', function() {
8
+ return describe('basic usage', function() {
9
+ var address, model, person;
10
+
11
+ model = root.model;
12
+ person = address = null;
13
+ beforeEach(function() {
14
+ address = model.call({
15
+ resource: 'address',
16
+ street: String,
17
+ validates_presence_of: 'street'
18
+ });
19
+ return person = model.call({
20
+ resource: 'person',
21
+ has_one: 'address',
22
+ validates_associated: 'address'
23
+ });
24
+ });
25
+ afterEach(function() {
26
+ person.validators.length = 0;
27
+ return address.validators.length = 0;
28
+ });
29
+ return describe('.validate()', function() {
30
+ return it('should add error to record when fields does not match', function() {
31
+ var arthur;
32
+
33
+ arthur = person({});
34
+ arthur.build_address({
35
+ street: null
36
+ });
37
+ arthur.valid;
38
+ arthur.errors.messages.should.have.deep.property('address', 'O registro associado address não é válido.');
39
+ return arthur.address.errors.messages.should.have.deep.property('street', 'O campo street não pode ficar em branco.');
40
+ });
41
+ });
42
+ });
43
+ });
@@ -0,0 +1,36 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model #() validates_confirmation_of', function() {
8
+ return describe('basic usage', function() {
9
+ var model, person;
10
+
11
+ model = root.model;
12
+ person = null;
13
+ beforeEach(function() {
14
+ return person = model.call({
15
+ resource: 'person',
16
+ password: String,
17
+ validates_confirmation_of: 'password'
18
+ });
19
+ });
20
+ afterEach(function() {
21
+ return person.validators.length = 0;
22
+ });
23
+ return describe('#validate', function() {
24
+ return it('should add error to record when fields does not match', function() {
25
+ var arthur;
26
+
27
+ arthur = person({
28
+ password: "domo",
29
+ password_confirmation: "kun"
30
+ });
31
+ arthur.valid;
32
+ return arthur.errors.messages.should.have.deep.property('password_confirmation', 'O campo password não está de acordo com o campo password_confirmation.');
33
+ });
34
+ });
35
+ });
36
+ });
@@ -0,0 +1,34 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model #() validates_cpf_format', function() {
8
+ return describe('basic usage', function() {
9
+ var model;
10
+
11
+ model = root.model;
12
+ beforeEach(function() {
13
+ return this.person = model.call({
14
+ resource: 'person',
15
+ cpf: String,
16
+ validates_cpf_format: 'cpf'
17
+ });
18
+ });
19
+ afterEach(function() {
20
+ return this.person.validators.length = 0;
21
+ });
22
+ return describe('#validate', function() {
23
+ return it('should add error to record when fields is in invalid format', function() {
24
+ var arthur;
25
+
26
+ arthur = this.person({
27
+ cpf: '871.95FRANGO-00'
28
+ });
29
+ arthur.valid;
30
+ return arthur.errors.messages.should.have.deep.property('cpf', "O campo cpf não está válido.");
31
+ });
32
+ });
33
+ });
34
+ });
@@ -0,0 +1,28 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model #() validates presence of', function() {
8
+ return describe('basic usage', function() {
9
+ var model, person;
10
+
11
+ model = root.model;
12
+ person = null;
13
+ beforeEach(function() {
14
+ return person = model.call({
15
+ resource: 'person',
16
+ name: String,
17
+ belongs_to: 'corporation',
18
+ validates_presence_of: 'name'
19
+ });
20
+ });
21
+ afterEach(function() {
22
+ return person.validators.length = 0;
23
+ });
24
+ return describe('#validate', function() {
25
+ return it('should add error to record when required field is empty (null, undefined or \'\')');
26
+ });
27
+ });
28
+ });
@@ -0,0 +1,87 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model #() validates_remotely', function() {
8
+ var arthur, model, person, request;
9
+
10
+ model = root.model;
11
+ request = arthur = person = null;
12
+ describe('basic usage', function() {
13
+ beforeEach(function() {
14
+ person = model.call({
15
+ resource: 'person',
16
+ name: String,
17
+ validates_remotely: 'name'
18
+ });
19
+ return arthur = person({
20
+ name: "Arthur Dent"
21
+ });
22
+ });
23
+ afterEach(function() {
24
+ return person != null ? person.validators.length = 0 : void 0;
25
+ });
26
+ return describe('#validate', function() {
27
+ beforeEach(function() {
28
+ request = jQuery.Deferred();
29
+ return sinon.stub(jQuery, "ajax").returns(request);
30
+ });
31
+ afterEach(function() {
32
+ return jQuery.ajax.restore();
33
+ });
34
+ it('should send paramenters accordingly', function() {
35
+ arthur.validate();
36
+ jQuery.ajax.called.should.be["true"];
37
+ return jQuery.ajax.calledWithMatch({
38
+ url: '/people/validate',
39
+ type: 'post',
40
+ data: {
41
+ person: {
42
+ name: 'Arthur Dent'
43
+ }
44
+ }
45
+ }).should.be["true"];
46
+ });
47
+ return it('should add errors to record when request responds with errors', function() {
48
+ arthur.validate();
49
+ request.resolveWith(arthur, [
50
+ {
51
+ name: ['The name should be Marvin!', 'The name should be in lowercase!']
52
+ }
53
+ ]);
54
+ arthur.errors.length.should.be.eq(2);
55
+ return arthur.errors.messages.name.should.exist;
56
+ });
57
+ });
58
+ });
59
+ return describe('with options usage', function() {
60
+ beforeEach(function() {
61
+ if (person != null) {
62
+ person.validators.length = 0;
63
+ }
64
+ person = model.call({
65
+ resource: 'person',
66
+ name: String,
67
+ validates_remotely: 'name'
68
+ });
69
+ return arthur = person({
70
+ name: "Arthur Dent"
71
+ });
72
+ });
73
+ return describe('#validate', function() {
74
+ beforeEach(function() {
75
+ request = jQuery.Deferred();
76
+ return sinon.stub(jQuery, "ajax").returns(request);
77
+ });
78
+ afterEach(function() {
79
+ return jQuery.ajax.restore();
80
+ });
81
+ return it('should make ajax call', function() {
82
+ arthur.validate();
83
+ return jQuery.ajax.called.should.be["true"];
84
+ });
85
+ });
86
+ });
87
+ });
@@ -0,0 +1,48 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/validatable.js');
6
+
7
+ describe('model #() validates type of', function() {
8
+ return describe('basic usage', function() {
9
+ var model, person;
10
+
11
+ model = root.model;
12
+ person = null;
13
+ beforeEach(function() {
14
+ return person = model.call({
15
+ resource: 'person',
16
+ name: String,
17
+ phone: Phone,
18
+ validates_type_of: ['name', 'phone']
19
+ });
20
+ });
21
+ afterEach(function() {
22
+ return person.validators.length = 0;
23
+ });
24
+ return describe('#validate', function() {
25
+ it('should use Phone#validate to find out if attribute is valid');
26
+ it('should add error to record when phone typed attribute has an non valid phone value', function() {
27
+ var arthur;
28
+
29
+ arthur = person({
30
+ phone: new Phone('batata')
31
+ });
32
+ arthur.valid.should.be["false"];
33
+ arthur.errors.messages.should.have.property('phone');
34
+ return expect(arthur.errors.messages.phone).to.match(/não está válido/);
35
+ });
36
+ return it('should throw error to when phone typed attribute has an non phone value', function() {
37
+ var arthur;
38
+
39
+ arthur = person({
40
+ phone: 'batata'
41
+ });
42
+ return expect(function() {
43
+ return arthur.valid;
44
+ }).to["throw"](/invalid attribute value type/i);
45
+ });
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,49 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ describe('record', function() {
6
+ var record;
7
+
8
+ record = root.record;
9
+ return it('should create a record', function() {
10
+ var arthur;
11
+
12
+ arthur = record.call({
13
+ resource: 'person'
14
+ });
15
+ return arthur.should.be.object;
16
+ });
17
+ });
18
+
19
+ describe('model', function() {
20
+ var model;
21
+
22
+ model = root.model;
23
+ return describe('#()', function() {
24
+ xit('should throw exception if no resource is passed');
25
+ it('should create a resource factory', function() {
26
+ var john, person;
27
+
28
+ person = model.call({
29
+ resource: 'person'
30
+ });
31
+ person.should.be.object;
32
+ john = person();
33
+ john.should.be.object;
34
+ return john.resource.should.have.property('name', 'person');
35
+ });
36
+ return it('should execute after mix callbacks', function(done) {
37
+ var person;
38
+
39
+ return person = model.call({
40
+ resource: 'person',
41
+ after_mix: [
42
+ function() {
43
+ return done();
44
+ }
45
+ ]
46
+ });
47
+ });
48
+ });
49
+ });
@@ -0,0 +1,15 @@
1
+ var chai, jQuery, root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ root.indemma = require('indemma');
6
+
7
+ root.sinon = require('indemma/vendor/spec/sinon.js');
8
+
9
+ chai = require('chaijs-chai');
10
+
11
+ root.expect = chai.expect;
12
+
13
+ root.should = chai.should();
14
+
15
+ jQuery = require("component~jquery@1.0.0");
@@ -0,0 +1,45 @@
1
+ this.Phone = (function() {
2
+ function Phone(area_code, number) {
3
+ var _ref;
4
+
5
+ this.area_code = area_code;
6
+ this.number = number;
7
+ if (typeof this.area_code === 'object') {
8
+ _ref = this.area_code, this.area_code = _ref.area_code, this.number = _ref.number;
9
+ }
10
+ if (!this.number) {
11
+ this.number = this.area_code;
12
+ this.area_code = null;
13
+ }
14
+ Object.defineProperty(this, 'valid', {
15
+ get: this.validate
16
+ });
17
+ }
18
+
19
+ Phone.prototype.validate = function() {
20
+ return (this.area_code != null) && (this.number != null);
21
+ };
22
+
23
+ Phone.prototype.toString = function() {
24
+ var formatted_number;
25
+
26
+ if (this.number != null) {
27
+ formatted_number = this.number.substr(0, 4) + '-' + this.number.substr(4);
28
+ }
29
+ if (this.area_code != null) {
30
+ return "(" + this.area_code + ") " + formatted_number;
31
+ } else {
32
+ return formatted_number;
33
+ }
34
+ };
35
+
36
+ Phone.prototype.toJSON = function() {
37
+ return {
38
+ area_code: this.area_code,
39
+ number: this.number
40
+ };
41
+ };
42
+
43
+ return Phone;
44
+
45
+ })();
@@ -0,0 +1,17 @@
1
+ root = exports ? this
2
+
3
+ model.rivets = ->
4
+
5
+ model_extensions =
6
+ record:
7
+ tie: (element) ->
8
+ lasso = {}
9
+ lasso[@resource] = @
10
+ rivets.bind element, lasso
11
+
12
+ # Always preload data into the template
13
+ preloadData: true
14
+
15
+ model.mix (modelable) ->
16
+ # TODO remove jquery dependency
17
+ $.extend true, modelable, model_extensions