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,157 @@
1
+ describe("Ember Factory", function() {
2
+
3
+ var OrderItem = Ember.Object.extend({});
4
+ // id: Int,
5
+ // customer_id: Int,
6
+ // product_id: Int
7
+ // });
8
+
9
+ var Product = Ember.Object.extend({
10
+
11
+ });
12
+
13
+ it("create Ember.Object from plain object", function() {
14
+ var factory = new Kojac.EmberObjectFactory();
15
+ factory.register([
16
+ [/^order_item(__|$)/,OrderItem],
17
+ [/^product(__|$)/,Product]
18
+ ]);
19
+ var source = {
20
+ id: 51,
21
+ name: 'Fred',
22
+ width: 100,
23
+ enabled: true,
24
+ details: {
25
+ message: 'some message'
26
+ },
27
+ nothing: null
28
+ };
29
+
30
+ var emberObject = factory.emberObjectFactory(source,'order_item__51');
31
+ expect(emberObject).toBeDefined();
32
+ expect(emberObject.constructor).toBe(OrderItem);
33
+ expect(emberObject.id).toBe(source.id);
34
+ expect(emberObject.name).toBe(source.name);
35
+ expect(emberObject.enabled).toBe(source.enabled);
36
+ expect(emberObject.details).toBe(source.details);
37
+ expect(emberObject.nothing).toBe(source.nothing);
38
+ expect(emberObject.get('id')).toBe(source.id);
39
+ expect(emberObject.get('name')).toBe(source.name);
40
+ expect(emberObject.get('enabled')).toBe(source.enabled);
41
+ expect(emberObject.get('details')).toBe(source.details);
42
+ expect(emberObject.get('nothing')).toBe(source.nothing);
43
+ });
44
+
45
+ it("create Ember.Objects from plain objects", function() {
46
+ var factory = new Kojac.EmberObjectFactory();
47
+ factory.register([
48
+ [/^order_item(__|$)/,OrderItem],
49
+ [/^product(__|$)/,Product]
50
+ ]);
51
+ var source = [
52
+ {
53
+ id: 51,
54
+ name: 'Fred',
55
+ width: 100,
56
+ enabled: true,
57
+ details: {
58
+ message: 'some message'
59
+ },
60
+ nothing: null
61
+ },
62
+ {
63
+ id: 52,
64
+ name: 'John',
65
+ width: 102,
66
+ enabled: false,
67
+ details: {
68
+ message: 'another message'
69
+ },
70
+ nothing: null
71
+ }
72
+ ];
73
+
74
+ var emberObjects = factory.emberObjectFactoryArray(source,'order_item');
75
+ var emberObject = emberObjects[0];
76
+ expect(emberObject).toBeDefined();
77
+ expect(emberObject.constructor).toBe(OrderItem);
78
+ expect(emberObject.id).toBe(source[0].id);
79
+ expect(emberObject.name).toBe(source[0].name);
80
+ expect(emberObject.enabled).toBe(source[0].enabled);
81
+ expect(emberObject.details).toBe(source[0].details);
82
+ expect(emberObject.nothing).toBe(source[0].nothing);
83
+ emberObject = emberObjects[1];
84
+ expect(emberObject).toBeDefined();
85
+ expect(emberObject.constructor).toBe(OrderItem);
86
+ expect(emberObject.id).toBe(source[1].id);
87
+ expect(emberObject.name).toBe(source[1].name);
88
+ expect(emberObject.enabled).toBe(source[1].enabled);
89
+ expect(emberObject.details).toBe(source[1].details);
90
+ expect(emberObject.nothing).toBe(source[1].nothing);
91
+ });
92
+
93
+ // TYPE declare null declare default null value
94
+ // string: String 'hello' null
95
+ // int: Int 1 null or NaN ?
96
+ // float: Number 0.9 null or NaN ?
97
+ // boolean: Boolean true null
98
+ // object: Object {blah: 67} null
99
+ //
100
+ // Perhaps return null in all cases
101
+ var exampleDefA = {
102
+ astring: String,
103
+ anumber: Number,
104
+ aboolean: Boolean,
105
+ aint: Int,
106
+ aobject: Object,
107
+ __allowDynamic: false
108
+ };
109
+
110
+ var exampleSourceA = {
111
+ astring: 'hello',
112
+ anumber: 1,
113
+ aboolean: true,
114
+ aint: 3,
115
+ aobject: {name: 'Fred'}
116
+ };
117
+
118
+ it("Try defining properties with classes and then readTypedProperties without conversion required", function() {
119
+ expect(exampleDefA.astring===String);
120
+ expect(exampleDefA.anumber===Number);
121
+ expect(exampleDefA.aboolean===Boolean);
122
+ expect(exampleDefA.aint===Int);
123
+ expect(exampleDefA.aobject===Object);
124
+
125
+ expect(exampleDefA.aobject!==Int);
126
+ expect(exampleDefA.aobject!==String);
127
+ expect(exampleDefA.aobject!==Number);
128
+
129
+ expect(exampleDefA.aint!==String);
130
+ expect(exampleDefA.aint!==Object);
131
+
132
+ var obj = {};
133
+ obj = Kojac.readTypedProperties(obj,exampleSourceA,exampleDefA);
134
+ expect(obj).toEqual(exampleSourceA);
135
+ });
136
+
137
+ var exampleSourceB = {
138
+ astring: 111,
139
+ anumber: "123",
140
+ aboolean: 1,
141
+ aint: 5.6,
142
+ aobject: [2,3,4]
143
+ };
144
+
145
+ it("Try readTypedProperties needing conversion", function() {
146
+ var obj = Kojac.readTypedProperties({},exampleSourceB,exampleDefA);
147
+ expect(obj).toEqual({
148
+ astring: "111",
149
+ anumber: 123.0,
150
+ aboolean: true,
151
+ aint: 6,
152
+ aobject: null
153
+ });
154
+ });
155
+
156
+ });
157
+
@@ -0,0 +1,179 @@
1
+ describe("Kojac Ember Model", function() {
2
+
3
+ var product1Values = {
4
+ name: String,
5
+ purchases: Int,
6
+ weight: Number,
7
+ isMember: Boolean
8
+ };
9
+ var Product1 = Kojac.EmberModel.extend(product1Values);
10
+
11
+ var product2Values = {
12
+ name: 'John',
13
+ purchases: 56,
14
+ weight: 12.3,
15
+ isMember: true
16
+ }
17
+ var Product2 = Kojac.EmberModel.extend(product2Values);
18
+
19
+ var wrongProductValues = {
20
+ name: 123,
21
+ purchases: 2.34,
22
+ weight: [],
23
+ isMember: 1
24
+ };
25
+
26
+ it("extend and check null values", function() {
27
+ var product = Product1.create();
28
+ expect(product.name).toBeNull();
29
+ expect(product.purchases).toBeNull();
30
+ expect(product.weight).toBeNull();
31
+ expect(product.isMember).toBeNull();
32
+ expect(Product1.getDefinitions()).toEqual(product1Values);
33
+ });
34
+
35
+ it("extend and check non-null values", function() {
36
+ var product = Product2.create();
37
+ expect(product.name).toBe(product2Values.name);
38
+ expect(product.purchases).toBe(product2Values.purchases);
39
+ expect(product.weight).toBe(product2Values.weight);
40
+ expect(product.isMember).toBe(product2Values.isMember);
41
+ expect(product.get('name')).toBe(product2Values.name);
42
+ expect(product.get('purchases')).toBe(product2Values.purchases);
43
+ expect(product.get('weight')).toBe(product2Values.weight);
44
+ expect(product.get('isMember')).toBe(product2Values.isMember);
45
+ expect(Product2.getDefinitions()).toEqual({
46
+ name: String,
47
+ purchases: Int,
48
+ weight: Number,
49
+ isMember: Boolean
50
+ });
51
+ });
52
+
53
+ it("Ember.Object extend and create", function() {
54
+ var product3def = {
55
+ name: 'Fred',
56
+ shape: 'circle'
57
+ };
58
+ var Product3 = Kojac.EmberModel.extend(product3def);
59
+ var product3 = Product3.create();
60
+ expect(product3.get('name')).toEqual('Fred');
61
+ expect(product3.get('shape')).toEqual('circle');
62
+
63
+ var product3 = Product3.create();
64
+ expect(product3.get('name')).toEqual(product3def.name);
65
+ var product3 = Product3.create({});
66
+ expect(product3.get('name')).toEqual(product3def.name);
67
+ var product3 = Product3.create({name: 'John', colour: 'red'});
68
+ expect(product3.get('name')).toEqual('John');
69
+ expect(product3.get('shape')).toEqual('circle');
70
+ expect(product3.get('colour')).toEqual('red');
71
+ });
72
+
73
+ it("check create values", function() {
74
+ var product = Product1.create(product2Values);
75
+ expect(product.get('name')).toBe(product2Values.name);
76
+ expect(product.get('purchases')).toBe(product2Values.purchases);
77
+ expect(product.get('weight')).toBe(product2Values.weight);
78
+ expect(product.get('isMember')).toBe(product2Values.isMember);
79
+ });
80
+
81
+ it("check create values requiring conversion", function() {
82
+ var product = Product1.create(wrongProductValues);
83
+ expect(product.get('name')).toBe('123');
84
+ expect(product.get('purchases')).toBe(2);
85
+ expect(product.get('weight')).toBe(null);
86
+ expect(product.get('isMember')).toBe(true);
87
+ });
88
+
89
+ it("check set values requiring conversion", function() {
90
+ var product = Product1.create();
91
+ for (p in wrongProductValues)
92
+ product.set(p,wrongProductValues[p]);
93
+ //person.setProperties(wrongProductValues);
94
+ expect(product.name).toBe('123');
95
+ expect(product.purchases).toBe(2);
96
+ expect(product.weight).toBe(null);
97
+ expect(product.isMember).toBe(true);
98
+ });
99
+
100
+ it("check setProperties values requiring conversion", function() {
101
+ var product = Product1.create();
102
+ product.setProperties(wrongProductValues);
103
+ expect(product.name).toBe('123');
104
+ expect(product.purchases).toBe(2);
105
+ expect(product.weight).toBe(null);
106
+ expect(product.isMember).toBe(true);
107
+ });
108
+
109
+ it("check init", function() {
110
+ var initValues = {
111
+ name: 'Jeffery',
112
+ purchases: 5,
113
+ weight: 2.4,
114
+ isMember: true
115
+ };
116
+ var productValuesWithInit = {
117
+ name: 'XXX',
118
+ purchases: 3,
119
+ weight: 1.2,
120
+ isMember: false,
121
+ init: function() {
122
+ this._super();
123
+ for (p in initValues) {
124
+ if (p=='weight')
125
+ continue;
126
+ this[p] = initValues[p];
127
+ }
128
+ }
129
+ };
130
+ var Product3 = Kojac.EmberModel.extend(productValuesWithInit);
131
+ var product = Product3.create();
132
+ expect(product.name).toBe(initValues.name);
133
+ expect(product.purchases).toBe(initValues.purchases);
134
+ expect(product.isMember).toBe(initValues.isMember);
135
+ expect(product.weight).toBe(productValuesWithInit.weight);
136
+ });
137
+
138
+ it("check computed property", function() {
139
+ var initValues = {
140
+ first_name: 'Jeffery',
141
+ last_name: 'Watt',
142
+ full_name: function() {
143
+ return this.first_name+' '+this.last_name;
144
+ }.property()
145
+ };
146
+ var Cust = Ember.Object.extend(initValues);
147
+ var cust = Cust.create();
148
+ expect(cust.first_name).toBe(initValues.first_name);
149
+ expect(cust.last_name).toBe(initValues.last_name);
150
+ expect(cust.get('full_name')).toBe(initValues.first_name+' '+initValues.last_name);
151
+ });
152
+
153
+ it("real world example", function() {
154
+ var App = {};
155
+ App.FinanceProvider = Kojac.EmberModel.extend({
156
+ id: Int,
157
+ name: String
158
+ });
159
+ App.FinanceProviders = [
160
+ App.FinanceProvider.create({
161
+ id: 1,
162
+ name: 'GE Automotive'
163
+ }),
164
+ App.FinanceProvider.create({
165
+ id: 2,
166
+ name: 'St George Bank'
167
+ }),
168
+ App.FinanceProvider.create({
169
+ id: 3,
170
+ name: 'Esanda ANZ'
171
+ })
172
+ ];
173
+ expect(App.FinanceProviders[0].get('id')).toEqual(1);
174
+ expect(App.FinanceProviders[0].get('name')).toEqual('GE Automotive');
175
+ expect(App.FinanceProviders[1].get('id')).toEqual(2);
176
+ expect(App.FinanceProviders[1].get('name')).toEqual('St George Bank');
177
+ });
178
+
179
+ });
Binary file
Binary file