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,99 +0,0 @@
1
- Screw.Unit(function() {
2
- describe("The Router", function() {
3
- var router;
4
-
5
- before(function() {
6
- router = new ExtMVC.Router();
7
- });
8
-
9
- describe("connect", function() {
10
- // it("should create a new Route", function() {
11
- // var routeCreated = false;
12
- // ExtMVC.Route = function() {routeCreated = true;};
13
- //
14
- // router.connect(':controller/:action');
15
- // expect(routeCreated).to(equal, true);
16
- // });
17
- });
18
-
19
- describe("name", function() {
20
- before(function() {
21
- router.name("myRoute", "myNamespace/:controller/:action");
22
- });
23
-
24
- // it("should create a new Route", function() {
25
- // var routeCreated = false;
26
- //
27
- // ExtMVC.Route = ExtMVC.Route.prototype.constructor.createInterceptor(function() {
28
- // routeCreated = true;
29
- //
30
- // return arguments;
31
- // }, this);
32
- //
33
- // router.connect(':controller/:action');
34
- // expect(routeCreated).to(equal, true);
35
- // });
36
-
37
- it("should make the route accessible as a named route", function() {
38
- expect(typeof router.namedRoutes['myRoute']).to_not(equal, "undefined");
39
- });
40
- });
41
-
42
- describe("root", function() {
43
- before(function() {
44
- router.root({controller: 'index', action: 'index'});
45
- });
46
-
47
-
48
- });
49
-
50
- describe("recognising url strings", function() {
51
- before(function() {
52
- router.connect(":controller/:action/:id");
53
- router.connect(":controller/:action");
54
- });
55
-
56
- it("should recognise :controller/:action/:id", function() {
57
- expect(router.recognise("index/index")).to_not(equal, false);
58
- });
59
-
60
- it("should return the correct controller", function() {
61
- expect(router.recognise("cont/act").controller).to(equal, "cont");
62
- });
63
-
64
- it("should return the correct action", function() {
65
- expect(router.recognise("cont/act").action).to(equal, "act");
66
- });
67
-
68
- it("should return the correct id", function() {
69
- expect(router.recognise("cont/act/100").id).to(equal, "100");
70
- });
71
-
72
- describe("more complex URLs", function() {
73
- before(function() {
74
- router.connect("myNamespace/:controller/anotherSegment/:action");
75
- });
76
-
77
- it("should recognise URLS with arbitrary text in the matcher", function() {
78
- var url = "myNamespace/cont/anotherSegment/act";
79
- expect(router.recognise(url).controller).to(equal, "cont");
80
- expect(router.recognise(url).action).to(equal, "act");
81
- });
82
-
83
- describe("with match conditions", function() {
84
- before(function() {
85
- router.connect("myNamespace/:controller/:action/:id", {conditions: {':id': "[0-9]+"}});
86
- });
87
-
88
- it("should not recognise if the conditions are not met", function() {
89
- expect(router.recognise("myNamespace/cont/act/notanumber")).to(equal, false);
90
- });
91
-
92
- it("should recognise if the conditions are met", function() {
93
- expect(router.recognise("myNamespace/cont/act/150").id).to(equal, 150);
94
- });
95
- });
96
- });
97
- });
98
- });
99
- });
@@ -1,106 +0,0 @@
1
- Ext.ns('MVCTest', 'MVCTest.models');
2
-
3
- ExtMVC.model.modelNamespace = MVCTest.models;
4
-
5
- /**
6
- * @class MVCTest.models.User
7
- * @extends ExtMVC.model
8
- */
9
- ExtMVC.model.define("User", {
10
- fields: [
11
- {name: 'id', type: 'int'},
12
- {name: 'first_name', type: 'string'},
13
- {name: 'last_name', type: 'string'},
14
- {name: 'email', type: 'string'}
15
- ],
16
- hasMany: "BlogPost",
17
-
18
- displayName: function() {
19
- return String.format("{0} {1}", this.data.first_name, this.data.last_name);
20
- },
21
-
22
- //this is used to test instance method inheritance in Model.spec.js
23
- earlyJoiner: function() {
24
- return this.data.id < 100;
25
- },
26
-
27
- classMethods: {
28
- testClassMethod: function() {
29
- return "A Class Method";
30
- },
31
-
32
- //simple class method to test class method overwrites
33
- methodToOverwrite: function() {
34
- return true;
35
- }
36
- }
37
- });
38
-
39
- /**
40
- * @class MVCTest.models.AdminUser
41
- * @extends MVCTest.models.User
42
- * A subclass of User, defining additional fields
43
- */
44
- ExtMVC.model.define("AdminUser", {
45
- extend: "User",
46
- fields: [
47
- {name: 'is_admin', type: 'bool'},
48
- {name: 'password', type: 'string'}
49
- ]
50
- });
51
-
52
- /**
53
- * @class MVCTest.models.BlogPost
54
- * @extends ExtMVC.model
55
- */
56
- ExtMVC.model.define("BlogPost", {
57
- fields: [
58
- {name: 'id', type: 'int'},
59
- {name: 'title', type: 'string'},
60
- {name: 'content', type: 'string'},
61
- {name: 'user_id', type: 'int'}
62
- ],
63
- belongsTo: "User",
64
- hasMany: "Comment",
65
-
66
- instanceMethods: {
67
- testInstanceMethod: Ext.emptyFn
68
- }
69
- });
70
-
71
- /**
72
- * @class MVCTest.models.Comment
73
- * @extends ExtMVC.model
74
- */
75
- ExtMVC.model.define("Comment", {
76
- fields: [
77
- {name: 'id', type: 'int'},
78
- {name: 'blog_post_id', type: 'int'},
79
- {name: 'content', type: 'string'}
80
- ],
81
- belongsTo: "BlogPost"
82
- });
83
-
84
- MVCTest.OS = new ExtMVC.OS({
85
- name: "MVCTest"
86
- });
87
-
88
- MVCTest.controllers = {};
89
-
90
- /**
91
- * @class MVCTest.controllers.IndexController
92
- * @extends ExtMVC.Controller
93
- * Fake controller for use in OS.spec.js, Controller.spec.js and CrudController.spec.js
94
- */
95
- MVCTest.controllers.IndexController = Ext.extend(ExtMVC.Controller, {
96
- constructor: function() {
97
- //super
98
- MVCTest.controllers.IndexController.superclass.constructor.call(this, {
99
- viewsPackage: MVCTest.views.index
100
- });
101
-
102
- // this.actsAsCrudController(MVCTest.models.User);
103
- }
104
- });
105
-
106
- Ext.ns('MVCTest.views.index');
@@ -1,83 +0,0 @@
1
- Screw.Unit(function() {
2
- describe("String Functions", function() {
3
- it('should capitalize a string', function() {
4
- expect("user".capitalize()).to(equal, "User");
5
- });
6
-
7
- it("should titleize a string", function() {
8
- expect("a test sentence".titleize()).to(equal, "A Test Sentence");
9
- });
10
-
11
- it("should camelize a string", function() {
12
- expect("an_underscored_string".camelize()).to(equal, "AnUnderscoredString");
13
- });
14
-
15
- it("should underscore a string", function() {
16
- expect("A string with whitespaces".underscore()).to(equal, "a_string_with_whitespaces");
17
- });
18
-
19
- it("should underscore a camelized string", function() {
20
- expect("ALongTableName".underscore()).to(equal, "a_long_table_name");
21
- });
22
-
23
- it("should delegate singularize to Inflector", function() {
24
- //stub
25
- var singularize_was_called = false;
26
- ExtMVC.Inflector.singularize = function() {
27
- singularize_was_called = true;
28
- };
29
-
30
- "users".singularize();
31
- expect(singularize_was_called).to(equal, true);
32
- });
33
-
34
- it("should delegate pluralize to Inflector", function() {
35
- //stub
36
- var pluralize_was_called = false;
37
- ExtMVC.Inflector.pluralize = function() {
38
- pluralize_was_called = true;
39
- };
40
-
41
- "users".pluralize();
42
- expect(pluralize_was_called).to(equal, true);
43
- });
44
-
45
- describe("toCurrency", function() {
46
- var amount = "1234567.89";
47
-
48
- it("should add commas as appropriate", function() {
49
- expect(amount.toCurrency("£")).to(equal, "£1,234,567.89");
50
- });
51
-
52
- it("should use dollars by default", function() {
53
- expect(amount.toCurrency()).to(equal, "$1,234,567.89");
54
- });
55
- });
56
-
57
- describe("escaping HTML", function() {
58
- var html = '<span>"fish & chips"</span>';
59
- var escaped = html.escapeHTML();
60
-
61
- it("should escape left angle brackets", function() {
62
- expect(escaped).to_not(match, /</);
63
- });
64
-
65
- it("should escape right angle brackets", function() {
66
- expect(escaped).to_not(match, />/);
67
- });
68
-
69
- it("should escape double-quotes", function() {
70
- expect(escaped).to_not(match, /\"/);
71
- });
72
-
73
- it("should escape ampersands", function() {
74
- expect(escaped).to(match, /(&[^a]|&[^a][^m]|&[^a][^m][^p]|&[^a][^m][^p][^;])/);
75
- });
76
-
77
- it("should escape a string correctly", function() {
78
- expect(escaped).to(equal, "&lt;span&gt;&quot;fish &amp; chips&quot;&lt;/span&gt;");
79
- });
80
- });
81
-
82
- });
83
- });
@@ -1,49 +0,0 @@
1
- Screw.Unit(function() {
2
- describe("The Abstract Adapter", function() {
3
- var ns = ExtMVC.Model.modelNamespace;
4
-
5
- describe("instance methods", function() {
6
- it("should add instance methods to Ext.data.Record's prototype", function() {
7
- var p = Ext.data.Record.prototype;
8
-
9
- Ext.each(['save', 'destroy', 'update'], function(methodName) {
10
- expect(typeof p[methodName]).to(equal, 'function');
11
- }, this);
12
- });
13
-
14
- describe("the save method", function() {
15
-
16
- });
17
- });
18
-
19
- describe("class methods", function() {
20
- it("should add class methods to each model class", function() {
21
- Ext.each(['create', 'build', 'find', 'destroy'], function(methodName) {
22
- for (var model in ns) {
23
- expect(typeof ns[model][methodName]).to(equal, 'function');
24
- }
25
- }, this);
26
- });
27
- });
28
-
29
- describe("hasMany association methods", function() {
30
- it("should add the correct methods to the hasMany prototype", function() {
31
- var p = ExtMVC.Model.plugin.association.HasMany.prototype;
32
-
33
- Ext.each(['create', 'build', 'find', 'destroy'], function(methodName) {
34
- expect(typeof p[methodName]).to(equal, 'function');
35
- }, this);
36
- });
37
- });
38
-
39
- describe("belongsTo association methods", function() {
40
- it("should add the correct methods to the hasMany prototype", function() {
41
- var p = ExtMVC.Model.plugin.association.HasMany.prototype;
42
-
43
- Ext.each(['find', 'destroy'], function(methodName) {
44
- expect(typeof p[methodName]).to(equal, 'function');
45
- }, this);
46
- });
47
- });
48
- });
49
- });
@@ -1,99 +0,0 @@
1
- Screw.Unit(function() {
2
- //keep track of the object to which models are currently assigned
3
- var ns = ExtMVC.Model.modelNamespace;
4
-
5
- describe("Associations", function() {
6
- ExtMVC.Model.define("AssocUser", {
7
- fields: [],
8
- hasMany: "AssocPost"
9
- });
10
-
11
- ExtMVC.Model.define("AssocPost", {
12
- fields: [],
13
- hasMany: "AssocComment",
14
- belongsTo: "AssocUser"
15
- });
16
-
17
- ExtMVC.Model.define("AssocComment", {
18
- fields: [],
19
- belongsTo: {
20
- associatedClass: "AssocPost",
21
- associationName: 'posts',
22
- extend: {
23
- myMethod: function() {}
24
- }
25
- }
26
- });
27
-
28
- describe("The Associations plugin", function() {
29
- var associations = ExtMVC.Model.plugin.association,
30
- model = ns.AssocPost,
31
- commentModel = ns.AssocComment;
32
-
33
- it("should add a hasMany relationship where defined", function() {
34
- expect(model.prototype.AssocComments instanceof associations.HasMany).to(equal, true);
35
- });
36
-
37
- it("should add a belongsTo relationship where defined", function() {
38
- expect(model.prototype.AssocUser instanceof associations.BelongsTo).to(equal, true);
39
- });
40
-
41
- it("should allow customisation of association names", function() {
42
- expect(commentModel.prototype.posts instanceof associations.BelongsTo).to(equal, true);
43
- });
44
- });
45
-
46
- describe("A Base association", function() {
47
- /**
48
- * Create an association between BlogPost and User.
49
- * In practice we never actually instantiate Base associations as they don't
50
- * do very much, instead use a subclass such as HasMany or BelongsTo
51
- */
52
- var assoc = new ExtMVC.Model.plugin.association.Base(ns.BlogPost, ns.User, {
53
- extend: {
54
- myProperty: 'property',
55
- myFunction: function() { return 'result'; }
56
- }
57
- });
58
-
59
- it("should maintain a reference to its owner class", function() {
60
- expect(assoc.ownerClass).to(equal, ns.BlogPost);
61
- });
62
-
63
- it("should maintain a reference to its associated class", function() {
64
- expect(assoc.associatedClass).to(equal, ns.User);
65
- });
66
-
67
- it("should add extension properties to the association", function() {
68
- expect(assoc.myProperty).to(equal, 'property');
69
- expect(assoc.myFunction()).to(equal, 'result');
70
- });
71
- });
72
-
73
- describe("A BelongsTo association", function() {
74
- //blog post belongs to user
75
- var assoc = new ExtMVC.Model.plugin.association.BelongsTo(ns.BlogPost, ns.User);
76
-
77
- it("should set a default association name", function() {
78
- expect(assoc.name).to(equal, 'user');
79
- });
80
-
81
- it("should set a default foreign key", function() {
82
- expect(assoc.foreignKey).to(equal, 'user_id');
83
- });
84
- });
85
-
86
- describe("A HasMany association", function() {
87
- //user has many blog posts
88
- var assoc = new ExtMVC.Model.plugin.association.HasMany(ns.User, ns.BlogPost);
89
-
90
- it("should set a default association name", function() {
91
- expect(assoc.name).to(equal, 'blog_posts');
92
- });
93
-
94
- it("should set a default foreign key", function() {
95
- expect(assoc.foreignKey).to(equal, 'user_id');
96
- });
97
- });
98
- });
99
- });
@@ -1,5 +0,0 @@
1
- Screw.Unit(function() {
2
- describe("The Model Cache", function() {
3
-
4
- });
5
- });
@@ -1,19 +0,0 @@
1
- Screw.Unit(function() {
2
- describe("The REST adapter", function() {
3
- var ns = ExtMVC.Model.modelNamespace;
4
-
5
- var rest = new ExtMVC.Model.plugin.adapter.RESTAdapter(),
6
- savedInst = new ns.User({title: 'Ed', id: 100}),
7
- newInst = new ns.User({title: 'Nick'});
8
-
9
- describe("the instanceUrl method", function() {
10
- it("should return a url including the ID if the primary key is set", function() {
11
- expect(rest.instanceUrl(savedInst)).to(equal, '/users/100');
12
- });
13
-
14
- it("should return a generic url for this model if the primary key is not set", function() {
15
- expect(rest.instanceUrl(newInst)).to(equal, '/users');
16
- });
17
- });
18
- });
19
- });