paloma 3.0.2 → 4.0.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.
@@ -1,6 +1,6 @@
1
1
 
2
2
  describe('Paloma.Router', function(){
3
- var delimiter = {namespace: '/', action: '#'},
3
+ var delimiter = '/',
4
4
  router = new Paloma.Router(delimiter);
5
5
 
6
6
  describe('#parse(path)', function(){
@@ -9,7 +9,7 @@ describe('Paloma.Router', function(){
9
9
  var result;
10
10
 
11
11
  beforeEach(function(){
12
- result = router.parse('Foo/Bar/Baz/Controller#action');
12
+ result = router.parse('Foo/Bar/Baz/Controller');
13
13
  });
14
14
 
15
15
  it('returns the array of the namespaces', function(){
@@ -20,10 +20,6 @@ describe('Paloma.Router', function(){
20
20
  expect(result.controller).toEqual('Controller');
21
21
  });
22
22
 
23
- it('returns the action', function(){
24
- expect(result.action).toEqual('action');
25
- });
26
-
27
23
  it('returns the controllerPath', function(){
28
24
  expect(result.controllerPath).toEqual(['Foo', 'Bar', 'Baz', 'Controller']);
29
25
  });
@@ -35,7 +31,7 @@ describe('Paloma.Router', function(){
35
31
  var result;
36
32
 
37
33
  beforeEach(function(){
38
- result = router.parse('Controller#action');
34
+ result = router.parse('Controller');
39
35
  });
40
36
 
41
37
  it('returns an empty array of namespaces', function(){
@@ -46,10 +42,6 @@ describe('Paloma.Router', function(){
46
42
  expect(result.controller).toEqual('Controller');
47
43
  });
48
44
 
49
- it('returns the action', function(){
50
- expect(result.action).toEqual('action');
51
- });
52
-
53
45
  it('returns the controllerPath', function(){
54
46
  expect(result.controllerPath).toEqual(['Controller']);
55
47
  });
@@ -57,65 +49,4 @@ describe('Paloma.Router', function(){
57
49
 
58
50
  });
59
51
 
60
-
61
-
62
-
63
-
64
- describe('#controllerFor(resource)', function(){
65
-
66
- var resource = 'MySuperResource';
67
-
68
- describe('when no route is found', function(){
69
- it('returns the resource', function(){
70
- var controller = router.controllerFor(resource);
71
- expect(controller).toEqual(resource);
72
- });
73
- });
74
-
75
-
76
- describe('when route is found', function(){
77
- it('returns the set controller', function(){
78
- router.resource(resource, {controller: 'MyController'});
79
-
80
- var controller = router.controllerFor(resource);
81
- expect(controller).toEqual('MyController');
82
- });
83
- });
84
- });
85
-
86
-
87
-
88
-
89
-
90
- describe('#redirectFor(resource, action)', function(){
91
- var router = new Paloma.Router(delimiter),
92
- result;
93
-
94
- describe('when has a redirect', function(){
95
- beforeEach(function(){
96
- router.redirect('Foo#edit', {to: 'Bar#revise'});
97
- result = router.redirectFor('Foo', 'edit');
98
- });
99
-
100
- it('returns controller of the redirect', function(){
101
- expect(result.controller).toEqual('Bar');
102
- });
103
-
104
- it('returns action of the redirect', function(){
105
- expect(result.action).toEqual('revise');
106
- });
107
- });
108
-
109
-
110
- describe('when has no redirect', function(){
111
- var router = new Paloma.Router(delimiter),
112
- result = router.redirectFor('Foo', 'edit');
113
-
114
- it('returns null', function(){
115
- expect(result).toBeNull();
116
- });
117
- });
118
-
119
- });
120
-
121
52
  });
@@ -30,3 +30,8 @@ RSpec.configure do |config|
30
30
  # --seed 1234
31
31
  config.order = "random"
32
32
  end
33
+
34
+
35
+ def request
36
+ page.evaluate_script 'Paloma.engine.lastRequest'
37
+ end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Paloma::Controller do
5
+
6
+ let(:controller){ Paloma::Controller.new }
7
+
8
+
9
+ before do
10
+ controller.resource = 'Test'
11
+ controller.action = 'new'
12
+ controller.params = {:x => 1, :y => 2}
13
+ end
14
+
15
+
16
+
17
+ shared_examples 'request is cleared' do
18
+ it 'assigns nil to resource' do
19
+ expect(controller.resource).to be_nil
20
+ end
21
+
22
+
23
+ it 'assigns nil to action' do
24
+ expect(controller.action).to be_nil
25
+ end
26
+
27
+
28
+ it 'assigns an empty hash to params' do
29
+ expect(controller.params).to be_empty
30
+ end
31
+
32
+
33
+ it 'returns true' do
34
+ expect(@return).to be_true
35
+ end
36
+ end
37
+
38
+
39
+
40
+ shared_examples 'request is not cleared' do
41
+ it 'returns false' do
42
+ expect(@return).to be_false
43
+ end
44
+
45
+
46
+ it 'has a request' do
47
+ expect(controller.has_request?).to be_true
48
+ end
49
+ end
50
+
51
+
52
+
53
+
54
+
55
+ describe '#clear_request' do
56
+ before { @return = controller.clear_request }
57
+ it_behaves_like 'request is cleared'
58
+ end
59
+
60
+
61
+
62
+ describe '#request' do
63
+ it 'returns a hash object' do
64
+ expect(controller.request).to be_an_instance_of Hash
65
+ end
66
+
67
+
68
+ it 'returns the current value of resource' do
69
+ expect(controller.request[:resource]).to eq 'Test'
70
+ end
71
+
72
+
73
+ it 'returns the current value of action' do
74
+ expect(controller.request[:action]).to eq 'new'
75
+ end
76
+
77
+
78
+ it 'returns the current value of params' do
79
+ expect(controller.request[:params]).to eq ({:x => 1, :y => 2})
80
+ end
81
+ end
82
+
83
+
84
+
85
+ describe '#has_request?' do
86
+ context 'when resource is nil' do
87
+ it 'returns false' do
88
+ controller.resource = nil
89
+ expect(controller.has_request?).to be_false
90
+ end
91
+ end
92
+
93
+
94
+ context 'when action is nil' do
95
+ it 'returns false' do
96
+ controller.action = nil
97
+ expect(controller.has_request?).to be_false
98
+ end
99
+ end
100
+
101
+
102
+ context 'when resource and action is present' do
103
+ it 'returns true' do
104
+ expect(controller.has_request?).to be_true
105
+ end
106
+ end
107
+ end
108
+
109
+ end
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Paloma::Utilities do
5
+
6
+ let(:utilities){ Paloma::Utilities }
7
+
8
+
9
+
10
+ describe '.get_resource(path)' do
11
+ context 'when path is only 1 word' do
12
+ it 'returns the controller resource name' do
13
+ expect(utilities.get_resource('test')).to eq 'Test'
14
+ end
15
+ end
16
+
17
+
18
+ context 'when path is more than 1 word' do
19
+ it 'returns the controller resource name' do
20
+ expect(utilities.get_resource('my_super_resources')).to eq 'MySuperResources'
21
+ end
22
+ end
23
+
24
+
25
+ context 'when path has namespace' do
26
+ it 'returns "Namespace/Resource"' do
27
+ expect(utilities.get_resource('admin/my_mega_test')).to eq 'Admin/MyMegaTest'
28
+ end
29
+ end
30
+
31
+
32
+ context 'when path has 2 or more namespace' do
33
+ it 'returns "Namespace1/NamespaceN/Resource' do
34
+ expect(utilities.get_resource('admin/test/my_resources')).to eq 'Admin/Test/MyResources'
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+
41
+
42
+
43
+ shared_examples 'resource is passed' do |resource|
44
+ it 'returns its returned as the resource' do
45
+ expect(route[:resource]).to eq resource
46
+ end
47
+ end
48
+
49
+
50
+ shared_examples 'action is passed' do |action|
51
+ it 'returns the action' do
52
+ expect(route[:action]).to eq action
53
+ end
54
+ end
55
+
56
+
57
+ shared_examples 'resource is not passed' do
58
+ it 'returns a nil resource' do
59
+ expect(route[:resource]).to be_nil
60
+ end
61
+ end
62
+
63
+
64
+ shared_examples 'action is not passed' do
65
+ it 'returns a nil action' do
66
+ expect(route[:action]).to be_nil
67
+ end
68
+ end
69
+
70
+
71
+
72
+
73
+
74
+ describe '.interpret_route(route_string)' do
75
+ context 'when route_string is empty' do
76
+ it 'raises an error' do
77
+ expect { utilities.interpret_route }.to raise_error 'Empty route cannot be interpreted'
78
+ end
79
+ end
80
+
81
+
82
+ context 'when route_string has a word' do
83
+ let(:route){ utilities.interpret_route 'MyResources' }
84
+
85
+ it_behaves_like 'resource is passed', 'MyResources'
86
+ it_behaves_like 'action is not passed'
87
+ end
88
+
89
+
90
+ context 'when route_string has a namespace' do
91
+ let(:route){ utilities.interpret_route 'Namespace/MyResource' }
92
+
93
+ it_behaves_like 'resource is passed', 'Namespace/MyResource'
94
+ it_behaves_like 'action is not passed'
95
+ end
96
+
97
+
98
+ context 'when route_string has an action' do
99
+ let(:route){ utilities.interpret_route 'Namespace/MyResources#action' }
100
+
101
+ it_behaves_like 'resource is passed', 'Namespace/MyResources'
102
+ it_behaves_like 'action is passed', 'action'
103
+ end
104
+
105
+
106
+ context 'when route_string has action only' do
107
+ let(:route){ utilities.interpret_route '#edit' }
108
+
109
+ it_behaves_like 'resource is not passed'
110
+ it_behaves_like 'action is passed', 'edit'
111
+ end
112
+ end
113
+
114
+ end
@@ -1,62 +1,32 @@
1
1
  (function(Paloma){
2
2
 
3
3
  var Engine = function(config){
4
- this.router = config.router;
5
4
  this.factory = config.factory;
6
- this.restart();
5
+ this.lastRequest = null;
7
6
  };
8
7
 
9
8
 
10
- Engine.prototype.start = function(){
11
- for (var i = 0, n = this.requests.length; i < n; i++){
12
- var request = this.requests[i];
13
-
14
- console.log('Processing request with params:');
15
- console.log(request.params);
16
-
17
- var controllerName = this.router.controllerFor(request.resource),
18
- action = request.action,
19
- redirect = this.router.redirectFor(request.resource, action);
20
-
21
- if (redirect){
22
- controllerName = redirect['controller'];
23
- action = redirect['action'];
24
- }
25
-
26
- console.log('mapping <' + request.resource + '> to controller <' + controllerName + '>');
27
- console.log('mapping action <' + request.action + '> to controller action <' + action + '>');
28
-
29
- var Controller = this.factory.get(controllerName);
30
-
31
- if (!Controller){
32
- console.warn('Paloma: undefined controller -> ' + controllerName);
33
- continue;
34
- }
35
-
36
- var controller = new Controller(request.params);
9
+ Engine.prototype.request = function(resource, action, params){
10
+ this.lastRequest = null;
37
11
 
38
- if (!controller[action]){
39
- console.warn('Paloma: undefined action <' + action +
40
- '> for <' + controllerName + '> controller');
41
- continue;
42
- }
12
+ var Controller = this.factory.get(resource);
43
13
 
44
- controller[action]();
14
+ if (!Controller){
15
+ return Paloma.warn('Paloma: undefined controller -> ' + resource);
45
16
  }
46
17
 
47
- this.restart();
48
- };
49
-
18
+ var controller = new Controller(params);
50
19
 
51
- Engine.prototype.restart = function(){
52
- this.requests = [];
53
- };
20
+ if (!controller[action]){
21
+ return Paloma.warn('Paloma: undefined action <' + action +
22
+ '> for <' + resource + '> controller');
23
+ }
54
24
 
25
+ Paloma.log('Paloma: Execute ' + resource + '#' + action + ' with');
26
+ Paloma.log(params);
55
27
 
56
- Engine.prototype.request = function(resource, action, params){
57
- this.requests.push({resource: resource,
58
- action: action,
59
- params: params});
28
+ controller[action]();
29
+ this.lastRequest = {controller: resource, action: action, params: params};
60
30
  };
61
31
 
62
32
 
@@ -1 +1,17 @@
1
- window.Paloma = window.Paloma || {};
1
+ window.Paloma = window.Paloma || {};
2
+
3
+ //
4
+ // Do nothing if there is no available console.
5
+ //
6
+ if (!window['console']){ Paloma.log = Paloma.warn = function(msg){}; }
7
+ else {
8
+ Paloma.warn = function(msg){
9
+ if(Paloma.env != 'development') return;
10
+ console.warn(msg);
11
+ };
12
+
13
+ Paloma.log = function(msg){
14
+ if(Paloma.env != 'development') return;
15
+ console.log(msg);
16
+ };
17
+ }
@@ -1,17 +1,19 @@
1
1
  (function(Paloma){
2
2
 
3
+ Paloma._router = new Paloma.Router('/');
4
+ Paloma._controllerFactory = new Paloma.ControllerFactory(Paloma._router);
3
5
 
4
- Paloma.router = new Paloma.Router({namespace: '/', action: '#'});
5
- Paloma._controllerFactory = new Paloma.ControllerFactory(Paloma.router);
6
-
7
-
6
+ //
7
+ // Declare Paloma controllers using this method.
8
+ // Will return a new constructor if the no controller with the passed name
9
+ // is found, else it will just return the current constructor.
10
+ //
8
11
  Paloma.controller = function(name){
9
12
  return Paloma._controllerFactory.get(name) ||
10
13
  Paloma._controllerFactory.make(name);
11
14
  };
12
15
 
13
16
 
14
- Paloma.engine = new Paloma.Engine({router: Paloma.router,
15
- factory: Paloma._controllerFactory});
17
+ Paloma.engine = new Paloma.Engine({factory: Paloma._controllerFactory});
16
18
 
17
19
  })(window.Paloma);