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,35 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model ( validates_associated: ... )', ->
6
+
7
+ describe 'basic usage', ->
8
+ model = root.model
9
+ person = address = null
10
+
11
+ beforeEach ->
12
+ address = model.call
13
+ resource : 'address'
14
+ street : String
15
+ validates_presence_of: 'street'
16
+
17
+ person = model.call
18
+ resource : 'person'
19
+ has_one : 'address'
20
+ validates_associated: 'address'
21
+
22
+ afterEach ->
23
+ person.validators.length = 0
24
+ address.validators.length = 0
25
+
26
+ describe '.validate()', ->
27
+
28
+ it 'should add error to record when fields does not match', ->
29
+ arthur = person {}
30
+ arthur.build_address street: null
31
+
32
+ arthur.valid
33
+
34
+ arthur.errors.messages.should.have.deep.property 'address', 'O registro associado address não é válido.'
35
+ arthur.address.errors.messages.should.have.deep.property 'street', 'O campo street não pode ficar em branco.'
@@ -0,0 +1,25 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model #() validates_confirmation_of', ->
6
+
7
+ describe 'basic usage', ->
8
+ model = root.model
9
+ person = null
10
+
11
+ beforeEach ->
12
+ person = model.call
13
+ resource : 'person'
14
+ password : String
15
+ validates_confirmation_of: 'password'
16
+
17
+ afterEach ->
18
+ person.validators.length = 0
19
+
20
+ describe '#validate', ->
21
+
22
+ it 'should add error to record when fields does not match', ->
23
+ arthur = person password: "domo", password_confirmation: "kun"
24
+ arthur.valid
25
+ arthur.errors.messages.should.have.deep.property 'password_confirmation', 'O campo password não está de acordo com o campo password_confirmation.'
@@ -0,0 +1,27 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model #() validates_cpf_format', ->
6
+
7
+ describe 'basic usage', ->
8
+ model = root.model
9
+
10
+ beforeEach ->
11
+ @person = model.call
12
+ resource : 'person'
13
+ cpf : String
14
+ validates_cpf_format: 'cpf'
15
+
16
+ afterEach ->
17
+ # Clear validators from resource
18
+ @person.validators.length = 0
19
+
20
+ describe '#validate', ->
21
+
22
+ it 'should add error to record when fields is in invalid format', ->
23
+ arthur = @person cpf: '871.95FRANGO-00'
24
+ arthur.valid
25
+
26
+ # TODO figure out why the heck the validators aren't being reset
27
+ arthur.errors.messages.should.have.deep.property 'cpf', "O campo cpf não está válido."
@@ -0,0 +1,24 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model #() validates presence of', ->
6
+
7
+ describe 'basic usage', ->
8
+ model = root.model
9
+ person = null
10
+
11
+ beforeEach ->
12
+ person = model.call
13
+ resource : 'person'
14
+ name : String
15
+ belongs_to: 'corporation'
16
+ validates_presence_of: 'name'
17
+
18
+ afterEach ->
19
+ person.validators.length = 0
20
+
21
+ describe '#validate', ->
22
+
23
+ it 'should add error to record when required field is empty (null, undefined or \'\')'
24
+
@@ -0,0 +1,74 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model #() validates_remotely', ->
6
+ model = root.model
7
+ request = arthur = person = null
8
+
9
+ describe 'basic usage', ->
10
+
11
+ beforeEach ->
12
+ person = model.call
13
+ resource : 'person'
14
+ name : String
15
+ validates_remotely: 'name'
16
+
17
+ arthur = person name: "Arthur Dent"
18
+
19
+ afterEach ->
20
+ person?.validators.length = 0
21
+
22
+ describe '#validate', ->
23
+
24
+ beforeEach ->
25
+ request = jQuery.Deferred()
26
+ sinon.stub(jQuery, "ajax").returns(request)
27
+
28
+ afterEach -> jQuery.ajax.restore()
29
+
30
+ it 'should send paramenters accordingly', ->
31
+ arthur.validate()
32
+
33
+ jQuery.ajax.called.should.be.true
34
+
35
+ jQuery.ajax.calledWithMatch(
36
+ url: '/people/validate'
37
+ type: 'post'
38
+ data:
39
+ person:
40
+ name: 'Arthur Dent'
41
+ ).should.be.true
42
+
43
+
44
+ it 'should add errors to record when request responds with errors', ->
45
+ arthur.validate()
46
+ request.resolveWith arthur,
47
+ [name: ['The name should be Marvin!', 'The name should be in lowercase!']]
48
+
49
+ arthur.errors.length.should.be.eq 2
50
+ arthur.errors.messages.name.should.exist
51
+
52
+ describe 'with options usage', ->
53
+
54
+ beforeEach ->
55
+ person?.validators.length = 0
56
+
57
+ person = model.call
58
+ resource : 'person'
59
+ name : String
60
+ validates_remotely: 'name'
61
+
62
+ arthur = person name: "Arthur Dent"
63
+
64
+ describe '#validate', ->
65
+
66
+ beforeEach ->
67
+ request = jQuery.Deferred()
68
+ sinon.stub(jQuery, "ajax").returns(request)
69
+
70
+ afterEach -> jQuery.ajax.restore()
71
+
72
+ it 'should make ajax call', ->
73
+ arthur.validate()
74
+ jQuery.ajax.called.should.be.true
@@ -0,0 +1,33 @@
1
+ root = exports ? window
2
+
3
+ require 'indemma/lib/record/validatable.js'
4
+
5
+ describe 'model #() validates type of', ->
6
+
7
+ describe 'basic usage', ->
8
+ model = root.model
9
+ person = null
10
+
11
+ beforeEach ->
12
+ person = model.call
13
+ resource : 'person'
14
+ name : String
15
+ phone : Phone
16
+ validates_type_of: ['name', 'phone']
17
+
18
+ afterEach ->
19
+ person.validators.length = 0
20
+
21
+ describe '#validate', ->
22
+
23
+ #it 'should use Phone#valid getter to find out if object is valid'
24
+ it 'should use Phone#validate to find out if attribute is valid'
25
+ it 'should add error to record when phone typed attribute has an non valid phone value', ->
26
+ arthur = person phone: new Phone 'batata'
27
+ arthur.valid.should.be.false
28
+ arthur.errors.messages.should.have.property 'phone'
29
+ expect(arthur.errors.messages.phone).to.match /não está válido/
30
+
31
+ it 'should throw error to when phone typed attribute has an non phone value', ->
32
+ arthur = person phone: 'batata'
33
+ expect( -> arthur.valid).to.throw /invalid attribute value type/i
@@ -0,0 +1,29 @@
1
+ root = exports ? window
2
+
3
+ describe 'record', ->
4
+ record = root.record
5
+
6
+ it 'should create a record', ->
7
+ arthur = record.call resource: 'person'
8
+ arthur.should.be.object
9
+
10
+ describe 'model', ->
11
+ model = root.model
12
+
13
+ describe '#()', ->
14
+
15
+ xit 'should throw exception if no resource is passed'
16
+
17
+ it 'should create a resource factory', ->
18
+ person = model.call resource: 'person'
19
+ person.should.be.object
20
+
21
+ john = person()
22
+ john.should.be.object
23
+ john.resource.should.have.property 'name', 'person'
24
+
25
+ it 'should execute after mix callbacks', (done) ->
26
+
27
+ person = model.call
28
+ resource: 'person'
29
+ after_mix: [-> done()]
@@ -0,0 +1,11 @@
1
+ root = exports ? window
2
+
3
+ root.indemma = require 'indemma'
4
+ root.sinon = require 'indemma/vendor/spec/sinon.js'
5
+
6
+ chai = require 'chaijs-chai'
7
+ root.expect = chai.expect
8
+ root.should = chai.should()
9
+
10
+ jQuery = require "component~jquery@1.0.0"
11
+
@@ -0,0 +1,30 @@
1
+ # TODO locales support
2
+ class @Phone
3
+
4
+ constructor: (@area_code, @number) ->
5
+ {@area_code, @number} = @area_code if typeof @area_code == 'object'
6
+
7
+
8
+ # TODO parse argument types to validate value object domain
9
+ # constraints
10
+
11
+ unless @number
12
+ @number = @area_code
13
+ @area_code = null
14
+
15
+ Object.defineProperty @, 'valid', get: @validate
16
+
17
+ # TODO move type validation to indemma files
18
+ validate: -> @area_code? && @number?
19
+
20
+ toString: ->
21
+ formatted_number = @number.substr(0, 4) + '-' + @number.substr(4) if @number?
22
+
23
+ if @area_code?
24
+ "(#{@area_code}) #{formatted_number}"
25
+ else
26
+ formatted_number
27
+
28
+ toJSON: ->
29
+ area_code: @area_code
30
+ number: @number
@@ -0,0 +1,196 @@
1
+ /*jslint browser: true, forin: true, plusplus: true, indent: 4 */
2
+ (function(Object, mixin) {
3
+ "use strict"; // happy linter ^_____^
4
+
5
+ /* <droppable> interesting code after line 110, here
6
+ * ad-hoc polyfill section for this purpose only
7
+ * never use these functions outside this closure ... like ...
8
+ ne*/var
9
+
10
+ // borrowed methods for unknown Objects
11
+ ObjectPrototype = Object.prototype,
12
+
13
+ lookupGetter = ObjectPrototype.__lookupGetter__,
14
+ lookupSetter = ObjectPrototype.__lookupSetter__,
15
+ defineGetter = ObjectPrototype.__defineGetter__,
16
+ defineSetter = ObjectPrototype.__defineSetter__,
17
+ has = ObjectPrototype.hasOwnProperty,
18
+
19
+ emptyArray = [],
20
+ // slice = emptyArray.slice,
21
+
22
+ // for IE < 9 and non IE5 yet browsers
23
+ goNative = true,
24
+ defineProperty = (function(defineProperty){
25
+ try{
26
+ return defineProperty && defineProperty({},'_',{value:1})._ && defineProperty;
27
+ } catch(IE8) {
28
+ goNative = false;
29
+ }
30
+ }(Object.defineProperty)) ||
31
+ function (o, k, d) {
32
+ var
33
+ get = d.get, // has.call(d, 'get') would be better but
34
+ set = d.set; // ES5 is just like this
35
+ if (get && defineGetter) {
36
+ defineGetter.call(o, k, get);
37
+ }
38
+ if (set && defineSetter) {
39
+ defineSetter.call(o, k, set);
40
+ }
41
+ if (!(get || set)) {
42
+ o[k] = d.value;
43
+ }
44
+ },
45
+ // for IE < 9 and non IE5 yet browsers
46
+ getOwnPropertyNames = (goNative && Object.getOwnPropertyNames) ||
47
+ (function () {
48
+ var
49
+ addHiddenOwnProperties = function (result) {
50
+ return result;
51
+ },
52
+ list = [],
53
+ key,
54
+ i,
55
+ length;
56
+
57
+ for (key in {valueOf: key}) {
58
+ list.push(key);
59
+ }
60
+
61
+ if (!list.length) {
62
+ length = list.push(
63
+ 'constructor',
64
+ 'hasOwnProperty',
65
+ 'isPrototypeOf',
66
+ 'propertyIsEnumerable',
67
+ 'toLocaleString',
68
+ 'toString',
69
+ 'valueOf'
70
+ ) - 1;
71
+ addHiddenOwnProperties = function (result, o) {
72
+ for (i = 0; i < length; i++) {
73
+ key = list[i];
74
+ if (has.call(o, key)) {
75
+ result.push(key);
76
+ }
77
+ }
78
+ return result;
79
+ };
80
+ }
81
+
82
+ return function (o) {
83
+ var
84
+ result = [],
85
+ key;
86
+ for (key in o) {
87
+ if (has.call(o, key)) {
88
+ result.push(key);
89
+ }
90
+ }
91
+ return addHiddenOwnProperties(result, o);
92
+ };
93
+ }()),
94
+ // IE < 9 or other non ES5 yet browsers
95
+ getOwnPropertyDescriptor = (goNative && Object.getOwnPropertyDescriptor) ||
96
+ function (o, k) {
97
+ var
98
+ descriptor = {
99
+ enumerable: true,
100
+ configurable: true
101
+ },
102
+ get = lookupGetter && lookupGetter.call(o, k),
103
+ set = lookupSetter && lookupSetter.call(o, k);
104
+ if (get) {
105
+ descriptor.get = get;
106
+ }
107
+ if (set) {
108
+ descriptor.set = set;
109
+ }
110
+ if (!(get || set)) {
111
+ descriptor.writable = true;
112
+ descriptor.value = o[k];
113
+ }
114
+ return descriptor;
115
+ };
116
+ // </droppable>
117
+
118
+ // if already defined get out of here
119
+ // this should be
120
+ // if (mixin in Object) return;
121
+ // but for some reason I went for JSLint ...
122
+ if (Object[mixin]) {
123
+ return;
124
+ }
125
+ // same descriptor as other spec'd methods
126
+ defineProperty(
127
+ Object,
128
+ mixin,
129
+ {
130
+ enumerable: false,
131
+ writable: true,
132
+ configurable: true,
133
+ value: function (
134
+ target, // object to enrich with
135
+ source, // mixin object or Trait (Function)
136
+ args // optional arguments for Trait
137
+ ) {
138
+ var
139
+ i,
140
+ length,
141
+ keys,
142
+ key;
143
+
144
+ if (typeof source === 'function') {
145
+ // if the source is a function
146
+ // it will be invoked with object as target
147
+ // this let us define mixin as closures
148
+ // function addFunctionality() {
149
+ // this.functionality = function () {
150
+ // // do amazing stuff
151
+ // }
152
+ // }
153
+ // addFunctionality.call(Class.prototype);
154
+ // addFunctionality.call(genericObject);
155
+ // // or
156
+ // Object.mixin(Class.prototype, addFunctionality);
157
+
158
+ source.apply(target, args || emptyArray);
159
+ /*
160
+ // try to perform as fast as possible
161
+ if (arguments.length < 3) {
162
+ // so if no extra args are passed ...
163
+ source.call(target);
164
+ } else {
165
+ // there is no need to slice them as done here
166
+ source.apply(target, slice.call(arguments, 2));
167
+ }
168
+ */
169
+ } else {
170
+ // if source is an object
171
+ // grab all possibe properties
172
+ // and per each of them ...
173
+ keys = getOwnPropertyNames(source);
174
+ length = keys.length;
175
+ i = 0;
176
+ while (i < length) {
177
+ key = keys[i++];
178
+ // ... define it ...
179
+ defineProperty(
180
+ target,
181
+ key,
182
+ // ... using the same descriptor
183
+ getOwnPropertyDescriptor(
184
+ source,
185
+ key
186
+ )
187
+ );
188
+ }
189
+ }
190
+ // always return the initial target
191
+ // ignoring all possible different return with functions
192
+ return target;
193
+ }
194
+ }
195
+ );
196
+ }(Object, 'mixin'));
@@ -0,0 +1,199 @@
1
+ /**
2
+ * @depend ../sinon.js
3
+ * @depend stub.js
4
+ */
5
+ /*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/
6
+ /*global module, require, sinon*/
7
+ /**
8
+ * Assertions matching the test spy retrieval interface.
9
+ *
10
+ * @author Christian Johansen (christian@cjohansen.no)
11
+ * @license BSD
12
+ *
13
+ * Copyright (c) 2010-2013 Christian Johansen
14
+ */
15
+ "use strict";
16
+
17
+ (function (sinon, global) {
18
+ var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
19
+ var slice = Array.prototype.slice;
20
+ var assert;
21
+
22
+ if (!sinon && commonJSModule) {
23
+ sinon = require("../sinon");
24
+ }
25
+
26
+ if (!sinon) {
27
+ return;
28
+ }
29
+
30
+ function verifyIsStub() {
31
+ var method;
32
+
33
+ for (var i = 0, l = arguments.length; i < l; ++i) {
34
+ method = arguments[i];
35
+
36
+ if (!method) {
37
+ assert.fail("fake is not a spy");
38
+ }
39
+
40
+ if (typeof method != "function") {
41
+ assert.fail(method + " is not a function");
42
+ }
43
+
44
+ if (typeof method.getCall != "function") {
45
+ assert.fail(method + " is not stubbed");
46
+ }
47
+ }
48
+ }
49
+
50
+ function failAssertion(object, msg) {
51
+ object = object || global;
52
+ var failMethod = object.fail || assert.fail;
53
+ failMethod.call(object, msg);
54
+ }
55
+
56
+ function mirrorPropAsAssertion(name, method, message) {
57
+ if (arguments.length == 2) {
58
+ message = method;
59
+ method = name;
60
+ }
61
+
62
+ assert[name] = function (fake) {
63
+ verifyIsStub(fake);
64
+
65
+ var args = slice.call(arguments, 1);
66
+ var failed = false;
67
+
68
+ if (typeof method == "function") {
69
+ failed = !method(fake);
70
+ } else {
71
+ failed = typeof fake[method] == "function" ?
72
+ !fake[method].apply(fake, args) : !fake[method];
73
+ }
74
+
75
+ if (failed) {
76
+ failAssertion(this, fake.printf.apply(fake, [message].concat(args)));
77
+ } else {
78
+ assert.pass(name);
79
+ }
80
+ };
81
+ }
82
+
83
+ function exposedName(prefix, prop) {
84
+ return !prefix || /^fail/.test(prop) ? prop :
85
+ prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
86
+ }
87
+
88
+ assert = {
89
+ failException: "AssertError",
90
+
91
+ fail: function fail(message) {
92
+ var error = new Error(message);
93
+ error.name = this.failException || assert.failException;
94
+
95
+ throw error;
96
+ },
97
+
98
+ pass: function pass(assertion) {},
99
+
100
+ callOrder: function assertCallOrder() {
101
+ verifyIsStub.apply(null, arguments);
102
+ var expected = "", actual = "";
103
+
104
+ if (!sinon.calledInOrder(arguments)) {
105
+ try {
106
+ expected = [].join.call(arguments, ", ");
107
+ var calls = slice.call(arguments);
108
+ var i = calls.length;
109
+ while (i) {
110
+ if (!calls[--i].called) {
111
+ calls.splice(i, 1);
112
+ }
113
+ }
114
+ actual = sinon.orderByFirstCall(calls).join(", ");
115
+ } catch (e) {
116
+ // If this fails, we'll just fall back to the blank string
117
+ }
118
+
119
+ failAssertion(this, "expected " + expected + " to be " +
120
+ "called in order but were called as " + actual);
121
+ } else {
122
+ assert.pass("callOrder");
123
+ }
124
+ },
125
+
126
+ callCount: function assertCallCount(method, count) {
127
+ verifyIsStub(method);
128
+
129
+ if (method.callCount != count) {
130
+ var msg = "expected %n to be called " + sinon.timesInWords(count) +
131
+ " but was called %c%C";
132
+ failAssertion(this, method.printf(msg));
133
+ } else {
134
+ assert.pass("callCount");
135
+ }
136
+ },
137
+
138
+ expose: function expose(target, options) {
139
+ if (!target) {
140
+ throw new TypeError("target is null or undefined");
141
+ }
142
+
143
+ var o = options || {};
144
+ var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
145
+ var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
146
+
147
+ for (var method in this) {
148
+ if (method != "export" && (includeFail || !/^(fail)/.test(method))) {
149
+ target[exposedName(prefix, method)] = this[method];
150
+ }
151
+ }
152
+
153
+ return target;
154
+ },
155
+
156
+ match: function match(actual, expectation) {
157
+ var matcher = sinon.match(expectation);
158
+ if (matcher.test(actual)) {
159
+ assert.pass("match");
160
+ } else {
161
+ var formatted = [
162
+ "expected value to match",
163
+ " expected = " + sinon.format(expectation),
164
+ " actual = " + sinon.format(actual)
165
+ ]
166
+ failAssertion(this, formatted.join("\n"));
167
+ }
168
+ }
169
+ };
170
+
171
+ mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
172
+ mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
173
+ "expected %n to not have been called but was called %c%C");
174
+ mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
175
+ mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
176
+ mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
177
+ mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
178
+ mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
179
+ mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
180
+ mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
181
+ mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
182
+ mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
183
+ mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
184
+ mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
185
+ mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
186
+ mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
187
+ mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
188
+ mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
189
+ mirrorPropAsAssertion("threw", "%n did not throw exception%C");
190
+ mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
191
+
192
+ sinon.assert = assert;
193
+
194
+ if (typeof define === "function" && define.amd) {
195
+ define(["module"], function(module) { module.exports = assert; });
196
+ } else if (commonJSModule) {
197
+ module.exports = assert;
198
+ }
199
+ }(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));