ende 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +2 -2
  3. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +1 -1
  4. data/lib/ende/version.rb +1 -1
  5. data/vendor/assets/components/build.js +638 -133
  6. data/vendor/components/indefinido-indemma/.gitignore +14 -0
  7. data/vendor/components/indefinido-indemma/.gitignore~ +2 -0
  8. data/vendor/components/indefinido-indemma/.ruby-gemset +1 -0
  9. data/vendor/components/indefinido-indemma/.ruby-version +1 -0
  10. data/vendor/components/indefinido-indemma/Gemfile +13 -0
  11. data/vendor/components/indefinido-indemma/Guardfile +39 -0
  12. data/vendor/components/indefinido-indemma/History.md +0 -0
  13. data/vendor/components/indefinido-indemma/Readme.md +447 -0
  14. data/vendor/components/indefinido-indemma/build/development.js +340 -0
  15. data/vendor/components/indefinido-indemma/build/release.js +22039 -0
  16. data/vendor/components/indefinido-indemma/build/test.js +22039 -0
  17. data/vendor/components/indefinido-indemma/component.json +7 -3
  18. data/vendor/components/indefinido-indemma/components/chaijs-assertion-error/component.json +18 -0
  19. data/vendor/components/indefinido-indemma/components/chaijs-assertion-error/index.js +110 -0
  20. data/vendor/components/indefinido-indemma/components/chaijs-chai/component.json +47 -0
  21. data/vendor/components/indefinido-indemma/components/chaijs-chai/index.js +1 -0
  22. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/assertion.js +130 -0
  23. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
  24. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/assert.js +1080 -0
  25. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
  26. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/should.js +76 -0
  27. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
  28. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
  29. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
  30. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/eql.js +129 -0
  31. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
  32. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
  33. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
  34. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
  35. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
  36. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
  37. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
  38. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/index.js +108 -0
  39. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/inspect.js +320 -0
  40. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
  41. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
  42. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
  43. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/test.js +26 -0
  44. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
  45. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/type.js +45 -0
  46. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai.js +80 -0
  47. data/vendor/components/indefinido-indemma/components/component-bind/component.json +14 -0
  48. data/vendor/components/indefinido-indemma/components/component-bind/index.js +24 -0
  49. data/vendor/components/indefinido-indemma/components/component-jquery/component.json +14 -0
  50. data/vendor/components/indefinido-indemma/components/component-jquery/index.js +9601 -0
  51. data/vendor/components/indefinido-indemma/components/component-type/component.json +18 -0
  52. data/vendor/components/indefinido-indemma/components/component-type/index.js +32 -0
  53. data/vendor/components/indefinido-indemma/components/indefinido-advisable/component.json +21 -0
  54. data/vendor/components/indefinido-indemma/components/indefinido-advisable/index.js +1 -0
  55. data/vendor/components/indefinido-indemma/components/indefinido-advisable/lib/advisable.js +60 -0
  56. data/vendor/components/indefinido-indemma/components/indefinido-observable/component.json +25 -0
  57. data/vendor/components/indefinido-indemma/components/indefinido-observable/components/cjohansen-sinon/sinon.js +4290 -0
  58. data/vendor/components/indefinido-indemma/components/indefinido-observable/index.js +1 -0
  59. data/vendor/components/indefinido-indemma/components/indefinido-observable/lib/adapters/rivets.js +26 -0
  60. data/vendor/components/indefinido-indemma/components/indefinido-observable/lib/observable.js +323 -0
  61. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/accessors-legacy.js +92 -0
  62. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/accessors.js +173 -0
  63. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/array.indexOf.js +8 -0
  64. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/object.create.js +77 -0
  65. data/vendor/components/indefinido-indemma/components/kapit-observe-utils/component.json +13 -0
  66. data/vendor/components/indefinido-indemma/components/paulmillr-es6-shim/component.json +17 -0
  67. data/vendor/components/indefinido-indemma/components/paulmillr-es6-shim/es6-shim.js +996 -0
  68. data/vendor/components/indefinido-indemma/components/pluma-assimilate/component.json +25 -0
  69. data/vendor/components/indefinido-indemma/components/pluma-assimilate/dist/assimilate.js +127 -0
  70. data/vendor/components/indefinido-indemma/karma.conf.js +86 -0
  71. data/vendor/components/indefinido-indemma/lib/record/associable.js +229 -82
  72. data/vendor/components/indefinido-indemma/lib/record/errors.js +1 -0
  73. data/vendor/components/indefinido-indemma/lib/record/persistable.js +32 -0
  74. data/vendor/components/indefinido-indemma/lib/record/queryable.js +32 -0
  75. data/vendor/components/indefinido-indemma/lib/record/resource.js +12 -4
  76. data/vendor/components/indefinido-indemma/lib/record/rest.js +1 -1
  77. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +38 -27
  78. data/vendor/components/indefinido-indemma/lib/record/scopable.js +15 -2
  79. data/vendor/components/indefinido-indemma/lib/record/storable.js +48 -0
  80. data/vendor/components/indefinido-indemma/lib/record/validatable.js +10 -5
  81. data/vendor/components/indefinido-indemma/lib/record/validations/cpf.js +1 -1
  82. data/vendor/components/indefinido-indemma/lib/record.js +15 -12
  83. data/vendor/components/indefinido-indemma/spec/record/associable_spec.js +137 -0
  84. data/vendor/components/indefinido-indemma/spec/record/persistable_spec.js +36 -0
  85. data/vendor/components/indefinido-indemma/spec/record/queryable_spec.js +33 -0
  86. data/vendor/components/indefinido-indemma/spec/record/resource_spec.js +93 -0
  87. data/vendor/components/indefinido-indemma/spec/record/rest_spec.js +32 -0
  88. data/vendor/components/indefinido-indemma/spec/record/restfulable_spec.js +288 -0
  89. data/vendor/components/indefinido-indemma/spec/record/scopable_spec.js +212 -0
  90. data/vendor/components/indefinido-indemma/spec/record/storable_spec.js +53 -0
  91. data/vendor/components/indefinido-indemma/spec/record/translationable.js +28 -0
  92. data/vendor/components/indefinido-indemma/spec/record/validatable_spec.js +111 -0
  93. data/vendor/components/indefinido-indemma/spec/record/validations/associated_spec.js +43 -0
  94. data/vendor/components/indefinido-indemma/spec/record/validations/confirmation_spec.js +36 -0
  95. data/vendor/components/indefinido-indemma/spec/record/validations/cpf_spec.js +35 -0
  96. data/vendor/components/indefinido-indemma/spec/record/validations/presence_spec.js +28 -0
  97. data/vendor/components/indefinido-indemma/spec/record/validations/remote_spec.js +87 -0
  98. data/vendor/components/indefinido-indemma/spec/record/validations/type_spec.js +48 -0
  99. data/vendor/components/indefinido-indemma/spec/record_spec.js +37 -0
  100. data/vendor/components/indefinido-indemma/spec/spec_helper.js +11 -0
  101. data/vendor/components/indefinido-indemma/spec/support/value_objects/phone.js +45 -0
  102. data/vendor/components/indefinido-indemma/src/lib/extensions/rivets.coffee +17 -0
  103. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +342 -0
  104. data/vendor/components/indefinido-indemma/src/lib/record/errors.coffee +20 -0
  105. data/vendor/components/indefinido-indemma/src/lib/record/maid.coffee +16 -0
  106. data/vendor/components/indefinido-indemma/src/lib/record/persistable.coffee +27 -0
  107. data/vendor/components/indefinido-indemma/src/lib/record/queryable.coffee +29 -0
  108. data/vendor/components/indefinido-indemma/src/lib/record/resource.coffee +106 -0
  109. data/vendor/components/indefinido-indemma/src/lib/record/rest.coffee +28 -0
  110. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +348 -0
  111. data/vendor/components/indefinido-indemma/src/lib/record/scopable.coffee +275 -0
  112. data/vendor/components/indefinido-indemma/src/lib/record/storable.coffee +46 -0
  113. data/vendor/components/indefinido-indemma/src/lib/record/translationable.coffee +18 -0
  114. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +217 -0
  115. data/vendor/components/indefinido-indemma/src/lib/record/validations/associated.coffee +32 -0
  116. data/vendor/components/indefinido-indemma/src/lib/record/validations/confirmation.coffee +19 -0
  117. data/vendor/components/indefinido-indemma/src/lib/record/validations/cpf.coffee +58 -0
  118. data/vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee +19 -0
  119. data/vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee +65 -0
  120. data/vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee +32 -0
  121. data/vendor/components/indefinido-indemma/src/lib/record.coffee +136 -0
  122. data/vendor/components/indefinido-indemma/src/spec/record/associable_spec.coffee +130 -0
  123. data/vendor/components/indefinido-indemma/src/spec/record/persistable_spec.coffee +30 -0
  124. data/vendor/components/indefinido-indemma/src/spec/record/queryable_spec.coffee +27 -0
  125. data/vendor/components/indefinido-indemma/src/spec/record/resource_spec.coffee +69 -0
  126. data/vendor/components/indefinido-indemma/src/spec/record/rest_spec.coffee +22 -0
  127. data/vendor/components/indefinido-indemma/src/spec/record/restfulable_spec.coffee +207 -0
  128. data/vendor/components/indefinido-indemma/src/spec/record/scopable_spec.coffee +191 -0
  129. data/vendor/components/indefinido-indemma/src/spec/record/storable_spec.coffee +40 -0
  130. data/vendor/components/indefinido-indemma/src/spec/record/translationable.coffee +19 -0
  131. data/vendor/components/indefinido-indemma/src/spec/record/validatable_spec.coffee +100 -0
  132. data/vendor/components/indefinido-indemma/src/spec/record/validations/associated_spec.coffee +35 -0
  133. data/vendor/components/indefinido-indemma/src/spec/record/validations/confirmation_spec.coffee +25 -0
  134. data/vendor/components/indefinido-indemma/src/spec/record/validations/cpf_spec.coffee +28 -0
  135. data/vendor/components/indefinido-indemma/src/spec/record/validations/presence_spec.coffee +24 -0
  136. data/vendor/components/indefinido-indemma/src/spec/record/validations/remote_spec.coffee +74 -0
  137. data/vendor/components/indefinido-indemma/src/spec/record/validations/type_spec.coffee +33 -0
  138. data/vendor/components/indefinido-indemma/src/spec/record_spec.coffee +23 -0
  139. data/vendor/components/indefinido-indemma/src/spec/spec_helper.coffee +9 -0
  140. data/vendor/components/indefinido-indemma/src/spec/support/value_objects/phone.coffee +30 -0
  141. data/vendor/components/indefinido-indemma/vendor/object/mixin.js +196 -0
  142. data/vendor/components/indefinido-indemma/vendor/owl/pluralize.js +190 -0
  143. metadata +130 -2
@@ -0,0 +1,93 @@
1
+ var jQuery, model, record, root;
2
+
3
+ require('indemma/lib/record/restfulable');
4
+
5
+ require('indemma/lib/record/resource');
6
+
7
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
8
+
9
+ model = root.model;
10
+
11
+ record = root.record;
12
+
13
+ jQuery = require('component-jquery');
14
+
15
+ describe('resource', function() {
16
+ describe('with scope option', function() {
17
+ var person, towel;
18
+
19
+ person = towel = null;
20
+ beforeEach(function() {
21
+ person = model.call({
22
+ resource: 'person'
23
+ });
24
+ return towel = model.call({
25
+ resource: {
26
+ name: 'towel',
27
+ scope: 'users'
28
+ }
29
+ });
30
+ });
31
+ return it('should be prefixed with scope', function() {
32
+ towel.route.should.be.eq('/users/towels');
33
+ towel({}).route.should.be.eq('/users/towels');
34
+ return towel({
35
+ id: 1
36
+ }).route.should.be.eq('/users/towels');
37
+ });
38
+ });
39
+ describe('with singular resource', function() {
40
+ var towel;
41
+
42
+ towel = null;
43
+ beforeEach(function() {
44
+ var context, deferred, promises;
45
+
46
+ towel = model.call({
47
+ resource: {
48
+ name: 'towel',
49
+ singular: true
50
+ }
51
+ });
52
+ deferred = jQuery.Deferred();
53
+ context = towel({
54
+ name: 'Arthur Philip Dent'
55
+ });
56
+ context.lock = JSON.stringify(context.json());
57
+ deferred.resolveWith(context, [
58
+ {
59
+ _id: 1,
60
+ name: 'Arthur Philip Dent'
61
+ }
62
+ ]);
63
+ sinon.stub(jQuery, "ajax").returns(deferred);
64
+ return promises = towel.create({
65
+ name: 'Arthur Philip Dent'
66
+ }, {
67
+ name: 'Ford'
68
+ });
69
+ });
70
+ afterEach(function() {
71
+ return jQuery.ajax.restore();
72
+ });
73
+ return it('the route should be in singular form', function() {
74
+ towel.route.should.be.eq('/towel');
75
+ towel({}).route.should.be.eq('/towel');
76
+ return towel({
77
+ id: 1
78
+ }).route.should.be.eq('/towel');
79
+ });
80
+ });
81
+ describe('when included', function() {
82
+ return xit('sets the resource loaded flag on model', function() {});
83
+ });
84
+ return describe('model', function() {
85
+ it('add methods to model object');
86
+ describe('#pluralize', function() {
87
+ return xit('transforms word into plural form');
88
+ });
89
+ return describe('#singularize', function() {
90
+ return xit('transforms word into singular form');
91
+ });
92
+ });
93
+ });
@@ -0,0 +1,32 @@
1
+ var jQuery, rest, root;
2
+
3
+ require('indemma/lib/record/resource');
4
+
5
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
6
+
7
+ rest = require('indemma/lib/record/rest');
8
+
9
+ jQuery = require('component-jquery');
10
+
11
+ describe('rest', function() {
12
+ var object;
13
+
14
+ object = null;
15
+ beforeEach(function() {
16
+ object = Object.create(rest);
17
+ object.route = "users";
18
+ return object.resource = "user";
19
+ });
20
+ beforeEach(function() {
21
+ return sinon.stub(jQuery, "ajax").returns(jQuery.Deferred());
22
+ });
23
+ afterEach(function() {
24
+ return jQuery.ajax.restore();
25
+ });
26
+ return describe('#delete', function() {
27
+ return it('should make ajax call', function() {
28
+ object["delete"]();
29
+ return jQuery.ajax.called.should.be["true"];
30
+ });
31
+ });
32
+ });
@@ -0,0 +1,288 @@
1
+ var jQuery, model, record, root, should_behave_like_errorsable;
2
+
3
+ require('indemma/lib/record/restfulable');
4
+
5
+ require('indemma/lib/record/validatable');
6
+
7
+ require('indemma/lib/record/resource');
8
+
9
+ 'use strict';
10
+
11
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
12
+
13
+ model = root.model;
14
+
15
+ record = root.record;
16
+
17
+ jQuery = require('component-jquery');
18
+
19
+ should_behave_like_errorsable = function() {
20
+ return describe('.errors', function() {
21
+ return describe('when server responds', function() {
22
+ beforeEach(function() {
23
+ return this.xhr = {
24
+ status: 422
25
+ };
26
+ });
27
+ describe('with errors', function() {
28
+ it('should add messages for each attribute on the errors object');
29
+ return it('should add messages for base attribute on the errors object', function() {
30
+ var base_messages;
31
+
32
+ base_messages = ["arthur you should bring a towel!"];
33
+ this.xhr.responseText = JSON.stringify({
34
+ errors: {
35
+ base: base_messages
36
+ }
37
+ });
38
+ this.subject.failed(this.xhr, 'error');
39
+ this.subject.should.have.property('errors');
40
+ this.subject.errors[0].should.include('base', 'server', {
41
+ server_message: base_messages[0]
42
+ });
43
+ return this.subject.errors.messages.should.have.property('base', base_messages[0]);
44
+ });
45
+ });
46
+ return describe('with invalid error messages', function() {
47
+ return it('when inexistent attribute should throw exception', function() {});
48
+ });
49
+ });
50
+ });
51
+ };
52
+
53
+ describe('restfulable', function() {
54
+ describe('when included', function() {
55
+ return it('sets te restufulable loaded flag on model', function() {
56
+ return model.restfulable.should.be["true"];
57
+ });
58
+ });
59
+ describe('record', function() {
60
+ var arthur;
61
+
62
+ arthur = null;
63
+ return describe('()', function() {
64
+ beforeEach(function() {
65
+ this.arthur = arthur = record.call({
66
+ resource: 'person',
67
+ name: 'Arthur Philip Dent'
68
+ });
69
+ return this.arthur.dirty = true;
70
+ });
71
+ return describe('.save()', function() {
72
+ beforeEach(function() {
73
+ return sinon.stub(jQuery, "ajax").returns(jQuery.Deferred());
74
+ });
75
+ afterEach(function() {
76
+ return jQuery.ajax.restore();
77
+ });
78
+ it('should be able to serialize record', function() {
79
+ return JSON.stringify(arthur.json());
80
+ });
81
+ it('should ignore key in transient fields');
82
+ it('should send paramenters accordingly');
83
+ return it('should make ajax call', function() {
84
+ arthur.save();
85
+ return jQuery.ajax.called.should.be["true"];
86
+ });
87
+ });
88
+ });
89
+ });
90
+ return describe('model', function() {
91
+ return describe('()', function() {
92
+ describe('.json()', function() {
93
+ var friend, person;
94
+
95
+ friend = person = null;
96
+ return beforeEach(function() {
97
+ person = model.call({
98
+ resource: 'person',
99
+ has_many: 'friends',
100
+ nested_attributes: ['friends'],
101
+ name: String
102
+ });
103
+ return friend = model.call({
104
+ resource: 'friend',
105
+ belongs_to: 'person'
106
+ });
107
+ });
108
+ });
109
+ describe('.assign_attributes()', function() {
110
+ var friend, person;
111
+
112
+ friend = person = null;
113
+ beforeEach(function() {
114
+ person = model.call({
115
+ resource: 'person',
116
+ has_many: 'friends',
117
+ name: String
118
+ });
119
+ return friend = model.call({
120
+ resource: 'friend',
121
+ belongs_to: 'person'
122
+ });
123
+ });
124
+ return it('assigns associations properly', function() {
125
+ var arthur, attributes, ford, marvin, search_record;
126
+
127
+ arthur = person({
128
+ name: 'Arthur Dent'
129
+ });
130
+ ford = friend({
131
+ name: 'Ford Perfect'
132
+ });
133
+ marvin = friend({
134
+ name: 'Marvin'
135
+ });
136
+ attributes = {
137
+ friends: [ford, marvin]
138
+ };
139
+ arthur.assign_attributes(attributes);
140
+ search_record = function(association, search) {
141
+ var associated, _i, _len;
142
+
143
+ search = JSON.stringify(search.json());
144
+ for (_i = 0, _len = association.length; _i < _len; _i++) {
145
+ associated = association[_i];
146
+ associated = JSON.stringify(associated.json());
147
+ if (associated === search) {
148
+ return true;
149
+ }
150
+ }
151
+ return false;
152
+ };
153
+ search_record(arthur.friends, ford).should.be.eq["true"];
154
+ return search_record(arthur.friends, arthur).should.be.eq["true"];
155
+ });
156
+ });
157
+ describe('with singular resource', function() {
158
+ return describe('.create()', function() {
159
+ it('should return promises');
160
+ return it('should return models when promise is resolved');
161
+ });
162
+ });
163
+ describe('with plural resource', function() {
164
+ return describe('.create()', function() {
165
+ var deferred, person, promise;
166
+
167
+ deferred = promise = person = null;
168
+ should_behave_like_errorsable();
169
+ beforeEach(function() {
170
+ var context;
171
+
172
+ person = model.call({
173
+ resource: 'person'
174
+ });
175
+ deferred = jQuery.Deferred();
176
+ this.subject = context = person({
177
+ name: 'Arthur'
178
+ });
179
+ context.lock = JSON.stringify(context.json());
180
+ deferred.resolveWith(context, [
181
+ {
182
+ _id: 1,
183
+ name: 'Arthur'
184
+ }
185
+ ]);
186
+ deferred.resolveWith(person({
187
+ name: 'Arthur'
188
+ }), [
189
+ {
190
+ _id: 1,
191
+ name: 'Arthur'
192
+ }
193
+ ]);
194
+ sinon.stub(jQuery, "ajax").returns(deferred);
195
+ return promise = person.create({
196
+ name: 'Arthur'
197
+ }, {
198
+ name: 'Ford'
199
+ });
200
+ });
201
+ afterEach(function() {
202
+ return jQuery.ajax.restore();
203
+ });
204
+ it('should return a promise', function(done) {
205
+ promise.done.should.be["function"];
206
+ promise.state().should.be.eq('resolved');
207
+ return promise.done(function() {
208
+ return done();
209
+ }).should.be.eq('resolved');
210
+ });
211
+ it('should return models when promise is resolved', function(done) {
212
+ var created;
213
+
214
+ created = function() {
215
+ this.name.should.be.eq('Arthur');
216
+ return done();
217
+ };
218
+ return person.create({
219
+ name: 'Arthur'
220
+ }, {
221
+ name: 'Ford'
222
+ }, created);
223
+ });
224
+ it('should optionally accept create callback', function(done) {
225
+ promise = person.create({
226
+ name: 'Arthur'
227
+ }, {
228
+ name: 'Ford'
229
+ });
230
+ promise.done.should.be["function"];
231
+ promise.done(function() {
232
+ return done();
233
+ });
234
+ return promise.state().should.be.eq('resolved');
235
+ });
236
+ it('should create record when only callback is passed', function(done) {
237
+ person.create(function() {
238
+ return done();
239
+ });
240
+ return jQuery.ajax.callCount.should.be.eq(3);
241
+ });
242
+ it('should throw exception when nothing is passed', function() {
243
+ return expect(person.create).to["throw"](TypeError);
244
+ });
245
+ return it('should make ajax calls', function() {
246
+ return jQuery.ajax.callCount.should.be.eq(3);
247
+ });
248
+ });
249
+ });
250
+ return describe('.destroy()', function() {
251
+ return describe('with plural resource', function() {
252
+ var arthur, deferred, person;
253
+
254
+ arthur = person = deferred = null;
255
+ beforeEach(function() {
256
+ person = model.call({
257
+ resource: 'person'
258
+ });
259
+ deferred = jQuery.Deferred();
260
+ deferred.resolveWith(person({
261
+ name: 'Arthur'
262
+ }), [
263
+ {
264
+ id: 1
265
+ }
266
+ ]);
267
+ sinon.stub(jQuery, "ajax").returns(deferred);
268
+ return arthur = person({
269
+ name: 'Arthur',
270
+ id: 1
271
+ });
272
+ });
273
+ afterEach(function() {
274
+ return jQuery.ajax.restore();
275
+ });
276
+ it("throw exception when record has no id", function() {
277
+ delete arthur.id;
278
+ return expect(arthur.destroy).to["throw"](Error);
279
+ });
280
+ return it("should make ajax calls", function() {
281
+ arthur.destroy();
282
+ return jQuery.ajax.callCount.should.be.eq(1);
283
+ });
284
+ });
285
+ });
286
+ });
287
+ });
288
+ });
@@ -0,0 +1,212 @@
1
+ var model, record, root;
2
+
3
+ require('indemma/lib/record/resource');
4
+
5
+ require('indemma/lib/record/restfulable');
6
+
7
+ require('indemma/lib/record/scopable');
8
+
9
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
10
+
11
+ model = root.model;
12
+
13
+ record = root.record;
14
+
15
+ describe('scopable', function() {
16
+ describe('when included', function() {
17
+ return it('sets te scopable loaded flag on model', function() {
18
+ return model.scopable.should.be["true"];
19
+ });
20
+ });
21
+ return describe('model', function() {
22
+ return describe('#(options)', function() {
23
+ var person;
24
+
25
+ person = null;
26
+ beforeEach(function() {
27
+ return person = model.call({
28
+ $hetero: true,
29
+ $by_type: [],
30
+ $by_name: String,
31
+ resource: 'person'
32
+ });
33
+ });
34
+ it('should add scope methods to model', function() {
35
+ return person.none.should.be["function"];
36
+ });
37
+ it('should generate scope methods based on model definition', function() {
38
+ return person.hetero.should.be["function"];
39
+ });
40
+ describe('#none', function() {
41
+ return it('should return empty response on fetch calls', function(done) {
42
+ return person.none().fetch(null, function(people) {
43
+ people.length.should.be.empty;
44
+ return done();
45
+ });
46
+ });
47
+ });
48
+ describe('scope', function() {
49
+ return describe('#(name, type)', function() {
50
+ return it('should add scope methods to model', function() {
51
+ person.scope('bissexual', Boolean);
52
+ return person.bissexual.should.be["function"];
53
+ });
54
+ });
55
+ });
56
+ return describe('#{generated_scope}', function() {
57
+ var deferred;
58
+
59
+ deferred = null;
60
+ beforeEach(function() {
61
+ deferred = jQuery.Deferred();
62
+ sinon.stub(jQuery, "ajax").returns(deferred);
63
+ return person.scope.clear();
64
+ });
65
+ afterEach(function() {
66
+ return jQuery.ajax.restore();
67
+ });
68
+ describe('#all', function() {
69
+ var promises;
70
+
71
+ deferred = promises = person = null;
72
+ return it('should return models when promise is resolved', function(done) {
73
+ var fetched;
74
+
75
+ fetched = function(people) {
76
+ people.should.be.array;
77
+ people[0].name.should.be.string;
78
+ return done();
79
+ };
80
+ person.all(fetched);
81
+ deferred.resolveWith(person, [
82
+ [
83
+ {
84
+ name: 'Arthur'
85
+ }, {
86
+ name: 'Ford'
87
+ }
88
+ ]
89
+ ]);
90
+ return jQuery.ajax.callCount.should.be.eq(1);
91
+ });
92
+ });
93
+ describe('when string', function() {
94
+ it('should acumulate data in scope object', function() {
95
+ person.by_name();
96
+ return person.scope.data.by_name.should.be.a('string');
97
+ });
98
+ return it('should override data throught parameters', function() {
99
+ person.by_name('Ford');
100
+ return person.scope.data.by_name.should.be.eq('Ford');
101
+ });
102
+ });
103
+ describe('when array', function() {
104
+ it('should acumulate data in scope object', function() {
105
+ person.by_type();
106
+ return person.scope.data.by_type.should.be.a('array');
107
+ });
108
+ it('should override data throught parameters', function() {
109
+ person.by_type(1, 2, 3);
110
+ return person.scope.data.by_type.should.contain(1, 2, 3);
111
+ });
112
+ it('should use default value');
113
+ it('should allow scope chaining');
114
+ return describe('xhr request', function() {
115
+ it('should build correct url', function() {
116
+ var settings;
117
+
118
+ person.by_type(1, 3, 4).fetch();
119
+ settings = jQuery.ajax.firstCall.args[0];
120
+ settings.should.have.property('data');
121
+ settings.data.should.have.property('by_type');
122
+ return settings.data.by_type.should.include(1, 3, 4);
123
+ });
124
+ return it('should make call', function() {
125
+ person.by_type(1, 3, 4).fetch();
126
+ return jQuery.ajax.callCount.should.be.eq(1);
127
+ });
128
+ });
129
+ });
130
+ describe('when boolean', function() {
131
+ it('should acumulate data in scope object', function() {
132
+ person.hetero();
133
+ return person.scope.data.hetero.should.be.eq(true);
134
+ });
135
+ it('should override data throught parameters', function() {
136
+ person.hetero(false);
137
+ return person.scope.data.hetero.should.be.eq(false);
138
+ });
139
+ it('should allow scope chaining');
140
+ return it('should make ajax call', function() {
141
+ person.hetero().fetch();
142
+ return jQuery.ajax.callCount.should.be.eq(1);
143
+ });
144
+ });
145
+ return describe('#{generated_association}', function() {
146
+ describe('of type belongs_to', function() {
147
+ var towel;
148
+
149
+ towel = null;
150
+ beforeEach(function() {
151
+ person = model.call({
152
+ $hetero: true,
153
+ $by_type: [],
154
+ resource: 'person'
155
+ });
156
+ return towel = model.call({
157
+ resource: 'towel',
158
+ material: 'cotton',
159
+ belongs_to: 'person'
160
+ });
161
+ });
162
+ return describe('#{generated_scope}', function() {
163
+ return it('can be called on association', function() {
164
+ var soft_towel;
165
+
166
+ soft_towel = towel({
167
+ material: 'silicon microfiber'
168
+ });
169
+ soft_towel.build_person();
170
+ return expect(soft_towel.person).to.respondTo('hetero');
171
+ });
172
+ });
173
+ });
174
+ return describe('of type has_many', function() {
175
+ var arthur, towel;
176
+
177
+ arthur = towel = null;
178
+ beforeEach(function() {
179
+ person = model.call({
180
+ $hetero: true,
181
+ $by_type: [],
182
+ resource: 'person',
183
+ has_many: 'towels'
184
+ });
185
+ towel = model.call({
186
+ $by_material: [],
187
+ resource: 'towel',
188
+ material: 'cotton',
189
+ belongs_to: 'person'
190
+ });
191
+ return arthur = person({
192
+ name: 'Arthur'
193
+ });
194
+ });
195
+ return describe('#{generated_scope}', function() {
196
+ it('can be called on association', function() {
197
+ return expect(arthur.towels).to.respondTo('by_material');
198
+ });
199
+ return it('should be serializable into paramenters', function() {
200
+ var query_string;
201
+
202
+ arthur.towels.by_material('cotton', 'microfiber');
203
+ query_string = decodeURIComponent(jQuery.param(arthur.towels.scope.data));
204
+ return query_string.should.be.eq('by_material[]=cotton&by_material[]=microfiber');
205
+ });
206
+ });
207
+ });
208
+ });
209
+ });
210
+ });
211
+ });
212
+ });
@@ -0,0 +1,53 @@
1
+ var root, storable;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ storable = require('indemma/lib/record/storable');
6
+
7
+ describe('storable', function() {
8
+ it('should set the storable key', function() {
9
+ return model.should.have.property('storable', true);
10
+ });
11
+ beforeEach(function() {
12
+ return this.storage = storable();
13
+ });
14
+ return describe("#store", function() {
15
+ describe("write", function() {
16
+ it("should write object on deep storage");
17
+ it("should write object on storage", function() {
18
+ var data;
19
+
20
+ data = {
21
+ name: 'Arthur Dent'
22
+ };
23
+ this.storage.store('1', data);
24
+ this.storage.writes.should.be.eq(1);
25
+ return this.storage.database['1'].should.be.eq(data);
26
+ });
27
+ return it("should mark an object as sustained", function() {
28
+ var data;
29
+
30
+ data = {
31
+ name: 'Arthur Dent'
32
+ };
33
+ this.storage.store('1', data);
34
+ return data.should.have.property('sustained', true);
35
+ });
36
+ });
37
+ return describe("read", function() {
38
+ var data;
39
+
40
+ data = null;
41
+ beforeEach(function() {
42
+ data = {
43
+ name: 'Arthur Dent'
44
+ };
45
+ return this.storage.store('1', data);
46
+ });
47
+ it("should save object on storage", function() {
48
+ return this.storage.store('1').should.be.eq(data);
49
+ });
50
+ return it("should unmark an object as sustained");
51
+ });
52
+ });
53
+ });
@@ -0,0 +1,28 @@
1
+ var root;
2
+
3
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
4
+
5
+ require('indemma/lib/record/translationable');
6
+
7
+ describe('model', function() {
8
+ var model, person;
9
+
10
+ model = root.model;
11
+ person = null;
12
+ beforeEach(function() {
13
+ return person = model.call({
14
+ resource: 'person',
15
+ name: String,
16
+ translation: {
17
+ attributes: {
18
+ name: 'Batata'
19
+ }
20
+ }
21
+ });
22
+ });
23
+ return describe('#human_attribute_name', function() {
24
+ return it('should return the translated attribute name', function() {
25
+ return person.human_attribute_name('name').should.be.eq('Batata');
26
+ });
27
+ });
28
+ });