controll 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,21 @@
|
|
1
|
+
module Controll
|
2
|
+
module Generators
|
3
|
+
class FlowGenerator < ::Rails::Generators::NamedBase
|
4
|
+
desc 'Generates a Flow'
|
5
|
+
|
6
|
+
def main_flow
|
7
|
+
template 'flow.tt', "app/controll/flows/#{file_name}.rb"
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def parent_class
|
13
|
+
name.include?('::') ? "::Controll::Flow::#{parent_class_name}" : parent_class_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def parent_class_name
|
17
|
+
'Control'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Controll
|
2
|
+
module Generators
|
3
|
+
class NotifierGenerator < ::Rails::Generators::NamedBase
|
4
|
+
desc 'Generates a Notifier'
|
5
|
+
|
6
|
+
def main_flow
|
7
|
+
template 'notifier.tt', "app/controll/notifiers/#{file_name}.rb"
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def parent_class
|
13
|
+
name.include?('::') ? "::Controll::Notify::#{parent_class_name}" : parent_class_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def parent_class_name
|
17
|
+
'Typed'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Controll
|
2
|
+
module Generators
|
3
|
+
class SetupGenerator < ::Rails::Generators::Base
|
4
|
+
desc 'Sets up a Rails 3 prooject with a folder structure in app for controll artifacts'
|
5
|
+
|
6
|
+
argument :folders, type: :array, required: false, desc: 'creates specific folders for controll artifacts'
|
7
|
+
|
8
|
+
def main_flow
|
9
|
+
empty_directory "app/controll"
|
10
|
+
inside "app/controll" do
|
11
|
+
create_folders.each do |folder|
|
12
|
+
empty_directory folder
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def create_folders
|
20
|
+
return mapper_folders unless folders.empty?
|
21
|
+
valid_folders
|
22
|
+
end
|
23
|
+
|
24
|
+
def mapper_folders
|
25
|
+
@mapper_folders ||= folders.map {|f| f.to_s.underscore }.select{|f| valid_artifact? f }
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_folder? folder
|
29
|
+
valid_folders.include? folder.to_s.underscore
|
30
|
+
end
|
31
|
+
|
32
|
+
def valid_folders
|
33
|
+
%w{executors flows notifiers commanders assistants}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Commanders
|
2
|
+
class <%= class_name %> < <%= parent_class %>
|
3
|
+
# create basic command methods
|
4
|
+
# command_methods :cancel_commit, :create_account, :signout
|
5
|
+
|
6
|
+
# create custom command method with custom argument hash
|
7
|
+
|
8
|
+
# command_method :sign_out do
|
9
|
+
# end
|
10
|
+
|
11
|
+
# controller delegations
|
12
|
+
# controller_methods :auth_hash, :user_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Executors
|
2
|
+
class <%= class_name %> < <%= parent_class %>
|
3
|
+
def execute
|
4
|
+
# creates an error notification named :error
|
5
|
+
error and return unless valid_params?
|
6
|
+
|
7
|
+
# creates an error notification named :auth_invalid
|
8
|
+
# error(:auth_invalid) and return unless auth_valid?
|
9
|
+
|
10
|
+
# command! :sign_in
|
11
|
+
# result
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Flows
|
2
|
+
class <%= class_name %> < <%= parent_class %>
|
3
|
+
fallback do
|
4
|
+
# event == :no_auth ? do_render(:text => omniauth.to_yaml) : fallback_action
|
5
|
+
end
|
6
|
+
|
7
|
+
event do
|
8
|
+
# Executors::Authenticator.new(controller).execute
|
9
|
+
end
|
10
|
+
|
11
|
+
renderer do
|
12
|
+
# default_path :signup_services_path
|
13
|
+
# events :signed_in_new_user, :signed_in
|
14
|
+
end
|
15
|
+
|
16
|
+
redirecter do
|
17
|
+
redirections :notice do
|
18
|
+
{
|
19
|
+
# signup_services_path: :signed_in_new_user
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# redirections :error, signin_path: [:error, :invalid, :auth_error]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Notifiers
|
2
|
+
class <%= class_name %> < <%= parent_class %>
|
3
|
+
handler :notice do
|
4
|
+
# ...
|
5
|
+
end
|
6
|
+
|
7
|
+
handler :error do
|
8
|
+
messages do
|
9
|
+
{
|
10
|
+
must_sign_in: 'You need to sign in before accessing this page!',
|
11
|
+
|
12
|
+
auth_service_error: %q{There was an error at the remote authentication service.
|
13
|
+
You have not been signed in.},
|
14
|
+
|
15
|
+
cant_delete_current_account: 'You are currently signed in with this account!',
|
16
|
+
user_save_error: 'This is embarrassing! There was an error while creating your account from which we were not able to recover.',
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
msg :auth_error! do
|
21
|
+
"Error while authenticating via #{service_name}. The service did not return valid data."
|
22
|
+
end
|
23
|
+
|
24
|
+
msg :auth_invalid! do
|
25
|
+
'Error while authenticating via {{full_route}}. The service returned invalid data for the user id.'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
data/spec/acceptance/app_test.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class ParamAssistant < Controll::ParamAssistant
|
4
|
+
param_methods :id
|
5
|
+
end
|
6
|
+
|
7
|
+
class MyController
|
8
|
+
include Controll::ParamAssistant::Helper
|
9
|
+
|
10
|
+
def params
|
11
|
+
{:id => 7}
|
12
|
+
end
|
13
|
+
|
14
|
+
param_assistant ::ParamAssistant
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Controll::Assistant do
|
18
|
+
context 'Param assistant' do
|
19
|
+
subject { ParamAssistant.new controller }
|
20
|
+
|
21
|
+
let(:controller) { MyController.new }
|
22
|
+
|
23
|
+
its(:controller) { should == controller }
|
24
|
+
its(:params) { should == {:id => 7} }
|
25
|
+
its(:id) { should == 7 }
|
26
|
+
|
27
|
+
specify do
|
28
|
+
controller.param(:id).should == 7
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class SessionAssistant < Controll::SessionAssistant
|
4
|
+
session_methods :name
|
5
|
+
end
|
6
|
+
|
7
|
+
class MyController
|
8
|
+
include Controll::SessionAssistant::Helper
|
9
|
+
|
10
|
+
def session
|
11
|
+
{:name => 'kris'}
|
12
|
+
end
|
13
|
+
|
14
|
+
session_assistant ::SessionAssistant
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Controll::Assistant do
|
18
|
+
context 'Session assistant' do
|
19
|
+
subject { SessionAssistant.new controller }
|
20
|
+
|
21
|
+
let(:controller) { MyController.new }
|
22
|
+
|
23
|
+
its(:controller) { should == controller }
|
24
|
+
its(:session) { should == {:name => 'kris'} }
|
25
|
+
its(:name) { should == 'kris' }
|
26
|
+
|
27
|
+
specify do
|
28
|
+
controller.sess(:name).should == 'kris'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MyAssistant < Controll::Assistant
|
4
|
+
controller_methods :params
|
5
|
+
end
|
6
|
+
|
7
|
+
class MyController
|
8
|
+
def params
|
9
|
+
{:id => 7}
|
10
|
+
end
|
11
|
+
|
12
|
+
def my_assistant
|
13
|
+
@my_assistant ||= MyAssistant.new self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Controll::Assistant do
|
18
|
+
context 'My assistant with params delegation' do
|
19
|
+
subject { MyAssistant.new controller }
|
20
|
+
|
21
|
+
let(:controller) { MyController.new }
|
22
|
+
|
23
|
+
its(:controller) { should == controller }
|
24
|
+
its(:params) { should == {:id => 7} }
|
25
|
+
end
|
26
|
+
end
|
@@ -6,7 +6,7 @@ class NiceController
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
class
|
9
|
+
class SignOffCommand < Controll::Command
|
10
10
|
attribute :parent_id, String
|
11
11
|
|
12
12
|
def perform
|
@@ -15,7 +15,7 @@ class SignInCommand < Controll::Command
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class NiceCommander < Controll::Commander
|
18
|
-
command_method(:
|
18
|
+
command_method(:sign_off, name: 'kris') { {parent_id: parent_id} }
|
19
19
|
|
20
20
|
def params
|
21
21
|
{:id => 7}
|
@@ -43,13 +43,13 @@ describe Controll::Command do
|
|
43
43
|
|
44
44
|
describe '.command name, *args' do
|
45
45
|
specify do
|
46
|
-
subject.command(:
|
46
|
+
subject.command(:sign_off).should be_a Controll::Command
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
describe '.command! name, *args' do
|
51
51
|
specify do
|
52
|
-
subject.command!(:
|
52
|
+
subject.command!(:sign_off).should == {id: 7, parent: 'my parent', user_id: 1 }
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MyController
|
4
|
+
include Controll::Enabler::Macros
|
5
|
+
|
6
|
+
# Mocking!
|
7
|
+
def render path
|
8
|
+
path
|
9
|
+
end
|
10
|
+
alias_method :redirect_to, :render
|
11
|
+
end
|
12
|
+
|
13
|
+
module Executors
|
14
|
+
class Services < Controlled
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module Commanders
|
19
|
+
class Services < Commander
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Notifiers
|
24
|
+
class Services < Typed
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Assistants
|
29
|
+
class Services < Assistant
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module Flows
|
34
|
+
class Services < Master
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe Controll::Enabler do
|
39
|
+
subject { controller.new }
|
40
|
+
let(:controller) { MyController }
|
41
|
+
|
42
|
+
describe 'class level macros' do
|
43
|
+
|
44
|
+
describe '.commander name, options = {}' do
|
45
|
+
before :all do
|
46
|
+
controller.commander :services
|
47
|
+
end
|
48
|
+
|
49
|
+
its(:commander) { should be_a Commanders::Services }
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '.commander name, options = {}' do
|
53
|
+
before :all do
|
54
|
+
controller.notifier :services
|
55
|
+
end
|
56
|
+
|
57
|
+
its(:notifier) { should be_a Notifiers::Services }
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '.assistant name, options = {}' do
|
61
|
+
before :all do
|
62
|
+
controller.assistant :services
|
63
|
+
end
|
64
|
+
|
65
|
+
its(:assistant) { should be_a Assistants::Services }
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '.flow name, options = {}' do
|
69
|
+
before :all do
|
70
|
+
controller.flow :services
|
71
|
+
end
|
72
|
+
|
73
|
+
its(:flow) { should be_a Flows::Services }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class SweetController
|
4
|
+
include Controll::Enabler::Maps
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Controll::Enabler::Maps do
|
8
|
+
subject { controller.new }
|
9
|
+
|
10
|
+
let(:controller) { SweetController }
|
11
|
+
|
12
|
+
describe '.redirect_map {}' do
|
13
|
+
before :all do
|
14
|
+
controller.redirect_map :index => %w{alpha beta}
|
15
|
+
end
|
16
|
+
|
17
|
+
specify do
|
18
|
+
controller.redirect_map.should == {:index => ['alpha', 'beta'] }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.render_map {}' do
|
23
|
+
before :all do
|
24
|
+
controller.render_map :index => %w{alpha zeta}
|
25
|
+
end
|
26
|
+
|
27
|
+
specify do
|
28
|
+
controller.render_map.should == {:index => ['alpha', 'zeta'] }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,31 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class Notifier
|
4
|
-
include Controll::
|
4
|
+
include Controll::Enabler::Notify
|
5
5
|
end
|
6
6
|
|
7
|
-
describe Controll::
|
7
|
+
describe Controll::Enabler::Notify do
|
8
8
|
subject { Notifier.new }
|
9
9
|
|
10
10
|
context 'initial state' do
|
11
|
-
describe '.notifications' do
|
12
|
-
its(:notifications) { should be_empty }
|
13
|
-
end
|
14
|
-
|
15
11
|
describe '.main_event' do
|
16
|
-
its(:main_event) { should be_a
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '.create_notification' do
|
20
|
-
specify { subject.send(:create_notification, :updated).should be_a Hashie::Mash }
|
12
|
+
its(:main_event) { should be_a Controll::Event }
|
21
13
|
end
|
22
14
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
describe '.create_notice' do
|
28
|
-
specify { subject.send(:create_notice,:updated).should be_a Hashie::Mash }
|
15
|
+
Controll::Event.valid_types.each do |type|
|
16
|
+
describe ".create_#{type}" do
|
17
|
+
specify { subject.send(:"create_#{type}",:updated).should be_a Controll::Event }
|
18
|
+
end
|
29
19
|
end
|
30
20
|
|
31
21
|
describe '.notify' do
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MySweetController
|
4
|
+
include Controll::Enabler
|
5
|
+
|
6
|
+
redirect_map :index => %w{success}
|
7
|
+
|
8
|
+
render_map :show => %w{success}
|
9
|
+
|
10
|
+
# Mocking!
|
11
|
+
def render path
|
12
|
+
path
|
13
|
+
end
|
14
|
+
alias_method :redirect_to, :render
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Controll::Enabler::PathHandler do
|
18
|
+
subject { Controll::Enabler::PathHandler.new controller }
|
19
|
+
|
20
|
+
let(:controller) { MySweetController.new }
|
21
|
+
|
22
|
+
describe '.execute *args' do
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MySweetController
|
4
|
+
include Controll::Enabler
|
5
|
+
|
6
|
+
def fallback_path
|
7
|
+
'root'
|
8
|
+
end
|
9
|
+
|
10
|
+
def away
|
11
|
+
'away'
|
12
|
+
end
|
13
|
+
|
14
|
+
def perfect
|
15
|
+
'perfect'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
ActionMapper = Controll::Flow::ActionMapper
|
20
|
+
Action = Controll::Flow::Action
|
21
|
+
|
22
|
+
class Redirecter < ActionMapper::Complex
|
23
|
+
event_map 'inperfect' => [:cool, :sweet], 'away' => [:success]
|
24
|
+
end
|
25
|
+
|
26
|
+
class Renderer < ActionMapper::Simple
|
27
|
+
events %w{perfect}
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Controll::Enabler::PathResolver do
|
31
|
+
def notice name
|
32
|
+
Hashie::Mash.new(name: name.to_sym, type: :notice)
|
33
|
+
end
|
34
|
+
|
35
|
+
def error name
|
36
|
+
Hashie::Mash.new(name: name.to_sym, type: :error)
|
37
|
+
end
|
38
|
+
|
39
|
+
let(:controller) { MySweetController.new }
|
40
|
+
|
41
|
+
let(:render_map) { {'perfect' => [:cool, :sweet], 'home' => [:success] }}
|
42
|
+
let(:redirect_map) { {'inperfect' => [:cool, :sweet], 'away' => [:success] } }
|
43
|
+
|
44
|
+
let(:fallback_action) { Action::Fallback.new controller }
|
45
|
+
|
46
|
+
context 'initialize controller, render_map' do
|
47
|
+
subject { Controll::Enabler::PathResolver.new controller, render_map }
|
48
|
+
|
49
|
+
its(:caller) { should == controller }
|
50
|
+
its(:controller) { should == controller }
|
51
|
+
its(:event_map) { should == render_map }
|
52
|
+
|
53
|
+
describe '.resolve' do
|
54
|
+
specify do
|
55
|
+
subject.resolve.should == 'home'
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.resolve :cool' do
|
59
|
+
specify do
|
60
|
+
subject.resolve(:cool).should == 'perfect'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '.resolve sweet' do
|
65
|
+
specify do
|
66
|
+
subject.resolve(:sweet).should == 'perfect'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '.resolve :uncool' do
|
71
|
+
specify do
|
72
|
+
subject.resolve(:uncool).should_not == 'perfect'
|
73
|
+
end
|
74
|
+
|
75
|
+
specify do
|
76
|
+
subject.resolve(:uncool).should == nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '.resolve Fallback Action' do
|
81
|
+
specify do
|
82
|
+
subject.resolve(fallback_action).should == nil
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MyController
|
4
|
+
include Controll::Enabler
|
5
|
+
|
6
|
+
# Mocking!
|
7
|
+
def render path
|
8
|
+
path
|
9
|
+
end
|
10
|
+
alias_method :redirect_to, :render
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Controll::Enabler do
|
14
|
+
subject { controller.new }
|
15
|
+
let(:controller) { MyController }
|
16
|
+
|
17
|
+
context 'instance' do
|
18
|
+
describe 'do_redirect' do
|
19
|
+
specify do
|
20
|
+
expect { subject.do_redirect }.to raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'do_render' do
|
25
|
+
specify do
|
26
|
+
expect { subject.do_render }.to raise_error(ArgumentError)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Container
|
4
|
+
include Controll::Event::Helper
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Controll::Event::Helper do
|
8
|
+
subject { Container.new }
|
9
|
+
|
10
|
+
let(:events) { %w{sign_in sign_out} }
|
11
|
+
let(:bad_events) { %w{bad stuff} }
|
12
|
+
|
13
|
+
let(:event) { 'sign_in' }
|
14
|
+
let(:bad_event) { 'unknown' }
|
15
|
+
|
16
|
+
describe '.normalize event' do
|
17
|
+
context 'Controll::Event' do
|
18
|
+
specify { subject.normalize(Controll::Event.new(:x)).should be_a Controll::Event }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'Symbol' do
|
22
|
+
specify { subject.normalize(:x).should be_a Controll::Event }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'Hash' do
|
26
|
+
specify { subject.normalize(:name => :y).should be_a Controll::Event }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '.create_event' do
|
31
|
+
specify { subject.create_event(:x).should be_a Controll::Event }
|
32
|
+
end
|
33
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Controll::
|
4
|
-
subject { Controll::
|
3
|
+
describe Controll::Event::Matcher do
|
4
|
+
subject { Controll::Event::Matcher.new event }
|
5
5
|
|
6
6
|
let(:events) { %w{sign_in sign_out} }
|
7
7
|
let(:bad_events) { %w{bad stuff} }
|
@@ -10,7 +10,8 @@ describe Controll::Helper::EventMatcher do
|
|
10
10
|
let(:bad_event) { 'unknown' }
|
11
11
|
|
12
12
|
describe '.initialize event' do
|
13
|
-
its(:event) { should
|
13
|
+
its(:event) { should be_a Controll::Event }
|
14
|
+
its('event.name') { should == :sign_in }
|
14
15
|
end
|
15
16
|
|
16
17
|
describe '.match? events' do
|