extjs-mvc 0.4.0.f → 0.4.0.g

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Rakefile +2 -2
  2. data/VERSION +1 -1
  3. data/bin/extjs-mvc +0 -3
  4. data/lib/extjs-mvc.rb +10 -6
  5. data/lib/extjs-mvc/api.rb +0 -1
  6. metadata +8 -84
  7. data/lib/src/App.js +0 -219
  8. data/lib/src/MVC.js +0 -260
  9. data/lib/src/Presenter.js +0 -52
  10. data/lib/src/README.rdoc +0 -69
  11. data/lib/src/controller/Controller.js +0 -278
  12. data/lib/src/controller/CrudController.js +0 -460
  13. data/lib/src/lib/Array.js +0 -26
  14. data/lib/src/lib/Booter.js +0 -416
  15. data/lib/src/lib/ClassManager.js +0 -191
  16. data/lib/src/lib/ControllerClassManager.js +0 -95
  17. data/lib/src/lib/Dependencies.js +0 -44
  18. data/lib/src/lib/DispatchMatcher.js +0 -98
  19. data/lib/src/lib/Dispatcher.js +0 -129
  20. data/lib/src/lib/Environment.js +0 -43
  21. data/lib/src/lib/Inflector.js +0 -155
  22. data/lib/src/lib/ModelClassManager.js +0 -19
  23. data/lib/src/lib/Route.js +0 -139
  24. data/lib/src/lib/Router.js +0 -282
  25. data/lib/src/lib/String.js +0 -94
  26. data/lib/src/lib/ViewClassManager.js +0 -229
  27. data/lib/src/lib/notes.txt +0 -32
  28. data/lib/src/model/AdapterManager.js +0 -30
  29. data/lib/src/model/Association.js +0 -26
  30. data/lib/src/model/Base.js +0 -63
  31. data/lib/src/model/BelongsToAssociation.js +0 -116
  32. data/lib/src/model/Cache.js +0 -131
  33. data/lib/src/model/HasManyAssociation.js +0 -160
  34. data/lib/src/model/Model.js +0 -331
  35. data/lib/src/model/UrlBuilder.js +0 -106
  36. data/lib/src/model/adapters/AbstractAdapter.js +0 -296
  37. data/lib/src/model/adapters/MemoryAdapter.js +0 -103
  38. data/lib/src/model/adapters/RESTAdapter.js +0 -345
  39. data/lib/src/model/adapters/RESTJSONAdapter.js +0 -68
  40. data/lib/src/model/adapters/notes.txt +0 -42
  41. data/lib/src/model/associations/Association.js +0 -192
  42. data/lib/src/model/associations/notes.txt +0 -87
  43. data/lib/src/model/validations/Errors.js +0 -136
  44. data/lib/src/model/validations/Plugin.js +0 -139
  45. data/lib/src/model/validations/Validations.js +0 -276
  46. data/lib/src/notes/Charts.graffle +0 -0
  47. data/lib/src/overrides/Ext.Component.js +0 -21
  48. data/lib/src/overrides/Ext.extend.js +0 -142
  49. data/lib/src/spec/Array.spec.js +0 -15
  50. data/lib/src/spec/ExtMVC.spec.js +0 -65
  51. data/lib/src/spec/Model.spec.js +0 -370
  52. data/lib/src/spec/OS.spec.js +0 -83
  53. data/lib/src/spec/Router.spec.js +0 -99
  54. data/lib/src/spec/SpecHelper.js +0 -106
  55. data/lib/src/spec/String.spec.js +0 -83
  56. data/lib/src/spec/model/AbstractAdapter.spec.js +0 -49
  57. data/lib/src/spec/model/Associations.spec.js +0 -99
  58. data/lib/src/spec/model/Cache.spec.js +0 -5
  59. data/lib/src/spec/model/RESTAdapter.spec.js +0 -19
  60. data/lib/src/spec/model/ValidationErrors.spec.js +0 -64
  61. data/lib/src/spec/model/Validations.spec.js +0 -166
  62. data/lib/src/spec/model/ValidationsPlugin.spec.js +0 -108
  63. data/lib/src/spec/suite.html +0 -60
  64. data/lib/src/specs-old/JSSpec.css +0 -216
  65. data/lib/src/specs-old/JSSpec.js +0 -1512
  66. data/lib/src/specs-old/all.html +0 -66
  67. data/lib/src/specs-old/base.js +0 -14
  68. data/lib/src/specs-old/controller.js +0 -17
  69. data/lib/src/specs-old/diff_match_patch.js +0 -1
  70. data/lib/src/specs-old/model.js +0 -70
  71. data/lib/src/specs-old/route.js +0 -38
  72. data/lib/src/specs-old/router.js +0 -59
  73. data/lib/src/specs-old/string.js +0 -22
  74. data/lib/src/testrunner/JSpecFormatter.js +0 -111
  75. data/lib/src/testrunner/TestClient.js +0 -181
  76. data/lib/src/testrunner/TestGrid.js +0 -351
  77. data/lib/src/testrunner/TestRunner.js +0 -110
  78. data/lib/src/testrunner/TestViewport.js +0 -94
  79. data/lib/src/vendor.yml +0 -29
  80. data/lib/src/vendor/ext-3.1.1/vendor.yml +0 -16
  81. data/lib/src/view/FormWindow.js +0 -184
  82. data/lib/src/view/HasManyEditorGridPanel.js +0 -211
  83. data/lib/src/view/scaffold/Edit.js +0 -46
  84. data/lib/src/view/scaffold/Index.js +0 -561
  85. data/lib/src/view/scaffold/New.js +0 -20
  86. data/lib/src/view/scaffold/ScaffoldFormPanel.js +0 -255
@@ -1,106 +0,0 @@
1
- /**
2
- * @class ExtMVC.UrlBuilder
3
- * Builds URLs...
4
- */
5
- ExtMVC.UrlBuilder = function() {
6
-
7
- };
8
-
9
- ExtMVC.UrlBuilder.prototype = {
10
-
11
- /**
12
- * @property baseUrlNamespace
13
- * @type String
14
- * An optional url namespace to prepend to all urls (e.g. /admin). Defaults to an empty string
15
- */
16
- baseUrlNamespace: '',
17
-
18
- /**
19
- * @property baseUrlFormat
20
- * @type String
21
- * An optional url extension to append to all urls (e.g. .json). Defaults to an empty string
22
- */
23
- baseUrlFormat: '',
24
-
25
- /**
26
- * @property segmentJoiner
27
- * @type String
28
- * The string to join url segments on (defaults to '/')
29
- */
30
- segmentJoiner: '/',
31
-
32
- /**
33
- * Generates a url for the given object or function definition
34
- * @param {Mixed} obj The object to create a URL for
35
- * @return {String} The generated URL
36
- */
37
- urlFor: function() {
38
- var config = {};
39
- var lastArg = Array.prototype.slice.call(arguments, arguments.length - 1)[0];
40
-
41
- //if the last argument is a config object
42
- if (typeof lastArg == 'object' && !lastArg.className) {
43
- //set some default url building options
44
- Ext.apply(config, lastArg, {
45
- format: this.baseUrlFormat,
46
- urlNamespace: this.baseUrlNamespace
47
- });
48
-
49
- //use all but the last argument now
50
- var arguments = Array.prototype.slice.call(arguments, 0, arguments.length - 1);
51
- };
52
-
53
- //set some default url building options
54
- Ext.applyIf(config, {
55
- format: this.baseUrlFormat,
56
- urlNamespace: this.baseUrlNamespace
57
- });
58
-
59
- var segments = [config.urlNamespace];
60
-
61
- //iterate over valid arguments, appending each to segments
62
- for (var i=0; i < arguments.length; i++) {
63
- var arg = arguments[i];
64
- var res = [];
65
-
66
- switch(typeof arg) {
67
- case 'string': res = [arg]; break;
68
- case 'object': res = this.segmentsForInstance(arg); break;
69
- case 'function': res = this.segmentsForClass(arg); break;
70
- }
71
-
72
- for (var j=0; j < res.length; j++) {
73
- segments.push(res[j]);
74
- };
75
- };
76
-
77
- var url = segments.join(this.segmentJoiner);
78
- if (config.format) { url += "." + config.format; }
79
-
80
- return url;
81
- },
82
-
83
- /**
84
- * Returns an array of url segments for a model instance
85
- * @param {ExtMVC.model} instance A Model instance with at least its primary key value set
86
- * @return {Array} An array of segments for this url (e.g. ['users', '10'])
87
- */
88
- segmentsForInstance: function(instance) {
89
- return [instance.constructor.urlName, instance.data.id];
90
- },
91
-
92
- /**
93
- * Returns an array of url segments for a given class and optional primary key
94
- * @param {Function} cls The class to generate a url for
95
- * @param {String} id An optional ID to add to the segments
96
- * @return {Array} An array of segments for this class
97
- */
98
- segmentsForClass: function(cls, id) {
99
- var segs = [cls.urlName];
100
- if (id) { segs.push(id); }
101
-
102
- return segs;
103
- }
104
- };
105
-
106
- ExtMVC.UrlBuilder = new ExtMVC.UrlBuilder();
@@ -1,296 +0,0 @@
1
- /**
2
- * @class ExtMVC.model.plugin.adapter
3
- * @ignore
4
- */
5
- ExtMVC.model.plugin.adapter = {
6
- initialize: function(model) {
7
- var adapter = new this.RESTJSONAdapter();
8
-
9
- Ext.override(Ext.data.Record, adapter.instanceMethods());
10
- Ext.apply(model, adapter.classMethods());
11
-
12
- //associations are optional so only add them if they are present
13
- // try {
14
- // Ext.override(ExtMVC.model.plugin.association.HasMany, adapter.hasManyAssociationMethods());
15
- // Ext.override(ExtMVC.model.plugin.association.BelongsTo, adapter.belongsToAssociationMethods());
16
- // } catch(e) {};
17
- }
18
- };
19
-
20
- ExtMVC.model.addPlugin(ExtMVC.model.plugin.adapter);
21
-
22
- /**
23
- * @class ExtMVC.model.plugin.adapter.Abstract
24
- * Abstract adapter class containing methods that all Adapters should provide
25
- * All of these methods are expected to be asynchronous except for loaded()
26
- */
27
-
28
- /**
29
- * @constructor
30
- * @param {ExtMVC.model} model The model this adapter represents
31
- */
32
- ExtMVC.model.plugin.adapter.Abstract = function(model) {
33
- /**
34
- * @property model
35
- * @type ExtMVC.model.Base
36
- * The model this adapter represents (set on initialize)
37
- */
38
- // this.model = model;
39
- };
40
-
41
- ExtMVC.model.plugin.adapter.Abstract.prototype = {
42
-
43
- /**
44
- * Abstract save method which should be overridden by an Adapter subclass
45
- * @param {ExtMVC.model.Base} instance A model instance to save
46
- * @param {Object} options Save options (e.g. {success: function(), failure: function()})
47
- */
48
- doSave: Ext.emptyFn,
49
-
50
- /**
51
- * Abstract find method which should be overridden by an Adapter subclass
52
- * @param {Object} options Options for the find, such as primaryKey and conditions
53
- */
54
- doFind: Ext.emptyFn,
55
-
56
- /**
57
- * Abstract destroy method which should be overridden by an Adapter subclass
58
- * @param {ExtMVC.model.Base} instance The model instance to destroy
59
- */
60
- doDestroy: Ext.emptyFn,
61
-
62
- /**
63
- * @property instanceMethods
64
- * @type Object
65
- * An object of properties that get added to the model's prototype
66
- * These all run within the scope of a model instance
67
- */
68
- instanceMethods: function() {
69
- return {
70
- adapter: this,
71
-
72
- /**
73
- * Attempts to save this instance
74
- * @member ExtMVC.model.Base
75
- * @param {Object} options Options (see collectionMethods.create for arguments)
76
- */
77
- save: function(options) {
78
- options = options || {};
79
- if (options.skipValidation === true || this.isValid()) {
80
- //looks good, attempt the save
81
- return this.adapter.doSave(this, options);
82
- } else {
83
- //couldn't save
84
- if (typeof options.failure == 'function') {
85
- return options.failure.call(options.scope || this, this);
86
- };
87
- };
88
- },
89
-
90
- /**
91
- * Attempts to destroy this instance (asynchronously)
92
- * @member ExtMVC.model.Base
93
- * @param {Object} options Options to pass to the destroy command (see collectionMethods.create for args)
94
- */
95
- destroy: function(options) {
96
- return this.adapter.doDestroy(this, options);
97
- },
98
-
99
- /**
100
- * Updates selected fields with new values and saves straight away
101
- * @member ExtMVC.model.Base
102
- * @param {Object} data The fields to update with new values
103
- * @param {Object} options Options (see collectionMethods.create for arguments)
104
- */
105
- update: function(data, options) {
106
- this.setValues(data);
107
- this.save(options);
108
- },
109
-
110
- /**
111
- * Returns true if this instance has been loaded from backend storage or has only been instantiated
112
- * @member ExtMVC.model.Base
113
- * @return {Boolean} True if loaded from the server
114
- */
115
- loaded: function() {
116
-
117
- }
118
- };
119
- },
120
-
121
- classMethods: function() {
122
- return {
123
- adapter: this,
124
-
125
- /**
126
- * Attempts to create and save a new instance of this model
127
- * @param {Object} data The data to use in creating and saving an instance of this model
128
- * @param {Object} options Options object:
129
- * * skipValidation - set to true to bypass validation before saving (defaults to false)
130
- * * scope - The scope to run callback functions in
131
- * * success - pass in a function as a callback if save succeeds. Function called with 1
132
- * argument - the new model instance
133
- * * failure - pass in a function as a callback if save succeeds. Function called with 2
134
- * arguments - the unsaved model instance and the json response
135
- */
136
- create: function(data, options) {
137
- var instance = new this(data);
138
- instance.save(options);
139
-
140
- return instance;
141
- },
142
-
143
- /**
144
- * Builds a new model on this collection but does not save it
145
- * @param {Object} data The data to use in creating and saving an instance of this model
146
- * @return {Object} The new model instance
147
- */
148
- build: function(data) {
149
- return new this(data);
150
- },
151
-
152
- /**
153
- * Finds the given related model on a relationship
154
- * @param {Number|String|Object} conditions The unique identifier for this model, or a conditions object
155
- * @param {Object} options Options (see collectionMethods.create for arguments)
156
- */
157
- find: function(conditions, options) {
158
- //assume to be the primary key
159
- if (typeof(conditions) == 'number' || typeof(conditions) == 'string') conditions = {primaryKey: conditions};
160
-
161
- return this.adapter.doFind(conditions, options, this);
162
- },
163
-
164
- /**
165
- * Issues a destroy (delete) command to delete the appropriate related object by ID
166
- * @param {Number|String} id The ID of the associated model to delete
167
- * @param {Object} options Options (see collectionMethods.create for arguments)
168
- */
169
- destroy: function(id, options) {
170
- return this.adapter.doDestroy(id, options, this);
171
- }
172
- };
173
- },
174
-
175
- /**
176
- * @property hasManyAssociationMethods
177
- * @type Object
178
- * An object full of properties and functions that get mixed in to hasMany association collections
179
- * These methods are run in the scope of the model instance that owns the association, e.g. if
180
- * User hasMany Posts, then 'this' refers to the user instance
181
- */
182
- hasManyAssociationMethods: function() {
183
- return {
184
- /**
185
- * @member ExtMVC.model.plugin.association.HasMany
186
- * @ignore (member doesn't seem to work for properties)
187
- * @property adapter
188
- * @type ExtMVC.model.plugin.adapter.Abstract
189
- * A reference to the adapter attached to this association. Useful if you need to dip down to a lower
190
- * level than the methods inside HasMany provide
191
- */
192
- adapter: this,
193
-
194
- /**
195
- * Attempts to create and save a new instance of this model
196
- * @member ExtMVC.model.plugin.association.HasMany
197
- * @param {Object} data The data to use in creating and saving an instance of this model
198
- * @param {Object} options Options object:
199
- * * skipValidation - set to true to bypass validation before saving (defaults to false)
200
- * * success - pass in a function as a callback if save succeeds. Function called with 1
201
- * arguments - the new model instance
202
- * * failure - pass in a function as a callback if save succeeds. Function called with 2
203
- * arguments - the unsaved model instance and the json response
204
- */
205
- create: function(data, options) {
206
- var instance = new this.associatedClass(data);
207
-
208
- //automatically set the foreign key here
209
- // instance.set(this.foreignKey, )
210
- },
211
-
212
- /**
213
- * Builds a new model on this collection but does not save it
214
- * @member ExtMVC.model.plugin.association.HasMany
215
- * @param {Object} data The data to use in creating and saving an instance of this model
216
- * @return {Object} The new model instance
217
- */
218
- build: function(data, options) {
219
-
220
- },
221
-
222
- /**
223
- * Finds the given related model on a relationship
224
- * @member ExtMVC.model.plugin.association.HasMany
225
- * @param {Number|String} id The unique identifier for this model.
226
- */
227
- find: function(id) {
228
-
229
- },
230
-
231
- /**
232
- * Returns true if this association has been fully loaded yet
233
- * @member ExtMVC.model.plugin.association.HasMany
234
- * @return {Boolean} True if this association has been loaded yet
235
- */
236
- loaded: function() {
237
-
238
- },
239
-
240
- /**
241
- * Issues a destroy (delete) command to delete the appropriate related object by ID
242
- * @member ExtMVC.model.plugin.association.HasMany
243
- * @param {Number|String} id The ID of the associated model to delete
244
- */
245
- destroy: function(id) {
246
-
247
- }
248
- };
249
- },
250
-
251
- /**
252
- * @property belongsToAssociationMethods
253
- * @type Object
254
- * An object full of properties and functions that get mixed in to belongsTo association collections
255
- */
256
- belongsToAssociationMethods: function() {
257
- return {
258
- /**
259
- * @member ExtMVC.model.plugin.association.BelongsTo
260
- * @ignore (member doesn't seem to work for properties)
261
- * @property adapter
262
- * @type ExtMVC.model.plugin.adapter.Abstract
263
- * A reference to the adapter attached to this association. Useful if you need to dip down to a lower
264
- * level than the methods inside BelongsTo provide
265
- */
266
- adapter: this,
267
-
268
- /**
269
- * Finds the given related model on a relationship
270
- * @member ExtMVC.model.plugin.association.BelongsTo
271
- * @param {Number|String} id The unique identifier for this model.
272
- */
273
- find: function(id) {
274
-
275
- },
276
-
277
- /**
278
- * Returns true if this association has been fully loaded yet
279
- * @member ExtMVC.model.plugin.association.BelongsTo
280
- * @return {Boolean} True if this association has been loaded yet
281
- */
282
- loaded: function() {
283
-
284
- },
285
-
286
- /**
287
- * Issues a destroy (delete) command to delete the appropriate related object by ID
288
- * @member ExtMVC.model.plugin.association.BelongsTo
289
- * @param {Number|String} id The ID of the associated model to delete
290
- */
291
- destroy: function(id) {
292
-
293
- }
294
- };
295
- }
296
- };
@@ -1,103 +0,0 @@
1
- /**
2
- * @class ExtMVC.model.plugin.adapter.MemoryAdapter
3
- * @extends ExtMVC.model.plugin.adapter.Abstract
4
- * Provides a very basic storage system where model data get stored to an object in memory
5
- */
6
- ExtMVC.model.plugin.adapter.MemoryAdapter = Ext.extend(ExtMVC.model.plugin.adapter.Abstract, {
7
-
8
- /**
9
- * @property store
10
- * @type Object
11
- * A simple object that models get saved to
12
- */
13
- store: {},
14
-
15
- primaryKeys: {},
16
-
17
- /**
18
- * Performs the actual save request. Uses POST for new records, PUT when updating existing ones
19
- */
20
- doSave: function(instance, options) {
21
- if (typeof instance == 'undefined') throw new Error('No instance provided to REST Adapter save');
22
- options = options || {};
23
-
24
- //if this model doesn't have a primary key yet, give it one now and mark it as saved
25
- var id = instance.get(instance.primaryKey);
26
- if (typeof id == 'undefined') {
27
- id = this.primaryKeyFor(instance);
28
- instance.set(instance.primaryKey, id);
29
- }
30
-
31
- //put the model data into its store
32
- this.store[instance.tableName] = this.store[instance.tableName] || {};
33
- this.store[instance.tableName][id.toString()] = instance.data;
34
- },
35
-
36
- /**
37
- * Performs the actual find request.
38
- * @param {Object} conditions An object containing find conditions. If a primaryKey is set this will be used
39
- * to build the url for that particular instance, otherwise the collection url will be used
40
- * @param {Object} options Callbacks (use callback, success and failure)
41
- */
42
- doFind: function(conditions, options, constructor) {
43
- conditions = conditions || {}; options = options || {};
44
-
45
- //helper function to cut down repetition in Ajax request callback
46
- var callIf = function(callback, args) {
47
- if (typeof callback == 'function') callback.apply(options.scope, args);
48
- };
49
-
50
- var modelStore = this.store[constructor.prototype.tableName] || {};
51
-
52
- if (typeof conditions.primaryKey == 'undefined') {
53
- //return everything
54
- var records = [];
55
-
56
- for (primaryKey in modelStore) {
57
- records.push((modelStore[primaryKey]));
58
- }
59
-
60
- console.log(records);
61
-
62
- return new Ext.data.Store({
63
- autoLoad: true,
64
- data: {'rows': records},
65
- // proxy: new Ext.data.MemoryProxy({'rows': records}),
66
- fields: constructor.prototype.fields.items,
67
- reader: new Ext.data.JsonReader({root: 'rows'}, constructor)
68
- });
69
-
70
- } else {
71
- var data = modelStore[conditions.primaryKey.toString()];
72
-
73
- if (typeof data == 'undefined') {
74
- callIf(options.failure);
75
- } else {
76
- callIf(options.success, [new constructor(data)]);
77
- }
78
- }
79
- },
80
-
81
- doDestroy: function(instance, options) {
82
- if (typeof instance == 'undefined') throw new Error('No instance provided to REST Adapter save');
83
- options = options || {};
84
-
85
- Ext.Ajax.request(
86
- Ext.applyIf(options, {
87
- method: this.destroyMethod,
88
- url: this.instanceUrl(instance)
89
- })
90
- );
91
- },
92
-
93
- /**
94
- * Returns the next available primary key for a model instance
95
- * @param {ExtMVC.model.Base} instance The model instance
96
- * @return {Number} The primary key to use for this instance
97
- */
98
- primaryKeyFor: function(instance) {
99
- this.primaryKeys[instance.tableName] = this.primaryKeys[instance.tableName] || 1;
100
-
101
- return this.primaryKeys[instance.tableName] ++;
102
- }
103
- });