controll 0.2.0 → 0.3.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.
- data/README.md +253 -93
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/controll.gemspec +121 -84
- data/lib/controll/assistant/param_assistant.rb +23 -0
- data/lib/controll/assistant/session_assistant.rb +23 -0
- data/lib/controll/assistant.rb +9 -7
- data/lib/controll/commander.rb +16 -3
- data/lib/controll/enabler/macros.rb +75 -0
- data/lib/controll/enabler/maps.rb +15 -0
- data/lib/controll/enabler/notify.rb +43 -0
- data/lib/controll/enabler/path_handler.rb +49 -0
- data/lib/controll/enabler/path_resolver.rb +47 -0
- data/lib/controll/enabler.rb +49 -0
- data/lib/controll/engine.rb +9 -0
- data/lib/controll/errors.rb +4 -1
- data/lib/controll/event/helper.rb +20 -0
- data/lib/controll/{helper/event_matcher.rb → event/matcher.rb} +3 -3
- data/lib/controll/event.rb +60 -0
- data/lib/controll/events.rb +48 -0
- data/lib/controll/executor/base.rb +3 -7
- data/lib/controll/executor/controlled.rb +36 -0
- data/lib/controll/executor/delegator.rb +6 -0
- data/lib/controll/executor.rb +8 -1
- data/lib/controll/flow/action/base.rb +30 -0
- data/lib/controll/flow/action/fallback.rb +25 -0
- data/lib/controll/flow/action/path_action.rb +24 -0
- data/lib/controll/flow/action.rb +7 -0
- data/lib/controll/flow/action_mapper/base.rb +13 -0
- data/lib/controll/flow/action_mapper/complex.rb +52 -0
- data/lib/controll/flow/action_mapper/simple.rb +54 -0
- data/lib/controll/flow/action_mapper.rb +7 -0
- data/lib/controll/flow/errors.rb +16 -0
- data/lib/controll/flow/event_mapper/path_finder.rb +36 -0
- data/lib/controll/flow/event_mapper/util.rb +43 -0
- data/lib/controll/flow/event_mapper.rb +6 -0
- data/lib/controll/flow/master/executor.rb +57 -0
- data/lib/controll/flow/master/macros.rb +66 -0
- data/lib/controll/flow/master.rb +70 -0
- data/lib/controll/flow.rb +15 -0
- data/lib/controll/focused/enabler.rb +31 -0
- data/lib/controll/helper.rb +0 -94
- data/lib/controll/macros.rb +12 -0
- data/lib/controll/notify/base.rb +22 -43
- data/lib/controll/notify/flash.rb +3 -3
- data/lib/controll/notify/macros.rb +57 -0
- data/lib/controll/notify/message/handler.rb +36 -0
- data/lib/controll/notify/message/resolver.rb +28 -0
- data/lib/controll/notify/message/translator.rb +45 -0
- data/lib/controll/notify/message.rb +25 -0
- data/lib/controll/notify/typed.rb +13 -22
- data/lib/controll/notify.rb +11 -4
- data/lib/controll.rb +8 -2
- data/lib/generators/controll/assistant_generator.rb +27 -0
- data/lib/generators/controll/executor_generator.rb +23 -0
- data/lib/generators/controll/flow_handler_generator.rb +21 -0
- data/lib/generators/controll/notifier_generator.rb +21 -0
- data/lib/generators/controll/setup_generator.rb +37 -0
- data/lib/generators/controll/templates/assistant.tt +10 -0
- data/lib/generators/controll/templates/commander.tt +15 -0
- data/lib/generators/controll/templates/executor.tt +14 -0
- data/lib/generators/controll/templates/flow_handler.tt +26 -0
- data/lib/generators/controll/templates/notifier.tt +31 -0
- data/spec/acceptance/app_test.rb +1 -1
- data/spec/controll/assistant/param_assistant_spec.rb +31 -0
- data/spec/controll/assistant/session_assistant_spec.rb +31 -0
- data/spec/controll/assistant_spec.rb +26 -0
- data/spec/controll/command_spec.rb +4 -4
- data/spec/controll/enabler/macros_spec.rb +76 -0
- data/spec/controll/enabler/maps_spec.rb +31 -0
- data/spec/controll/{helper → enabler}/notify_spec.rb +7 -17
- data/spec/controll/enabler/path_handler_spec.rb +24 -0
- data/spec/controll/enabler/path_resolver_spec.rb +87 -0
- data/spec/controll/enabler_spec.rb +30 -0
- data/spec/controll/event/helper_spec.rb +33 -0
- data/spec/controll/{helper/event_matcher_spec.rb → event/matcher_spec.rb} +4 -3
- data/spec/controll/event_spec.rb +66 -0
- data/spec/controll/events_spec.rb +23 -0
- data/spec/controll/executor/controlled_spec.rb +36 -0
- data/spec/controll/executor/{notificator_spec.rb → delegator_spec.rb} +4 -4
- data/spec/controll/flow/action_mapper/complex_spec.rb +102 -0
- data/spec/controll/flow/action_mapper/fallback_spec.rb +34 -0
- data/spec/controll/{flow_handler/render_spec.rb → flow/action_mapper/simple_spec.rb} +25 -22
- data/spec/controll/{flow_handler/redirect/action_spec.rb → flow/event_mapper/path_finder_spec.rb} +10 -10
- data/spec/controll/{flow_handler/redirect/mapper_spec.rb → flow/event_mapper/util_spec.rb} +9 -9
- data/spec/controll/flow/master/executor_spec.rb +56 -0
- data/spec/{app/app/models/.gitkeep → controll/flow/master/macros_spec.rb} +0 -0
- data/spec/controll/flow/master_spec.rb +157 -0
- data/spec/controll/notify/base_spec.rb +6 -12
- data/spec/controll/notify/message/handler_spec.rb +27 -0
- data/spec/controll/notify/message/resolver_spec.rb +53 -0
- data/spec/controll/notify/message/translator_spec.rb +46 -0
- data/spec/controll/notify/message_spec.rb +4 -0
- data/spec/controll/notify/{message_handler.rb → services_notifier.rb} +3 -5
- data/spec/controll/notify/typed_spec.rb +2 -2
- data/spec/{app → controll_app}/.gitignore +0 -0
- data/spec/{app → controll_app}/Gemfile +0 -0
- data/spec/{app → controll_app}/Gemfile.lock +0 -0
- data/spec/{app → controll_app}/README.rdoc +0 -0
- data/spec/{app → controll_app}/Rakefile +0 -0
- data/spec/controll_app/app/controll/commanders/services_commander.rb +5 -0
- data/spec/controll_app/app/controll/executors/services_executor.rb +4 -0
- data/spec/controll_app/app/controll/flows/create_services.rb +9 -0
- data/spec/controll_app/app/controll/notifiers/services_notifier.rb +9 -0
- data/spec/{app → controll_app}/app/controllers/application_controller.rb +0 -1
- data/spec/controll_app/app/controllers/services_controller.rb +8 -0
- data/spec/{app/lib/assets → controll_app/app/models}/.gitkeep +0 -0
- data/spec/{app → controll_app}/app/models/post.rb +0 -0
- data/spec/{app → controll_app}/app/views/layouts/application.html.erb +0 -0
- data/spec/{app → controll_app}/app/views/posts/_form.html.erb +0 -0
- data/spec/{app → controll_app}/app/views/posts/edit.html.erb +0 -0
- data/spec/{app → controll_app}/app/views/posts/index.html.erb +0 -0
- data/spec/{app → controll_app}/app/views/posts/new.html.erb +0 -0
- data/spec/{app → controll_app}/app/views/posts/show.html.erb +0 -0
- data/spec/{app → controll_app}/config/application.rb +1 -1
- data/spec/{app → controll_app}/config/boot.rb +0 -0
- data/spec/{app → controll_app}/config/environment.rb +0 -0
- data/spec/{app → controll_app}/config/environments/development.rb +0 -0
- data/spec/{app → controll_app}/config/environments/test.rb +0 -0
- data/spec/{app → controll_app}/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/{app → controll_app}/config/initializers/inflections.rb +0 -0
- data/spec/{app → controll_app}/config/initializers/mime_types.rb +0 -0
- data/spec/{app → controll_app}/config/initializers/secret_token.rb +0 -0
- data/spec/{app → controll_app}/config/initializers/session_store.rb +0 -0
- data/spec/{app → controll_app}/config/locales/en.yml +0 -0
- data/spec/controll_app/config/routes.rb +5 -0
- data/spec/{app → controll_app}/config.ru +0 -0
- data/spec/{app → controll_app}/db/seeds.rb +0 -0
- data/spec/{app/lib/tasks → controll_app/log}/.gitkeep +0 -0
- data/spec/{app → controll_app}/public/404.html +0 -0
- data/spec/{app → controll_app}/public/422.html +0 -0
- data/spec/{app → controll_app}/public/500.html +0 -0
- data/spec/{app → controll_app}/public/favicon.ico +0 -0
- data/spec/{app → controll_app}/public/index.html +0 -0
- data/spec/{app → controll_app}/public/javascripts/application.js +0 -0
- data/spec/{app → controll_app}/public/robots.txt +0 -0
- data/spec/{app → controll_app}/public/stylesheets/application.css +0 -0
- metadata +122 -85
- data/lib/controll/executor/notificator.rb +0 -12
- data/lib/controll/flow_handler/base.rb +0 -19
- data/lib/controll/flow_handler/control.rb +0 -85
- data/lib/controll/flow_handler/errors.rb +0 -5
- data/lib/controll/flow_handler/event_helper.rb +0 -18
- data/lib/controll/flow_handler/redirect/action.rb +0 -45
- data/lib/controll/flow_handler/redirect/mapper.rb +0 -41
- data/lib/controll/flow_handler/redirect.rb +0 -51
- data/lib/controll/flow_handler/render.rb +0 -51
- data/lib/controll/flow_handler.rb +0 -11
- data/lib/controll/helper/notify.rb +0 -74
- data/lib/controll/helper/path_resolver.rb +0 -45
- data/spec/app/app/controllers/posts_controller.rb +0 -52
- data/spec/app/config/routes.rb +0 -62
- data/spec/app/log/.gitkeep +0 -0
- data/spec/app/script/rails +0 -6
- data/spec/app/spec/controllers/posts_controller_spec.rb +0 -59
- data/spec/app/spec/isolated_spec_helper.rb +0 -6
- data/spec/app/spec/spec_helper.rb +0 -5
- data/spec/app/spec/unit/controllers/posts_controller_isolated_spec.rb +0 -63
- data/spec/app/spec/unit/controllers/posts_controller_spec.rb +0 -59
- data/spec/app/test/functional/.gitkeep +0 -0
- data/spec/app/test/functional/posts_controller_test.rb +0 -67
- data/spec/app/test/isolated_test_helper.rb +0 -7
- data/spec/app/test/test_helper.rb +0 -6
- data/spec/app/test/unit/.gitkeep +0 -0
- data/spec/app/test/unit/controllers/posts_controller_isolated_test.rb +0 -71
- data/spec/app/test/unit/controllers/posts_controller_test.rb +0 -67
- data/spec/app/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/app/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/app/vendor/plugins/.gitkeep +0 -0
- data/spec/controll/asssistant_spec.rb +0 -5
- data/spec/controll/flow_handler/control_spec.rb +0 -159
- data/spec/controll/flow_handler/redirect_spec.rb +0 -93
- data/spec/controll/helper/path_resolver_spec.rb +0 -49
- data/spec/controll/helper_spec.rb +0 -108
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Controll::Event do
|
|
4
|
+
let(:clazz) { Controll::Event }
|
|
5
|
+
|
|
6
|
+
describe '.initialize name, *args' do
|
|
7
|
+
context 'implicit notice' do
|
|
8
|
+
subject { Controll::Event.new 'sign_in' }
|
|
9
|
+
|
|
10
|
+
its(:name) { should == :sign_in }
|
|
11
|
+
its(:type) { should == :notice }
|
|
12
|
+
its(:options) { should be_blank }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'explicit notice' do
|
|
16
|
+
subject { Controll::Event.new 'sign_in', :notice }
|
|
17
|
+
|
|
18
|
+
its(:name) { should == :sign_in }
|
|
19
|
+
its(:type) { should == :notice }
|
|
20
|
+
its(:options) { should be_blank }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context 'explicit error and options' do
|
|
24
|
+
subject { Controll::Event.new 'sign_in', :error, {:a => 7} }
|
|
25
|
+
|
|
26
|
+
its(:name) { should == :sign_in }
|
|
27
|
+
its(:type) { should == :error }
|
|
28
|
+
its(:options) { should == {:a => 7} }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'explicit warning type in options' do
|
|
32
|
+
subject { Controll::Event.new 'sign_in', {:type => :warning, :a => 7} }
|
|
33
|
+
|
|
34
|
+
its(:name) { should == :sign_in }
|
|
35
|
+
its(:type) { should == :warning }
|
|
36
|
+
its(:options) { should == {:a => 7} }
|
|
37
|
+
|
|
38
|
+
describe '.warning?' do
|
|
39
|
+
its(:warning?) { should be_true }
|
|
40
|
+
its(:notice?) { should be_false }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'class methods' do
|
|
46
|
+
subject { clazz }
|
|
47
|
+
|
|
48
|
+
describe '.valid_types' do
|
|
49
|
+
its(:valid_types) { should = %w{notice error warning success} }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe '.valid_types=' do
|
|
53
|
+
before do
|
|
54
|
+
clazz.valid_types = [:notice]
|
|
55
|
+
end
|
|
56
|
+
its(:valid_types) { should = [:notice] }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '.add_valid_type' do
|
|
60
|
+
before do
|
|
61
|
+
clazz.add_valid_types :remote, :invalid
|
|
62
|
+
end
|
|
63
|
+
its(:valid_types) { should include(:remote, :invalid) }
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Controll::Events do
|
|
4
|
+
subject { clazz.new }
|
|
5
|
+
let(:clazz) { Controll::Events }
|
|
6
|
+
|
|
7
|
+
include Controll::Event::Helper
|
|
8
|
+
|
|
9
|
+
let(:a_success) { create_event :success }
|
|
10
|
+
let(:a_warning) { create_event :warning }
|
|
11
|
+
|
|
12
|
+
describe 'class methods' do
|
|
13
|
+
subject { clazz }
|
|
14
|
+
|
|
15
|
+
its(:valid_types) { should == Controll::Event.valid_types }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'last' do
|
|
19
|
+
subject { Controll::Events.new a_success, a_warning }
|
|
20
|
+
|
|
21
|
+
its(:last) { should == a_warning }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class MyControlledExec < Controll::Executor::Controlled
|
|
4
|
+
controller_methods :hello
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class MyAwesomeController
|
|
8
|
+
def hello
|
|
9
|
+
"hello"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe Controll::Executor::Controlled do
|
|
14
|
+
subject { MyControlledExec.new controller }
|
|
15
|
+
|
|
16
|
+
let(:controller) { MyAwesomeController.new }
|
|
17
|
+
|
|
18
|
+
describe '.method_missing' do
|
|
19
|
+
specify do
|
|
20
|
+
subject.hello.should == 'hello'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
specify do
|
|
24
|
+
expect { subject.bye }.to raise_error
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '.execute' do
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '.result' do
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe 'self.execute &block' do
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
class MyDelegator < Controll::Executor::Delegator
|
|
4
|
+
controller_methods :hello
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
class MyAwesomeController
|
|
@@ -10,8 +10,8 @@ class MyAwesomeController
|
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
describe Controll::Executor::
|
|
14
|
-
subject {
|
|
13
|
+
describe Controll::Executor::Delegator do
|
|
14
|
+
subject { MyDelegator.new controller }
|
|
15
15
|
|
|
16
16
|
let(:controller) { MyAwesomeController.new }
|
|
17
17
|
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class HelloToWelcomeRedirect < Controll::Flow::ActionMapper::Complex
|
|
4
|
+
event_map :welcome => [:hello, :hi]
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class ErrorBadRedirect < Controll::Flow::ActionMapper::Complex
|
|
8
|
+
event_map :error, bad: ['bad_payment', 'wrong_payment']
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class TheController
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe Controll::Flow::ActionMapper::Complex do
|
|
15
|
+
|
|
16
|
+
def notification name
|
|
17
|
+
Hashie::Mash.new(name: name.to_sym, type: :notice)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def error name
|
|
21
|
+
Hashie::Mash.new(name: name.to_sym, type: :error)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
let(:controller) { TheController.new }
|
|
25
|
+
|
|
26
|
+
describe 'class macros' do
|
|
27
|
+
before :all do
|
|
28
|
+
ErrorBadRedirect.event_map :error, crap: ['bad_payment', 'wrong_payment']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
specify {
|
|
32
|
+
ErrorBadRedirect.event_map_for(:error).should == {crap: ['bad_payment', 'wrong_payment']}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
specify {
|
|
36
|
+
ErrorBadRedirect.event_maps.should == {error: {crap: ['bad_payment', 'wrong_payment']} }
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'use directly without subclassing' do
|
|
41
|
+
subject { clazz.new '/' }
|
|
42
|
+
|
|
43
|
+
let(:clazz) { Controll::Flow::ActionMapper::Complex }
|
|
44
|
+
|
|
45
|
+
let(:hello) { notification :hello }
|
|
46
|
+
|
|
47
|
+
describe '.action event' do
|
|
48
|
+
specify do
|
|
49
|
+
expect { clazz.action(controller, :hello) }.to raise_error(Controll::Flow::NoMappingFoundError)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'HelloToWelcomeRedirect subclass' do
|
|
55
|
+
subject { clazz.new '/' }
|
|
56
|
+
|
|
57
|
+
let(:clazz) { HelloToWelcomeRedirect }
|
|
58
|
+
|
|
59
|
+
context 'has redirections' do
|
|
60
|
+
describe '.action event' do
|
|
61
|
+
specify do
|
|
62
|
+
expect { clazz.action(controller, :hello) }.to_not raise_error(Controll::Flow::NoMappingFoundError)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
specify do
|
|
66
|
+
clazz.action(controller, :hello).should be_a Controll::Flow::Action::PathAction
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
specify do
|
|
70
|
+
clazz.action(controller, :hi).path.should == 'welcome'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context 'ErrorBadRedirect subclass' do
|
|
77
|
+
subject { clazz.new '/' }
|
|
78
|
+
|
|
79
|
+
let(:clazz) { ErrorBadRedirect }
|
|
80
|
+
|
|
81
|
+
before do
|
|
82
|
+
Controll::Event.reset_types
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context 'has error redirections' do
|
|
86
|
+
describe '.action event' do
|
|
87
|
+
specify do
|
|
88
|
+
expect { clazz.action(controller, :hello) }.to raise_error(Controll::Flow::NoMappingFoundError)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
specify do
|
|
92
|
+
clazz.action(controller, error(:bad_payment)).should be_a Controll::Flow::Action::PathAction
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
specify do
|
|
96
|
+
clazz.action(controller, error(:wrong_payment)).path.should == 'crap'
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class FallbackController
|
|
4
|
+
def do_fallback fallback
|
|
5
|
+
"did a nice fallback :) - #{fallback.event.name}"
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class BasicFallbackAction < Controll::Flow::Action::Fallback
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe Controll::Flow::Action::Fallback do
|
|
13
|
+
context 'Basic default fallback' do
|
|
14
|
+
subject { clazz.new controller, event }
|
|
15
|
+
|
|
16
|
+
let(:controller) { FallbackController.new }
|
|
17
|
+
let(:clazz) { BasicFallbackAction }
|
|
18
|
+
let(:event) { create_event :unknown, :notice }
|
|
19
|
+
|
|
20
|
+
include Controll::Event::Helper
|
|
21
|
+
|
|
22
|
+
describe '.action controller, event' do
|
|
23
|
+
specify do
|
|
24
|
+
clazz.action(controller, event).should be_a Controll::Flow::Action::Fallback
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '.perform' do
|
|
29
|
+
specify do
|
|
30
|
+
clazz.action(controller, event).perform.should == "did a nice fallback :) - #{event.name}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,38 +1,45 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
class NoEventsRender < Controll::
|
|
3
|
+
class NoEventsRender < Controll::Flow::ActionMapper::Simple
|
|
4
4
|
def self.events
|
|
5
5
|
[]
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
class HiRender < Controll::
|
|
9
|
+
class HiRender < Controll::Flow::ActionMapper::Simple
|
|
10
10
|
def self.events
|
|
11
11
|
[:hi]
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
class HelloRender < Controll::
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
class HelloRender < Controll::Flow::ActionMapper::Simple
|
|
16
|
+
events :hello, :damn
|
|
17
|
+
default_path '/default'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class NiceController
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
def notification name
|
|
21
|
-
Hashie::Mash.new(name: name.to_sym, type: :
|
|
24
|
+
Hashie::Mash.new(name: name.to_sym, type: :notice)
|
|
22
25
|
end
|
|
23
26
|
|
|
24
|
-
describe Controll::
|
|
27
|
+
describe Controll::Flow::ActionMapper::Simple do
|
|
28
|
+
|
|
29
|
+
Simple = Controll::Flow::ActionMapper::Simple
|
|
30
|
+
Complex = Controll::Flow::ActionMapper::Complex
|
|
31
|
+
|
|
32
|
+
let(:controller) { NiceController }
|
|
33
|
+
let(:hello) { notification :hello }
|
|
25
34
|
|
|
26
35
|
context 'use directly without sublclassing' do
|
|
27
36
|
subject { clazz.new '/' }
|
|
28
37
|
|
|
29
|
-
let(:clazz) {
|
|
30
|
-
|
|
31
|
-
let(:hello) { notification :hello }
|
|
38
|
+
let(:clazz) { Simple }
|
|
32
39
|
|
|
33
40
|
describe '.action event' do
|
|
34
41
|
specify do
|
|
35
|
-
expect { clazz.action(
|
|
42
|
+
expect { clazz.action(controller, hello) }.to raise_error(Controll::Flow::NoEventsDefinedError)
|
|
36
43
|
end
|
|
37
44
|
end
|
|
38
45
|
end
|
|
@@ -45,7 +52,7 @@ describe Controll::FlowHandler::Render do
|
|
|
45
52
|
context 'empty events' do
|
|
46
53
|
describe '.action event' do
|
|
47
54
|
specify do
|
|
48
|
-
expect { clazz.action(
|
|
55
|
+
expect { clazz.action(controller, hello) }.to raise_error(Controll::Flow::NoEventsDefinedError)
|
|
49
56
|
end
|
|
50
57
|
end
|
|
51
58
|
end
|
|
@@ -62,22 +69,18 @@ describe Controll::FlowHandler::Render do
|
|
|
62
69
|
|
|
63
70
|
describe 'does not respond to hello' do
|
|
64
71
|
specify do
|
|
65
|
-
expect { clazz.action(
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
specify do
|
|
69
|
-
clazz.action(event).should == nil
|
|
72
|
+
expect { clazz.action(controller, event) }.to_not raise_error(Controll::Flow::NoEventsDefinedError)
|
|
70
73
|
end
|
|
71
74
|
|
|
72
75
|
specify do
|
|
73
|
-
clazz.action(
|
|
76
|
+
expect { clazz.action(controller, event) }.to raise_error Controll::Flow::NoDefaultPathDefinedError
|
|
74
77
|
end
|
|
75
78
|
end
|
|
76
79
|
|
|
77
80
|
describe 'responds to hi' do
|
|
78
81
|
# default_path not implemented!
|
|
79
82
|
specify do
|
|
80
|
-
expect { clazz.action(:hi) }.to raise_error
|
|
83
|
+
expect { clazz.action(controller, :hi) }.to raise_error Controll::Flow::NoDefaultPathDefinedError
|
|
81
84
|
end
|
|
82
85
|
end
|
|
83
86
|
end
|
|
@@ -94,15 +97,15 @@ describe Controll::FlowHandler::Render do
|
|
|
94
97
|
context 'has events and default_path' do
|
|
95
98
|
describe '.action event' do
|
|
96
99
|
specify do
|
|
97
|
-
clazz.action(event).should be_a
|
|
100
|
+
clazz.action(controller, event).should be_a Controll::Flow::Action::PathAction
|
|
98
101
|
end
|
|
99
102
|
|
|
100
103
|
specify do
|
|
101
|
-
clazz.action(event).path.should == default_path
|
|
104
|
+
clazz.action(controller, event).path.should == default_path
|
|
102
105
|
end
|
|
103
106
|
|
|
104
107
|
specify do
|
|
105
|
-
clazz.action(event, 'other_path').path.should == 'other_path'
|
|
108
|
+
clazz.action(controller, event, 'other_path').path.should == 'other_path'
|
|
106
109
|
end
|
|
107
110
|
end
|
|
108
111
|
end
|
data/spec/controll/{flow_handler/redirect/action_spec.rb → flow/event_mapper/path_finder_spec.rb}
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
describe Controll::Flow::EventMapper::PathFinder do
|
|
4
|
+
def notice name
|
|
5
|
+
Hashie::Mash.new(name: name.to_sym, type: :notice)
|
|
6
|
+
end
|
|
6
7
|
|
|
7
|
-
def error name
|
|
8
|
-
|
|
9
|
-
end
|
|
8
|
+
def error name
|
|
9
|
+
Hashie::Mash.new(name: name.to_sym, type: :error)
|
|
10
|
+
end
|
|
10
11
|
|
|
11
|
-
describe Controll::FlowHandler::Redirect::Action do
|
|
12
12
|
let(:redirections) do
|
|
13
13
|
{
|
|
14
14
|
:error => error_map, :notice => notice_map
|
|
@@ -29,7 +29,7 @@ describe Controll::FlowHandler::Redirect::Action do
|
|
|
29
29
|
let(:types) { [:notice, :error] }
|
|
30
30
|
|
|
31
31
|
context 'use' do
|
|
32
|
-
let(:clazz) { Controll::
|
|
32
|
+
let(:clazz) { Controll::Flow::EventMapper::PathFinder }
|
|
33
33
|
let(:hello) { notice :hello }
|
|
34
34
|
let(:bad_payment) { error :bad_payment }
|
|
35
35
|
|
|
@@ -37,11 +37,11 @@ describe Controll::FlowHandler::Redirect::Action do
|
|
|
37
37
|
subject { clazz.new hello, redirections, types }
|
|
38
38
|
|
|
39
39
|
specify do
|
|
40
|
-
expect { subject.map }.to_not raise_error(Controll::
|
|
40
|
+
expect { subject.map }.to_not raise_error(Controll::Flow::NoMappingFoundError)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
specify do
|
|
44
|
-
subject.
|
|
44
|
+
subject.path.should == 'welcome'
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -8,7 +8,7 @@ def error name
|
|
|
8
8
|
Hashie::Mash.new(name: name.to_sym, type: :error)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
describe Controll::
|
|
11
|
+
describe Controll::Flow::EventMapper::Util do
|
|
12
12
|
let(:redirections) do
|
|
13
13
|
{
|
|
14
14
|
:error => error_map, :notice => notice_map
|
|
@@ -31,28 +31,28 @@ describe Controll::FlowHandler::Redirect::Mapper do
|
|
|
31
31
|
context 'use' do
|
|
32
32
|
subject { clazz.new hello, notice_map }
|
|
33
33
|
|
|
34
|
-
let(:clazz) { Controll::
|
|
34
|
+
let(:clazz) { Controll::Flow::EventMapper::Util }
|
|
35
35
|
let(:hello) { notice :hello }
|
|
36
36
|
let(:bad_payment) { error :bad_payment }
|
|
37
37
|
|
|
38
38
|
describe '.initialize' do
|
|
39
|
-
its(:event) { should
|
|
40
|
-
its(:
|
|
39
|
+
its(:event) { should be_a Controll::Event }
|
|
40
|
+
its(:event_map) { should == notice_map }
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
describe '.
|
|
43
|
+
describe '.map_event' do
|
|
44
44
|
specify do
|
|
45
|
-
subject.
|
|
45
|
+
subject.map_event.should == 'welcome'
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
describe '.matcher
|
|
49
|
+
describe '.matcher' do
|
|
50
50
|
specify do
|
|
51
|
-
subject.send(:matcher
|
|
51
|
+
subject.send(:matcher).should be_a Controll::Event::Matcher
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
specify do
|
|
55
|
-
subject.send(:matcher
|
|
55
|
+
subject.send(:matcher).event.should be_a Controll::Event
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module MyOwnController
|
|
4
|
+
class Update
|
|
5
|
+
def render path
|
|
6
|
+
send(path) if path
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def default
|
|
10
|
+
'default'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe Controll::Flow::Master::Executor do
|
|
16
|
+
include Controll::Event::Helper
|
|
17
|
+
|
|
18
|
+
let(:executor) { Controll::Flow::Master::Executor }
|
|
19
|
+
let(:controller) { MyOwnController::Update.new }
|
|
20
|
+
|
|
21
|
+
let(:fallback_event) { create_event :unknown, :notice }
|
|
22
|
+
let(:render_event) { create_event :hello, :notice }
|
|
23
|
+
let(:redirect_event) { create_event :exit, :error }
|
|
24
|
+
|
|
25
|
+
let(:action_handlers) { [:renderer, :redirecter] }
|
|
26
|
+
|
|
27
|
+
let(:options) do
|
|
28
|
+
{event: event, action_handlers: action_handlers}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '.initialize with fallback_event' do
|
|
32
|
+
let(:event) { fallback_event }
|
|
33
|
+
subject { executor.new controller, options }
|
|
34
|
+
|
|
35
|
+
specify do
|
|
36
|
+
subject.controller.should == controller
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
specify do
|
|
40
|
+
subject.event.should == event
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe '.initialize with render_event' do
|
|
45
|
+
let(:event) { render_event }
|
|
46
|
+
subject { executor.new controller, options }
|
|
47
|
+
|
|
48
|
+
specify do
|
|
49
|
+
subject.controller.should == controller
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
specify do
|
|
53
|
+
subject.event.should == event
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module MasterController
|
|
4
|
+
class Update
|
|
5
|
+
def render path
|
|
6
|
+
send(path) if path
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def default
|
|
10
|
+
'default'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module Flows
|
|
16
|
+
class EmptyEvent < Master
|
|
17
|
+
def event
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class UpdateEventWithoutHandler < Master
|
|
22
|
+
def event
|
|
23
|
+
:update
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class UpdateEvent < Master
|
|
29
|
+
def event
|
|
30
|
+
:update
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
renderer :simple do
|
|
34
|
+
events :update
|
|
35
|
+
default_path 'default'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class UpdateEventNoMatch < Master
|
|
40
|
+
def event
|
|
41
|
+
:update
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
renderer :simple do
|
|
45
|
+
events :create
|
|
46
|
+
default_path '/default'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe Controll::Flow::Master do
|
|
52
|
+
Fallback = Controll::Flow::Action::Fallback
|
|
53
|
+
|
|
54
|
+
context 'use directly without sublclassing' do
|
|
55
|
+
subject { flow.new controller }
|
|
56
|
+
|
|
57
|
+
let(:flow) { Controll::Flow::Master }
|
|
58
|
+
let(:controller) { MasterController::Update.new }
|
|
59
|
+
|
|
60
|
+
describe '.initialize' do
|
|
61
|
+
specify do
|
|
62
|
+
subject.controller.should == controller
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe '.execute' do
|
|
67
|
+
specify do
|
|
68
|
+
expect { subject.execute }.to raise_error(Controll::Flow::EventNotImplementedError)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context 'A Control Flow with empty #event method' do
|
|
74
|
+
subject { flow.new controller }
|
|
75
|
+
|
|
76
|
+
let(:flow) { Flows::EmptyEvent }
|
|
77
|
+
let(:controller) { MasterController::Update.new }
|
|
78
|
+
|
|
79
|
+
describe '.initialize' do
|
|
80
|
+
specify do
|
|
81
|
+
subject.controller.should == controller
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe '.execute' do
|
|
86
|
+
# since event is nil
|
|
87
|
+
specify do
|
|
88
|
+
expect { subject.execute }.to raise_error(ArgumentError)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
context 'A Control Flow where #event returns :update notice event' do
|
|
94
|
+
subject { flow.new controller }
|
|
95
|
+
|
|
96
|
+
let(:flow) { Flows::UpdateEventWithoutHandler }
|
|
97
|
+
let(:controller) { MasterController::Update.new }
|
|
98
|
+
|
|
99
|
+
describe '.initialize' do
|
|
100
|
+
specify do
|
|
101
|
+
subject.controller.should == controller
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '.execute' do
|
|
106
|
+
# since event returns nil
|
|
107
|
+
specify do
|
|
108
|
+
subject.execute.should be_a Fallback
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context 'A Control Flow where #event returns :update notice event and has a Render class with matching mapping' do
|
|
114
|
+
subject { flow.new controller }
|
|
115
|
+
|
|
116
|
+
let(:flow) { Flows::UpdateEvent }
|
|
117
|
+
let(:controller) { MasterController::Update.new }
|
|
118
|
+
|
|
119
|
+
describe '.initialize' do
|
|
120
|
+
specify do
|
|
121
|
+
subject.controller.should == controller
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe '.execute' do
|
|
126
|
+
# since event returns nil
|
|
127
|
+
specify do
|
|
128
|
+
expect { subject.execute }.to_not raise_error(Controll::Flow::ActionEventError)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
specify do
|
|
132
|
+
subject.execute.should be_a Fallback
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context 'A Control Flow where #event returns :update notice event and has a Render class with NO matching mapping' do
|
|
138
|
+
subject { flow.new controller }
|
|
139
|
+
|
|
140
|
+
let(:flow) { Flows::UpdateEventNoMatch }
|
|
141
|
+
let(:controller) { MasterController::Update.new }
|
|
142
|
+
|
|
143
|
+
describe '.initialize' do
|
|
144
|
+
specify do
|
|
145
|
+
subject.controller.should == controller
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
describe '.execute' do
|
|
150
|
+
# since event returns nil
|
|
151
|
+
specify do
|
|
152
|
+
expect { subject.execute }.to_not raise_error
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|