kojac 0.9.0

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 (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
+