kojac 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +7 -0
  3. data/Gemfile +17 -0
  4. data/Gemfile.lock +158 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +69 -0
  7. data/Rakefile +27 -0
  8. data/app/assets/javascripts/can_extensions.js +45 -0
  9. data/app/assets/javascripts/kojac.js +1230 -0
  10. data/app/assets/javascripts/kojac_canjs.js +191 -0
  11. data/app/assets/javascripts/kojac_ember.js +463 -0
  12. data/app/controllers/kojac_controller.rb +70 -0
  13. data/app/serializers/default_kojac_serializer.rb +10 -0
  14. data/diagram.odg +0 -0
  15. data/kojac.gemspec +36 -0
  16. data/lib/kojac/app_serialize.rb +29 -0
  17. data/lib/kojac/kojac_rails.rb +432 -0
  18. data/lib/kojac/ring_strong_parameters.rb +195 -0
  19. data/lib/kojac/version.rb +3 -0
  20. data/lib/kojac.rb +8 -0
  21. data/lib/tasks/kojac_tasks.rake +4 -0
  22. data/notes.txt +48 -0
  23. data/spec/.DS_Store +0 -0
  24. data/spec/can_cache_spec.js +87 -0
  25. data/spec/can_factory_spec.js +144 -0
  26. data/spec/can_model_spec.js +127 -0
  27. data/spec/demo/README.rdoc +261 -0
  28. data/spec/demo/Rakefile +7 -0
  29. data/spec/demo/app/assets/javascripts/application.js +15 -0
  30. data/spec/demo/app/assets/stylesheets/application.css +13 -0
  31. data/spec/demo/app/controllers/application_controller.rb +3 -0
  32. data/spec/demo/app/helpers/application_helper.rb +2 -0
  33. data/spec/demo/app/mailers/.gitkeep +0 -0
  34. data/spec/demo/app/models/.gitkeep +0 -0
  35. data/spec/demo/app/views/layouts/application.html.erb +14 -0
  36. data/spec/demo/config/application.rb +65 -0
  37. data/spec/demo/config/boot.rb +10 -0
  38. data/spec/demo/config/database.yml +25 -0
  39. data/spec/demo/config/environment.rb +5 -0
  40. data/spec/demo/config/environments/development.rb +37 -0
  41. data/spec/demo/config/environments/production.rb +67 -0
  42. data/spec/demo/config/environments/test.rb +37 -0
  43. data/spec/demo/config/initializers/backtrace_silencers.rb +7 -0
  44. data/spec/demo/config/initializers/inflections.rb +15 -0
  45. data/spec/demo/config/initializers/mime_types.rb +5 -0
  46. data/spec/demo/config/initializers/secret_token.rb +7 -0
  47. data/spec/demo/config/initializers/session_store.rb +8 -0
  48. data/spec/demo/config/initializers/wrap_parameters.rb +14 -0
  49. data/spec/demo/config/locales/en.yml +5 -0
  50. data/spec/demo/config/routes.rb +58 -0
  51. data/spec/demo/config.ru +4 -0
  52. data/spec/demo/lib/assets/.gitkeep +0 -0
  53. data/spec/demo/log/.gitkeep +0 -0
  54. data/spec/demo/public/404.html +26 -0
  55. data/spec/demo/public/422.html +26 -0
  56. data/spec/demo/public/500.html +25 -0
  57. data/spec/demo/public/favicon.ico +0 -0
  58. data/spec/demo/script/rails +6 -0
  59. data/spec/ember_factory_spec.js +157 -0
  60. data/spec/ember_model_spec.js +179 -0
  61. data/spec/external/.DS_Store +0 -0
  62. data/spec/external/ember/.DS_Store +0 -0
  63. data/spec/external/ember/ember-1.0.0-rc.6.js +30970 -0
  64. data/spec/external/ember/handlebars-1.0.0-rc.4.js +2239 -0
  65. data/spec/external/jasmine/MIT.LICENSE +20 -0
  66. data/spec/external/jasmine/jasmine-html.js +616 -0
  67. data/spec/external/jasmine/jasmine.css +81 -0
  68. data/spec/external/jasmine/jasmine.js +2529 -0
  69. data/spec/external/jasmine.async.js +51 -0
  70. data/spec/external/jquery/jquery-1.7.2.js +9404 -0
  71. data/spec/external/jquery/jquery-1.7.2.min.js +4 -0
  72. data/spec/external/jquery/jquery-1.9.1.js +9597 -0
  73. data/spec/external/json2.js +480 -0
  74. data/spec/external/steal/steal-121115.js +2747 -0
  75. data/spec/external/steal/steal-3.2.3.js +2098 -0
  76. data/spec/external/steal/steal-3.2.3.min.js +27 -0
  77. data/spec/external/steal/steal.js +2466 -0
  78. data/spec/external/steal/steal.min.js +32 -0
  79. data/spec/external/steal/stealconfig.js +19 -0
  80. data/spec/external/underscore.js +1223 -0
  81. data/spec/external/underscore_plus.js +261 -0
  82. data/spec/external.zip +0 -0
  83. data/spec/handler_stack_spec.js +143 -0
  84. data/spec/helpers/SpecHelper.js +10 -0
  85. data/spec/kojac_caching_spec.js +105 -0
  86. data/spec/kojac_mock_spec.js +230 -0
  87. data/spec/kojac_model_spec.js +126 -0
  88. data/spec/kojac_object_spec.js +171 -0
  89. data/spec/kojac_operations_spec.js +41 -0
  90. data/spec/mockjson/order_item.js +37 -0
  91. data/spec/mockjson/order_item__49.js +15 -0
  92. data/spec/mockjson/order_item__50.js +15 -0
  93. data/spec/mockjson/order_item__51.js +15 -0
  94. data/spec/mockjson/product.js +82 -0
  95. data/spec/mockjson/product__3.js +22 -0
  96. data/spec/model_ring_spec.rb +52 -0
  97. data/spec/operation_include_spec.js +77 -0
  98. data/spec/run.html +81 -0
  99. data/spec/spec.js +2 -0
  100. data/spec/support/jasmine.yml +86 -0
  101. metadata +380 -0
@@ -0,0 +1,230 @@
1
+ describe("Kojac Mock", function() {
2
+
3
+ var App = {};
4
+
5
+ var OrderItem = Kojac.Object.extend({
6
+ id: Int,
7
+ customer_id: Int,
8
+ product_id: Int
9
+ });
10
+
11
+ var Product = Kojac.Object.extend({
12
+
13
+ });
14
+
15
+ beforeEach(function () {
16
+ App.cache = new Kojac.Object();
17
+ var factory = new Kojac.ObjectFactory();
18
+ factory.register([
19
+ [/^order_item(__|$)/,OrderItem],
20
+ [/^product(__|$)/,Product]
21
+ ]);
22
+ App.kojac = new Kojac.Core({
23
+ cache: App.cache,
24
+ remoteProvider: new Kojac.RemoteProvider({useMockFileValues: true, mockFilePath: 'mockjson/'}),
25
+ objectFactory: factory
26
+ });
27
+ });
28
+
29
+ it("try reading order_item,product", function() {
30
+ var op;
31
+ var req;
32
+ runs(function() {
33
+ req = App.kojac.readRequest(['order_item','product','order_item__50']);
34
+ expect(req).toBeDefined('ops');
35
+ expect(req).toBeDefined('options');
36
+ expect(req.ops.length).toEqual(3);
37
+ op = req.ops[0];
38
+ expect(op.verb).toEqual('READ');
39
+ expect(op.key).toEqual('order_item');
40
+ expect(op.result_key).toEqual(op.key);
41
+ expect(op.results).toEqual({});
42
+ op = req.ops[1];
43
+ expect(op.verb).toEqual('READ');
44
+ expect(op.key).toEqual('product');
45
+ expect(op.result_key).toEqual(op.key);
46
+ expect(op.results).toEqual({});
47
+ op = req.ops[2];
48
+ expect(op.verb).toEqual('READ');
49
+ expect(op.key).toEqual('order_item__50');
50
+ expect(op.result_key).toEqual(op.key);
51
+ expect(op.results).toEqual({});
52
+ });
53
+ waitsFor(function() {
54
+ return req.isResolved()
55
+ }, "request done", 3000);
56
+ runs(function() {
57
+ expect(req.ops).toBeDefined();
58
+ op = req.ops[0];
59
+ expect(op.verb).toEqual('READ');
60
+ expect(op.key).toEqual('order_item');
61
+ expect(op.result_key).toEqual(op.key);
62
+ expect(typeof(op.results)).toBe('object');
63
+ expect(op.results.order_item).toEqual([49,50,51]);
64
+ expect(op.results.order_item__49.constructor).toBe(OrderItem);
65
+ expect(op.results.order_item__49.id).toEqual(49);
66
+ expect(op.results.order_item__49.accountRef).toEqual("000049X");
67
+ expect(op.results.order_item__49.productId).toEqual(3);
68
+ op = req.ops[1];
69
+ expect(op.verb).toEqual('READ');
70
+ expect(op.key).toEqual('product');
71
+ expect(op.result_key).toEqual(op.key);
72
+ expect(typeof(op.results)).toBe('object');
73
+ expect(op.results.product).toEqual([3,4,5]);
74
+ expect(op.results.product__3.constructor).toBe(Product);
75
+ expect(op.results.product__3.name).toEqual("Product 3");
76
+ expect(op.results.product__3.provider).toEqual("AJAX Pty Ltd");
77
+ op = req.ops[2];
78
+ expect(op.verb).toEqual('READ');
79
+ expect(op.key).toEqual('order_item__50');
80
+ expect(op.result_key).toEqual(op.key);
81
+ expect(op.results.order_item__50.constructor).toBe(OrderItem);
82
+ expect(op.results.order_item__50.accountRef).toEqual("000050X");
83
+ expect(op.results.order_item__50.memberTypeId).toEqual("CDB");
84
+ expect(op.results.order_item__50.drawings).toEqual(1234.50);
85
+
86
+ expect(App.cache.order_item__49).toBeDefined();
87
+ expect(App.cache.order_item__49).toBe(req.ops[0].results.order_item__49);
88
+ expect(App.cache.product__3).toBeDefined();
89
+ expect(App.cache.product__3).toBe(req.ops[1].results.product__3);
90
+ });
91
+ });
92
+
93
+ it("try creating", function() {
94
+ var op;
95
+ var req;
96
+ App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
97
+ op.result_key = 'order_item__54';
98
+ op.results = {
99
+ order_item__54: op.value
100
+ };
101
+ };
102
+ runs(function() {
103
+ req = App.kojac.createRequest([{order_item:{name: 'Fred'}}]);
104
+ expect(req).toBeDefined('ops');
105
+ expect(req).toBeDefined('options');
106
+ expect(req.ops.length).toEqual(1);
107
+ op = req.ops[0];
108
+ expect(op.verb).toEqual('CREATE');
109
+ expect(op.key).toEqual('order_item');
110
+ expect(op.value).toEqual({name: 'Fred'});
111
+ expect(op.results).toEqual({});
112
+ });
113
+ waitsFor(function() { return req.isResolved(); }, "request done", 3000);
114
+ runs(function() {
115
+ expect(req.ops).toBeDefined();
116
+ op = req.ops[0];
117
+ expect(op.verb).toEqual('CREATE');
118
+ expect(op.key).toEqual('order_item');
119
+ expect(op.result_key).toEqual('order_item__54');
120
+ expect(typeof(op.results)).toBe('object');
121
+ expect(op.results.order_item).toBeUndefined();
122
+ expect(op.results.order_item__54.constructor).toBe(OrderItem);
123
+ expect(op.results.order_item__54.name).toEqual("Fred");
124
+
125
+ expect(App.cache.order_item__54).toBeDefined();
126
+ expect(App.cache.order_item__54).toBe(op.results.order_item__54);
127
+ });
128
+ });
129
+
130
+ it("try updating", function() {
131
+ var op;
132
+ var req;
133
+ App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
134
+ op.result_key = op.key;
135
+ op.results = {
136
+ order_item__54: op.value
137
+ };
138
+ };
139
+ runs(function() {
140
+ req = App.kojac.updateRequest({order_item__54: {name: 'John'}});
141
+ expect(req).toBeDefined('ops');
142
+ expect(req).toBeDefined('options');
143
+ expect(req.ops.length).toEqual(1);
144
+ op = req.ops[0];
145
+ expect(op.verb).toEqual('UPDATE');
146
+ expect(op.key).toEqual('order_item__54');
147
+ expect(op.value).toEqual({name: 'John'});
148
+ expect(op.result_key).toEqual(op.key);
149
+ expect(op.results).toEqual({});
150
+ });
151
+ waitsFor(function() { return req.isResolved(); }, "request done", 3000);
152
+ runs(function() {
153
+ expect(req.ops).toBeDefined();
154
+ op = req.ops[0];
155
+ expect(op.result_key).toEqual(op.key);
156
+ expect(typeof(op.results)).toBe('object');
157
+ expect(op.results.order_item).toBeUndefined();
158
+ expect(op.results.order_item__54.constructor).toBe(OrderItem);
159
+ expect(op.results.order_item__54.name).toEqual("John");
160
+
161
+ expect(App.cache.order_item__54).toBeDefined();
162
+ expect(App.cache.order_item__54).toBe(op.results.order_item__54);
163
+ });
164
+ });
165
+
166
+ it("try destroying", function() {
167
+ var op;
168
+ var req;
169
+ App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
170
+ op.result_key = op.key;
171
+ op.results = {
172
+ order_item__54: undefined
173
+ };
174
+ };
175
+ runs(function() {
176
+ req = App.kojac.destroyRequest(['order_item__54']);
177
+ expect(req).toBeDefined('ops');
178
+ expect(req).toBeDefined('options');
179
+ expect(req.ops.length).toEqual(1);
180
+ op = req.ops[0];
181
+ expect(op.verb).toEqual('DESTROY');
182
+ expect(op.key).toEqual('order_item__54');
183
+ expect(op.value).toBeUndefined();
184
+ expect(op.result_key).toEqual(op.key);
185
+ expect(op.results).toEqual({});
186
+ });
187
+ waitsFor(function() { return req.isResolved(); }, "request done", 3000);
188
+ runs(function() {
189
+ expect(req.ops).toBeDefined();
190
+ op = req.ops[0];
191
+ expect(op.result_key).toEqual(op.key);
192
+ expect(typeof(op.results)).toBe('object');
193
+ expect(op.results.order_item__54).toBeUndefined();
194
+ expect(App.cache.order_item__54).toBeUndefined();
195
+ });
196
+ });
197
+
198
+ it("try executing", function() {
199
+ var op;
200
+ var req;
201
+ App.kojac.remoteProvider.mockReadOperationHandler = function(aOp) {
202
+ op.result_key = op.key;
203
+ op.results = {
204
+ results: [1,2,3]
205
+ };
206
+ };
207
+ runs(function() {
208
+ req = App.kojac.executeRequest('results',{a: 1,b:2},{cacheResults: true});
209
+ expect(req).toBeDefined('ops');
210
+ expect(req).toBeDefined('options');
211
+ expect(req.ops.length).toEqual(1);
212
+ op = req.ops[0];
213
+ expect(op.verb).toEqual('EXECUTE');
214
+ expect(op.key).toEqual('results');
215
+ expect(op.value).toEqual({a: 1,b:2});
216
+ expect(op.result_key).toEqual(op.key);
217
+ expect(op.results).toEqual({});
218
+ });
219
+ waitsFor(function() { return req.isResolved(); }, "request done", 3000);
220
+ runs(function() {
221
+ expect(req.ops).toBeDefined();
222
+ op = req.ops[0];
223
+ expect(op.result_key).toEqual(op.key);
224
+ expect(typeof(op.results)).toBe('object');
225
+ expect(op.results.results).toEqual([1,2,3]);
226
+ expect(App.cache.results).toEqual([1,2,3]);
227
+ });
228
+ });
229
+ });
230
+
@@ -0,0 +1,126 @@
1
+ describe("Kojac Model", function() {
2
+
3
+ var TestModel = Kojac.Model.extend({
4
+ name: String,
5
+ count: 8
6
+ });
7
+
8
+ var TestModel2 = TestModel.extend({
9
+ name: Boolean,
10
+ color: 'red'
11
+ });
12
+
13
+ var TestModel3 = TestModel.extend({
14
+ count: 0,
15
+ inc: function() {
16
+ this.count += 1;
17
+ }
18
+ });
19
+
20
+ it("create model class and object", function() {
21
+ expect(TestModel.__attributes).toEqual({name: String, count: Int});
22
+ expect(TestModel._superClass).toBe(Kojac.Model);
23
+ var testModel = new TestModel();
24
+ expect(testModel instanceof TestModel).toBe(true);
25
+ expect(testModel instanceof Kojac.Object).toBe(true);
26
+ expect(testModel.name).toBeNull();
27
+ expect(testModel.count).toBe(8);
28
+ expect(testModel.toJSON).toBeDefined();
29
+ });
30
+
31
+ it("extend with override and additional attribute", function() {
32
+ expect(TestModel2.__attributes).toEqual({name: Boolean, count: Int, color: String});
33
+ expect(TestModel2._superClass).toBe(TestModel);
34
+ var testModel2 = new TestModel2();
35
+ expect(testModel2 instanceof TestModel2).toBe(true);
36
+ expect(testModel2 instanceof Kojac.Object).toBe(true);
37
+ expect(testModel2.name).toBeNull();
38
+ expect(testModel2.count).toBe(8);
39
+ });
40
+
41
+ var CurSuper = Kojac.Model.extend({
42
+ id: Int,
43
+ accountRef: String,
44
+ productId: Int,
45
+ drawings: Number,
46
+ holdings: Array,
47
+ comments: Object,
48
+ content: Null
49
+ });
50
+
51
+ it("write, read and check with correct types", function() {
52
+ var values = {
53
+ id: 123,
54
+ accountRef: 'XYZ',
55
+ productId: 456,
56
+ drawings: 3567.88,
57
+ holdings: [{name: 'this'},{name: 'that'}],
58
+ comments: {name: 'something else'},
59
+ content: 123
60
+ };
61
+ var curSuper = new CurSuper(values);
62
+ expect(curSuper.attr()).toEqual(values);
63
+ });
64
+
65
+ it("write incorrect types, then read and check with attr and serialize", function() {
66
+ var incorrectValues = {
67
+ id: 123.345,
68
+ accountRef: 345345346,
69
+ productId: '456',
70
+ drawings: '3567.88',
71
+ holdings: "something",
72
+ comments: 'something else',
73
+ content: 'XYZ'
74
+ };
75
+ var correctValues = {
76
+ id: 123,
77
+ accountRef: '345345346',
78
+ productId: 456,
79
+ drawings: 3567.88,
80
+ holdings: null,
81
+ comments: null,
82
+ content: 'XYZ'
83
+ };
84
+ var curSuper = new CurSuper(incorrectValues);
85
+ expect(curSuper.attr()).toEqual(correctValues);
86
+ });
87
+
88
+
89
+ it("test if Model methods are bound", function() {
90
+ var testModel3 = new TestModel3();
91
+ expect(testModel3.count).toEqual(0);
92
+ testModel3.inc();
93
+ expect(testModel3.count).toEqual(1);
94
+ });
95
+
96
+ it("defaults test", function() {
97
+ var Zelda = Kojac.Model.extend({
98
+ sword: 'Wooden Sword',
99
+ shield: false,
100
+ hearts: 3,
101
+ rupees: 0
102
+ });
103
+ var link = new Zelda({
104
+ rupees: 255
105
+ });
106
+ expect(link.attr('sword')).toEqual('Wooden Sword');
107
+ expect(link.attr('rupees')).toEqual(255);
108
+ });
109
+
110
+ it("Kojac.Model defaults and methods work", function() {
111
+ var MyTestModel = Kojac.Model.extend({
112
+ count: 5,
113
+ inc: function() {
114
+ this.count += 1;
115
+ }
116
+ });
117
+ console.log('before new MyTestModel');
118
+ var testModel = new MyTestModel({});
119
+ console.log('after new MyTestModel');
120
+ expect(testModel.attr('count')).toBe(5);
121
+ testModel.inc();
122
+ expect(testModel.count).toEqual(6);
123
+ });
124
+
125
+ });
126
+
@@ -0,0 +1,171 @@
1
+ describe("John Resigs JrClass", function() {
2
+
3
+ it("JRs tests",function(){
4
+ var Person = JrClass.extend({
5
+ // init: function(isDancing){
6
+ // this.dancing = isDancing;
7
+ // },
8
+ dance: function(){
9
+ return this.dancing;
10
+ }
11
+ });
12
+ var Ninja = Person.extend({
13
+ init: function(){
14
+ this._super({dancing: false});
15
+ },
16
+ dance: function(){
17
+ // Call the inherited version of dance()
18
+ return this._super();
19
+ },
20
+ swingSword: function(){
21
+ return true;
22
+ }
23
+ });
24
+
25
+ var p = new Person({dancing: true});
26
+ expect(p.dance()).toBeTruthy();
27
+
28
+ var n = new Ninja();
29
+ expect(n.dance()).toBeFalsy();
30
+ expect(n.swingSword()).toBeTruthy();
31
+
32
+ // Should all be true
33
+ expect(p instanceof Person).toBeTruthy();
34
+ expect(p instanceof JrClass).toBeTruthy();
35
+ expect(n instanceof Ninja).toBeTruthy();
36
+ expect(n instanceof Person).toBeTruthy();
37
+ expect(n instanceof JrClass).toBeTruthy();
38
+ });
39
+
40
+ it("create base class and object", function() {
41
+
42
+ var Person = JrClass.extend({
43
+ dancing: false
44
+ });
45
+ var Ninja = Person.extend({
46
+ dancing: true
47
+ });
48
+
49
+ var p = new Person();
50
+ expect(p.dancing).toBeFalsy();
51
+ p = new Person({dancing: true});
52
+ expect(p.dancing).toBeTruthy();
53
+
54
+ var n = new Ninja();
55
+ expect(n.dancing).toBeTruthy();
56
+ n = new Ninja({dancing: false});
57
+ expect(n.dancing).toBeFalsy();
58
+
59
+ });
60
+
61
+ it("test _super", function() {
62
+
63
+ var Person = JrClass.extend({
64
+ // init: function(aProperties){
65
+ // this.dancing = isDancing;
66
+ // },
67
+ dance: function(){
68
+ return this.dancing;
69
+ }
70
+ });
71
+ var Ninja = Person.extend({
72
+ init: function(){
73
+ this._super({dancing: false});
74
+ },
75
+ dance: function(){
76
+ // Call the inherited version of dance()
77
+ return this._super();
78
+ },
79
+ swingSword: function(){
80
+ return true;
81
+ }
82
+ });
83
+
84
+ var p = new Person({dancing: true});
85
+ expect(p.dance()).toBeTruthy();
86
+
87
+ var n = new Ninja();
88
+ expect(n.dance()).toBeFalsy();
89
+ expect(n.swingSword()).toBeTruthy();
90
+
91
+ // Should all be true
92
+ expect(p instanceof Person).toBeTruthy();
93
+ expect(p instanceof JrClass).toBeTruthy();
94
+ expect(n instanceof Ninja).toBeTruthy();
95
+ expect(n instanceof Person).toBeTruthy();
96
+ expect(n instanceof JrClass).toBeTruthy();
97
+
98
+ });
99
+
100
+ it("JrClass descendant should clone objects and arrays when used as class default values when extending, but not when instantiating", function(){
101
+ var OpDefObject = {};
102
+ var Op = JrClass.extend({
103
+ anObject: OpDefObject,
104
+ anArray: [],
105
+ aNumber: 5
106
+ });
107
+ var op1 = new Op();
108
+ var op2 = new Op();
109
+ expect(op1.aNumber).toBe(5);
110
+ expect(op2.aNumber).toBe(5);
111
+ op2.aNumber = 7;
112
+ expect(op2.aNumber).toBe(7);
113
+
114
+ expect(op1.anObject).not.toBe(OpDefObject);
115
+ op1.anObject.something = "elephant";
116
+ expect(op1.anObject).toEqual({something: "elephant"});
117
+ expect(op2.anObject).not.toBe(OpDefObject);
118
+ expect(op2.anObject).toEqual({});
119
+
120
+ var instanceObject = {name: 'instanceObject'};
121
+ var op3 = new Op({anObject: instanceObject});
122
+ expect(op3.anObject).toBe(instanceObject);
123
+
124
+ expect(op3.toJSON).toBeDefined();
125
+ });
126
+
127
+ it("JrClass should not clone objects or arrays when used as instance values", function(){
128
+ var anObject = {};
129
+ var anArray = [];
130
+ var op = new JrClass({
131
+ anObject: anObject,
132
+ anArray: anArray,
133
+ aNumber: 5
134
+ });
135
+ expect(op.aNumber).toBe(5);
136
+ expect(op.anObject).toBe(anObject);
137
+ expect(op.anArray).toBe(anArray);
138
+ expect(op.toJSON).toBeDefined();
139
+ });
140
+
141
+ it("test if JrClass methods are bound", function() {
142
+ var TestModel3 = JrClass.extend({
143
+ count: 4,
144
+ inc: function() {
145
+ this.count += 1;
146
+ }
147
+ });
148
+ var testModel3 = new TestModel3();
149
+ expect(testModel3.count).toEqual(4);
150
+ testModel3.inc();
151
+ expect(testModel3.count).toEqual(5);
152
+
153
+ var TestModel4 = TestModel3.extend({
154
+ inc2: function() {
155
+ this.count += 1;
156
+ }
157
+ });
158
+ var testModel4 = new TestModel4();
159
+ expect(testModel4.count).toEqual(4);
160
+ testModel4.inc();
161
+ expect(testModel4.count).toEqual(5);
162
+ testModel4.inc2();
163
+ expect(testModel4.count).toEqual(6);
164
+
165
+ var testModel42 = new TestModel4();
166
+ expect(testModel42.count).toEqual(4);
167
+
168
+ });
169
+
170
+ });
171
+
@@ -0,0 +1,41 @@
1
+ describe("Kojac Operations", function() {
2
+
3
+ beforeEach(function () {
4
+ this.cache = Ember.Object.create();
5
+ var factory = new Kojac.ObjectFactory();
6
+ this.kojac = new Kojac.Core({
7
+ cache: this.cache,
8
+ remoteProvider: new Kojac.RemoteProvider({useMockFileValues: true, mockFilePath: 'mockjson/'}),
9
+ objectFactory: factory
10
+ });
11
+ });
12
+
13
+ it("try reading order_item,product,order_item__50", function() {
14
+ var op;
15
+ var req;
16
+ runs(function() {
17
+ req = this.kojac.read('order_item').read('product').read('order_item__50');
18
+ expect(req).toBeDefined('ops');
19
+ expect(req).toBeDefined('options');
20
+ expect(req.ops.length).toEqual(3);
21
+ op = req.ops[0];
22
+ expect(op.verb).toEqual('READ');
23
+ expect(op.key).toEqual('order_item');
24
+ expect(op.result_key).toEqual(op.key);
25
+ expect(op.results).toEqual({});
26
+ op = req.ops[1];
27
+ expect(op.verb).toEqual('READ');
28
+ expect(op.key).toEqual('product');
29
+ expect(op.result_key).toEqual(op.key);
30
+ expect(op.results).toEqual({});
31
+ op = req.ops[2];
32
+ expect(op.verb).toEqual('READ');
33
+ expect(op.key).toEqual('order_item__50');
34
+ expect(op.result_key).toEqual(op.key);
35
+ expect(op.results).toEqual({});
36
+ });
37
+ });
38
+ });
39
+
40
+
41
+
@@ -0,0 +1,37 @@
1
+ {
2
+ "result_key": "order_item",
3
+ "results": {
4
+ "order_item": [
5
+ 49,
6
+ 50,
7
+ 51
8
+ ],
9
+ "order_item__49": {
10
+ "id": 49,
11
+ "accountRef": "000049X",
12
+ "productId": 3,
13
+ "memberTypeId": "CA",
14
+ "adviserCommissionRate": 49.34,
15
+ "employmentStartDate": "2049-12-16 00:00:00.000",
16
+ "drawings": 1234.49
17
+ },
18
+ "order_item__50": {
19
+ "id": 50,
20
+ "accountRef": "000050X",
21
+ "productId": 4,
22
+ "memberTypeId": "CDB",
23
+ "adviserCommissionRate": 50.55,
24
+ "employmentStartDate": "2050-12-16 00:00:00.000",
25
+ "drawings": 1234.50
26
+ },
27
+ "order_item__51": {
28
+ "id": 51,
29
+ "accountRef": "000051X",
30
+ "productId": 5,
31
+ "memberTypeId": "DA",
32
+ "adviserCommissionRate": 51.89,
33
+ "employmentStartDate": "2051-12-16 00:00:00.000",
34
+ "drawings": 1234.51
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "result_key": "order_item__49",
3
+ "results": {
4
+ "order_item__49": {
5
+ "id": 49,
6
+ "accountRef": "000049X",
7
+ "productId": 3,
8
+ "memberTypeId": "CA",
9
+ "adviserCommissionRate": 49.34,
10
+ "employmentStartDate": "2049-12-16 00:00:00.000",
11
+ "drawings": 1234.49
12
+ }
13
+ }
14
+ }
15
+
@@ -0,0 +1,15 @@
1
+ {
2
+ "result_key": "order_item__50",
3
+ "results": {
4
+ "order_item__50": {
5
+ "id": 50,
6
+ "accountRef": "000050X",
7
+ "productId": 4,
8
+ "memberTypeId": "CDB",
9
+ "adviserCommissionRate": 50.55,
10
+ "employmentStartDate": "2050-12-16 00:00:00.000",
11
+ "drawings": 1234.50
12
+ }
13
+ }
14
+ }
15
+
@@ -0,0 +1,15 @@
1
+ {
2
+ "result_key": "order_item__51",
3
+ "results": {
4
+ "order_item__51": {
5
+ "id": 51,
6
+ "accountRef": "000051X",
7
+ "productId": 5,
8
+ "memberTypeId": "DA",
9
+ "adviserCommissionRate": 51.89,
10
+ "employmentStartDate": "2051-12-16 00:00:00.000",
11
+ "drawings": 1234.51
12
+ }
13
+ }
14
+ }
15
+