aldous 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.irbrc +3 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +591 -0
- data/Rakefile +1 -0
- data/aldous.gemspec +24 -0
- data/examples/basic_todo/.foreman +1 -0
- data/examples/basic_todo/.gitignore +16 -0
- data/examples/basic_todo/.rspec +3 -0
- data/examples/basic_todo/.ruby-version +2 -0
- data/examples/basic_todo/Gemfile +52 -0
- data/examples/basic_todo/Procfile +1 -0
- data/examples/basic_todo/README.rdoc +28 -0
- data/examples/basic_todo/Rakefile +6 -0
- data/examples/basic_todo/app/assets/images/.keep +0 -0
- data/examples/basic_todo/app/assets/javascripts/application.js +13 -0
- data/examples/basic_todo/app/assets/stylesheets/application.css +15 -0
- data/examples/basic_todo/app/controller_actions/base_action.rb +24 -0
- data/examples/basic_todo/app/controller_actions/base_precondition.rb +2 -0
- data/examples/basic_todo/app/controller_actions/home_controller/show.rb +8 -0
- data/examples/basic_todo/app/controller_actions/shared/ensure_user_not_disabled_precondition.rb +9 -0
- data/examples/basic_todo/app/controller_actions/sign_ins_controller/create.rb +24 -0
- data/examples/basic_todo/app/controller_actions/sign_ins_controller/destroy.rb +9 -0
- data/examples/basic_todo/app/controller_actions/sign_ins_controller/new.rb +7 -0
- data/examples/basic_todo/app/controller_actions/sign_ins_controller/user_params.rb +9 -0
- data/examples/basic_todo/app/controller_actions/sign_ups_controller/create.rb +23 -0
- data/examples/basic_todo/app/controller_actions/sign_ups_controller/new.rb +7 -0
- data/examples/basic_todo/app/controller_actions/sign_ups_controller/user_params.rb +9 -0
- data/examples/basic_todo/app/controller_actions/todos/all_completed_controller/destroy.rb +17 -0
- data/examples/basic_todo/app/controller_actions/todos/completed_controller/create.rb +29 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/create.rb +26 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/destroy.rb +21 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/edit.rb +19 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/index.rb +19 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/new.rb +17 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/todo_params.rb +9 -0
- data/examples/basic_todo/app/controller_actions/todos_controller/update.rb +28 -0
- data/examples/basic_todo/app/controller_actions/users_controller/index.rb +19 -0
- data/examples/basic_todo/app/controllers/application_controller.rb +9 -0
- data/examples/basic_todo/app/controllers/home_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/sign_ins_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/sign_ups_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/todos/all_completed_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/todos/completed_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/todos_controller.rb +5 -0
- data/examples/basic_todo/app/controllers/users_controller.rb +5 -0
- data/examples/basic_todo/app/helpers/application_helper.rb +2 -0
- data/examples/basic_todo/app/mailers/.keep +0 -0
- data/examples/basic_todo/app/models/ability.rb +27 -0
- data/examples/basic_todo/app/models/role.rb +5 -0
- data/examples/basic_todo/app/models/todo.rb +5 -0
- data/examples/basic_todo/app/models/user.rb +12 -0
- data/examples/basic_todo/app/models/user_role.rb +5 -0
- data/examples/basic_todo/app/services/create_user_service.rb +26 -0
- data/examples/basic_todo/app/services/find_current_user_service.rb +29 -0
- data/examples/basic_todo/app/services/sign_in_service.rb +13 -0
- data/examples/basic_todo/app/services/sign_out_service.rb +12 -0
- data/examples/basic_todo/app/views/base_view.rb +18 -0
- data/examples/basic_todo/app/views/defaults/bad_request.html.slim +12 -0
- data/examples/basic_todo/app/views/defaults/bad_request_view.rb +15 -0
- data/examples/basic_todo/app/views/defaults/forbidden.html.slim +6 -0
- data/examples/basic_todo/app/views/defaults/forbidden_view.rb +14 -0
- data/examples/basic_todo/app/views/defaults/server_error.html.slim +12 -0
- data/examples/basic_todo/app/views/defaults/server_error_view.rb +14 -0
- data/examples/basic_todo/app/views/home/show.html.slim +5 -0
- data/examples/basic_todo/app/views/home/show_redirect.rb +5 -0
- data/examples/basic_todo/app/views/home/show_view.rb +7 -0
- data/examples/basic_todo/app/views/layouts/application.html.slim +18 -0
- data/examples/basic_todo/app/views/modules/_header.html.slim +13 -0
- data/examples/basic_todo/app/views/modules/header_view.rb +7 -0
- data/examples/basic_todo/app/views/sign_ins/new.html.slim +14 -0
- data/examples/basic_todo/app/views/sign_ins/new_view.rb +10 -0
- data/examples/basic_todo/app/views/sign_ups/new.html.slim +13 -0
- data/examples/basic_todo/app/views/sign_ups/new_view.rb +10 -0
- data/examples/basic_todo/app/views/todos/edit.html.slim +14 -0
- data/examples/basic_todo/app/views/todos/edit_view.rb +10 -0
- data/examples/basic_todo/app/views/todos/index.html.slim +12 -0
- data/examples/basic_todo/app/views/todos/index_redirect.rb +5 -0
- data/examples/basic_todo/app/views/todos/index_view/_todo.html.slim +8 -0
- data/examples/basic_todo/app/views/todos/index_view/todo_view.rb +28 -0
- data/examples/basic_todo/app/views/todos/index_view.rb +26 -0
- data/examples/basic_todo/app/views/todos/new.html.slim +14 -0
- data/examples/basic_todo/app/views/todos/new_view.rb +10 -0
- data/examples/basic_todo/app/views/todos/not_found.html.slim +6 -0
- data/examples/basic_todo/app/views/todos/not_found_view.rb +15 -0
- data/examples/basic_todo/app/views/users/index.html.slim +7 -0
- data/examples/basic_todo/app/views/users/index_redirect.rb +5 -0
- data/examples/basic_todo/app/views/users/index_view/_user.html.slim +2 -0
- data/examples/basic_todo/app/views/users/index_view/user_view.rb +22 -0
- data/examples/basic_todo/app/views/users/index_view.rb +26 -0
- data/examples/basic_todo/bin/bundle +3 -0
- data/examples/basic_todo/bin/rails +8 -0
- data/examples/basic_todo/bin/rake +8 -0
- data/examples/basic_todo/bin/rspec +7 -0
- data/examples/basic_todo/bin/spring +15 -0
- data/examples/basic_todo/config/application.rb +41 -0
- data/examples/basic_todo/config/boot.rb +4 -0
- data/examples/basic_todo/config/database.yml +25 -0
- data/examples/basic_todo/config/environment.rb +5 -0
- data/examples/basic_todo/config/environments/development.rb +37 -0
- data/examples/basic_todo/config/environments/production.rb +78 -0
- data/examples/basic_todo/config/environments/test.rb +39 -0
- data/examples/basic_todo/config/initializers/aldous.rb +3 -0
- data/examples/basic_todo/config/initializers/assets.rb +8 -0
- data/examples/basic_todo/config/initializers/backtrace_silencers.rb +7 -0
- data/examples/basic_todo/config/initializers/cookies_serializer.rb +3 -0
- data/examples/basic_todo/config/initializers/filter_parameter_logging.rb +4 -0
- data/examples/basic_todo/config/initializers/inflections.rb +16 -0
- data/examples/basic_todo/config/initializers/mime_types.rb +4 -0
- data/examples/basic_todo/config/initializers/session_store.rb +3 -0
- data/examples/basic_todo/config/initializers/wrap_parameters.rb +14 -0
- data/examples/basic_todo/config/locales/en.yml +23 -0
- data/examples/basic_todo/config/routes.rb +18 -0
- data/examples/basic_todo/config/secrets.yml +22 -0
- data/examples/basic_todo/config.ru +4 -0
- data/examples/basic_todo/db/migrate/20150226035524_create_user.rb +10 -0
- data/examples/basic_todo/db/migrate/20150227004411_create_todo.rb +11 -0
- data/examples/basic_todo/db/migrate/20150301110126_roles.rb +22 -0
- data/examples/basic_todo/db/migrate/20150301121923_add_user_disabled_column.rb +5 -0
- data/examples/basic_todo/db/schema.rb +45 -0
- data/examples/basic_todo/db/seeds.rb +7 -0
- data/examples/basic_todo/lib/assets/.keep +0 -0
- data/examples/basic_todo/lib/tasks/.keep +0 -0
- data/examples/basic_todo/log/.keep +0 -0
- data/examples/basic_todo/public/404.html +67 -0
- data/examples/basic_todo/public/422.html +67 -0
- data/examples/basic_todo/public/500.html +66 -0
- data/examples/basic_todo/public/favicon.ico +0 -0
- data/examples/basic_todo/public/robots.txt +5 -0
- data/examples/basic_todo/test/controllers/.keep +0 -0
- data/examples/basic_todo/test/fixtures/.keep +0 -0
- data/examples/basic_todo/test/helpers/.keep +0 -0
- data/examples/basic_todo/test/integration/.keep +0 -0
- data/examples/basic_todo/test/mailers/.keep +0 -0
- data/examples/basic_todo/test/models/.keep +0 -0
- data/examples/basic_todo/test/test_helper.rb +10 -0
- data/examples/basic_todo/vendor/assets/javascripts/.keep +0 -0
- data/examples/basic_todo/vendor/assets/stylesheets/.keep +0 -0
- data/lib/aldous/build_respondable_service.rb +23 -0
- data/lib/aldous/configuration.rb +18 -0
- data/lib/aldous/controller/action/precondition/wrapper.rb +32 -0
- data/lib/aldous/controller/action/precondition.rb +52 -0
- data/lib/aldous/controller/action/result_execution_service.rb +27 -0
- data/lib/aldous/controller/action/wrapper.rb +34 -0
- data/lib/aldous/controller/action_execution_service.rb +42 -0
- data/lib/aldous/controller/preconditions_execution_service.rb +32 -0
- data/lib/aldous/controller.rb +21 -0
- data/lib/aldous/controller_action.rb +63 -0
- data/lib/aldous/dummy_error_reporter.rb +9 -0
- data/lib/aldous/dummy_logger.rb +8 -0
- data/lib/aldous/errors/user_error.rb +6 -0
- data/lib/aldous/logging_wrapper.rb +16 -0
- data/lib/aldous/params.rb +34 -0
- data/lib/aldous/respondable/base.rb +32 -0
- data/lib/aldous/respondable/headable.rb +30 -0
- data/lib/aldous/respondable/redirectable.rb +38 -0
- data/lib/aldous/respondable/renderable.rb +50 -0
- data/lib/aldous/respondable/request_http_basic_authentication.rb +23 -0
- data/lib/aldous/respondable/send_data.rb +36 -0
- data/lib/aldous/respondable/shared/flash.rb +24 -0
- data/lib/aldous/service/result/base/predicate_methods_for_inheritance.rb +44 -0
- data/lib/aldous/service/result/base.rb +13 -0
- data/lib/aldous/service/result/failure.rb +11 -0
- data/lib/aldous/service/result/success.rb +11 -0
- data/lib/aldous/service/wrapper.rb +48 -0
- data/lib/aldous/service.rb +34 -0
- data/lib/aldous/simple_dto.rb +47 -0
- data/lib/aldous/stdout_logger.rb +9 -0
- data/lib/aldous/version.rb +3 -0
- data/lib/aldous/view/blank/atom_view.rb +12 -0
- data/lib/aldous/view/blank/html_view.rb +16 -0
- data/lib/aldous/view/blank/json_view.rb +16 -0
- data/lib/aldous.rb +40 -0
- data/spec/aldous/build_respondable_service_spec.rb +48 -0
- data/spec/aldous/configuration_spec.rb +15 -0
- data/spec/aldous/controller/action/precondition/wrapper_spec.rb +48 -0
- data/spec/aldous/controller/action/precondition_spec.rb +81 -0
- data/spec/aldous/controller/action/result_execution_service_spec.rb +43 -0
- data/spec/aldous/controller/action/wrapper_spec.rb +46 -0
- data/spec/aldous/controller/action_execution_service_spec.rb +79 -0
- data/spec/aldous/controller/preconditions_execution_service_spec.rb +45 -0
- data/spec/aldous/controller_action_spec.rb +97 -0
- data/spec/aldous/controller_spec.rb +25 -0
- data/spec/aldous/dummy_error_reporter_spec.rb +10 -0
- data/spec/aldous/dummy_logger_spec.rb +7 -0
- data/spec/aldous/logging_wrapper_spec.rb +55 -0
- data/spec/aldous/params_spec.rb +39 -0
- data/spec/aldous/respondable/base_spec.rb +11 -0
- data/spec/aldous/respondable/headable/head_action_spec.rb +17 -0
- data/spec/aldous/respondable/headable_spec.rb +20 -0
- data/spec/aldous/respondable/redirectable/redirect_action_spec.rb +34 -0
- data/spec/aldous/respondable/redirectable_spec.rb +26 -0
- data/spec/aldous/respondable/renderable/render_action_spec.rb +34 -0
- data/spec/aldous/respondable/renderable_spec.rb +46 -0
- data/spec/aldous/respondable/request_http_basic_authentication_spec.rb +0 -0
- data/spec/aldous/respondable/send_data/send_data_action_spec.rb +15 -0
- data/spec/aldous/respondable/send_data_spec.rb +30 -0
- data/spec/aldous/respondable/shared/flash_spec.rb +30 -0
- data/spec/aldous/service/result/failure_spec.rb +11 -0
- data/spec/aldous/service/result/success_spec.rb +11 -0
- data/spec/aldous/service/wrapper_spec.rb +110 -0
- data/spec/aldous/service_spec.rb +101 -0
- data/spec/aldous/simple_dto_spec.rb +40 -0
- data/spec/aldous/view/blank/atom_view_spec.rb +15 -0
- data/spec/aldous/view/blank/html_view_spec.rb +15 -0
- data/spec/aldous/view/blank/json_view_spec.rb +15 -0
- data/spec/spec_helper.rb +26 -0
- metadata +330 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
RSpec.describe Aldous::Controller::PreconditionsExecutionService do
|
2
|
+
let(:preconditions_execution_service) {described_class.new(action_wrapper, controller)}
|
3
|
+
|
4
|
+
let(:controller) {double "controller"}
|
5
|
+
let(:action_wrapper) {double 'action wrapper', preconditions: preconditions, controller_action: action}
|
6
|
+
let(:action) {double 'action'}
|
7
|
+
|
8
|
+
let(:preconditions) { [] }
|
9
|
+
|
10
|
+
describe "#perform" do
|
11
|
+
subject(:perform) {preconditions_execution_service.perform}
|
12
|
+
|
13
|
+
context "when no preconditions defined" do
|
14
|
+
it "returns an array of nils" do
|
15
|
+
expect(perform).to eq [nil, nil]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when preconditions defined" do
|
20
|
+
let(:preconditions) { [precondition_class] }
|
21
|
+
let(:precondition_class) {double 'precondition_class', build: precondition}
|
22
|
+
let(:precondition) {double "precondition", perform: nil}
|
23
|
+
|
24
|
+
it "builds the precondition with the controller_aciont" do
|
25
|
+
expect(precondition_class).to receive(:build).with(action)
|
26
|
+
perform
|
27
|
+
end
|
28
|
+
|
29
|
+
context "but they don't short-circuit execution" do
|
30
|
+
it "returns an array of nils" do
|
31
|
+
expect(perform).to eq [nil, nil]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "and they short-circuit execution" do
|
36
|
+
let(:precondition) {double "precondition", perform: precondition_result}
|
37
|
+
let(:precondition_result) {Aldous::Respondable::Renderable.new(nil, nil, nil)}
|
38
|
+
|
39
|
+
it "returns an array of precondition and precondition result" do
|
40
|
+
expect(perform).to eq [precondition, precondition_result]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
RSpec.describe Aldous::ControllerAction do
|
2
|
+
before do
|
3
|
+
class ExampleControllerAction < Aldous::ControllerAction
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
after do
|
8
|
+
Object.send :remove_const, 'ExampleControllerAction'
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:action) {ExampleControllerAction.new(controller)}
|
12
|
+
|
13
|
+
let(:controller) {double 'controller', view_context: view_context}
|
14
|
+
let(:view_context) {double "view_context"}
|
15
|
+
|
16
|
+
describe "::build" do
|
17
|
+
before do
|
18
|
+
allow(ExampleControllerAction).to receive(:new).and_return(action)
|
19
|
+
allow(Aldous::Controller::Action::Wrapper).to receive(:new)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "wraps a controller action instance" do
|
23
|
+
expect(Aldous::Controller::Action::Wrapper).to receive(:new).with(action)
|
24
|
+
ExampleControllerAction.build(controller)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "::perform" do
|
29
|
+
let(:wrapper) {double "wrapper", perform: nil}
|
30
|
+
|
31
|
+
before do
|
32
|
+
allow(ExampleControllerAction).to receive(:new).and_return(action)
|
33
|
+
allow(Aldous::Controller::Action::Wrapper).to receive(:new).and_return(wrapper)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "calls perform on the wrapper" do
|
37
|
+
expect(wrapper).to receive(:perform)
|
38
|
+
ExampleControllerAction.perform(controller)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "::inherited" do
|
43
|
+
context "a controller action instance" do
|
44
|
+
Aldous.configuration.controller_methods_exposed_to_action.each do |method_name|
|
45
|
+
it "responds to #{method_name}" do
|
46
|
+
expect(action).to respond_to method_name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#perform" do
|
53
|
+
it "raises an error since it should be overridden" do
|
54
|
+
expect{action.perform}.to raise_error
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#default_view_data" do
|
59
|
+
it "is a blank hash by default" do
|
60
|
+
expect(action.default_view_data).to eq Hash.new
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#preconditions" do
|
65
|
+
it "is a blank array by default" do
|
66
|
+
expect(action.preconditions).to eq []
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#default_error_respondable" do
|
71
|
+
it "is a blank html view by default" do
|
72
|
+
expect(action.default_error_respondable).to eq Aldous::View::Blank::HtmlView
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#build_view" do
|
77
|
+
before do
|
78
|
+
allow(Aldous::BuildRespondableService).to receive(:new).with(
|
79
|
+
view_context: view_context,
|
80
|
+
default_view_data: Hash.new,
|
81
|
+
respondable_class: respondable_class,
|
82
|
+
status: nil,
|
83
|
+
extra_data: extra_data
|
84
|
+
).and_return(build_respondable_service)
|
85
|
+
end
|
86
|
+
|
87
|
+
let(:respondable_class) {double "respondable_class"}
|
88
|
+
let(:extra_data) { {hello: 1} }
|
89
|
+
|
90
|
+
let(:build_respondable_service) {double "build_respondable_service", perform: nil}
|
91
|
+
|
92
|
+
it "executes the BuildRespondableService" do
|
93
|
+
expect(build_respondable_service).to receive(:perform)
|
94
|
+
action.build_view(respondable_class, extra_data)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
RSpec.describe Aldous::Controller do
|
2
|
+
before do
|
3
|
+
class ExampleController
|
4
|
+
include Aldous::Controller
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "::controller_actions" do
|
9
|
+
before do
|
10
|
+
ExampleController.controller_actions(:hello, :world)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "a controller instance" do
|
14
|
+
let(:controller) {ExampleController.new}
|
15
|
+
|
16
|
+
it "responds to :hello" do
|
17
|
+
expect(controller).to respond_to :hello
|
18
|
+
end
|
19
|
+
|
20
|
+
it "responds to :world" do
|
21
|
+
expect(controller).to respond_to :world
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
RSpec.describe Aldous::DummyErrorReporter do
|
2
|
+
describe "::report" do
|
3
|
+
let(:error) {RuntimeError.new('blah')}
|
4
|
+
let(:data) { Hash.new }
|
5
|
+
|
6
|
+
it "responds to the report method correctly" do
|
7
|
+
expect(described_class.report(error, data)).to eq nil
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
RSpec.describe Aldous::LoggingWrapper do
|
2
|
+
describe "::log" do
|
3
|
+
subject(:log) {described_class.log(error)}
|
4
|
+
let(:error) {"hello world"}
|
5
|
+
|
6
|
+
let(:aldous_config) {
|
7
|
+
double "aldous_config", error_reporter: error_reporter, logger: logger
|
8
|
+
}
|
9
|
+
let(:error_reporter) {double "error_reporter", report: nil}
|
10
|
+
let(:logger) {double "logger", info: nil}
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(Aldous).to receive(:config).and_return(aldous_config)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when error is a string" do
|
17
|
+
let(:error) {"hello world"}
|
18
|
+
|
19
|
+
it "reports the error" do
|
20
|
+
expect(error_reporter).to receive(:report).with(error)
|
21
|
+
log
|
22
|
+
end
|
23
|
+
|
24
|
+
it "logs the error" do
|
25
|
+
expect(logger).to receive(:info).with(error)
|
26
|
+
log
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when error is an error object" do
|
31
|
+
let(:error) {RuntimeError.new(message)}
|
32
|
+
let(:message) {"hello"}
|
33
|
+
let(:backtrace) {"foobar"}
|
34
|
+
|
35
|
+
before do
|
36
|
+
error.set_backtrace(backtrace)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "reports the error message" do
|
40
|
+
expect(error_reporter).to receive(:report).with(error)
|
41
|
+
log
|
42
|
+
end
|
43
|
+
|
44
|
+
it "logs the error message" do
|
45
|
+
expect(logger).to receive(:info).with(message)
|
46
|
+
log
|
47
|
+
end
|
48
|
+
|
49
|
+
it "logs the error backtrace" do
|
50
|
+
expect(logger).to receive(:info).with(backtrace)
|
51
|
+
log
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
RSpec.describe Aldous::Params do
|
2
|
+
describe "::build" do
|
3
|
+
it "instantiates a new params object" do
|
4
|
+
expect(described_class).to receive(:new)
|
5
|
+
described_class.build({})
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#fetch" do
|
10
|
+
let(:params_object) {described_class.new(params)}
|
11
|
+
let(:params) { {} }
|
12
|
+
|
13
|
+
context "when error occurs" do
|
14
|
+
before do
|
15
|
+
allow(params_object).to receive(:permitted_params).and_raise(RuntimeError.new)
|
16
|
+
allow(Aldous::LoggingWrapper).to receive(:log)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "logs the error" do
|
20
|
+
expect(Aldous::LoggingWrapper).to receive(:log)
|
21
|
+
params_object.fetch
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns nil" do
|
25
|
+
expect(params_object.fetch).to be_nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when no error occurs" do
|
30
|
+
before do
|
31
|
+
allow(params_object).to receive(:permitted_params).and_return('hello')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns the permitted_params" do
|
35
|
+
expect(params_object.fetch).to eq 'hello'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Base do
|
2
|
+
let(:status) {:foo}
|
3
|
+
let(:view_data) {double("view_data")}
|
4
|
+
let(:view_context) {double("view context")}
|
5
|
+
|
6
|
+
describe "::new" do
|
7
|
+
it "object can be instantiated with the right params" do
|
8
|
+
expect{described_class.new(status, view_data, view_context)}.to_not raise_error
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Headable::HeadAction do
|
2
|
+
subject(:respondable) {described_class.new(controller, status)}
|
3
|
+
|
4
|
+
let(:controller) {double 'controller'}
|
5
|
+
let(:status) {'hello'}
|
6
|
+
|
7
|
+
before do
|
8
|
+
allow(controller).to receive(:head).with(status)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#execute" do
|
12
|
+
it "calls head on controller with status" do
|
13
|
+
expect(controller).to receive(:head).with(status)
|
14
|
+
respondable.execute
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Headable do
|
2
|
+
subject(:headable) {described_class.new(status, view_data, view_context)}
|
3
|
+
|
4
|
+
let(:status) {:foo}
|
5
|
+
let(:view_data) {double("view_data")}
|
6
|
+
let(:view_context) {double("view context")}
|
7
|
+
|
8
|
+
describe "::action" do
|
9
|
+
let(:controller) {double("controller")}
|
10
|
+
|
11
|
+
it "returns a head response action object" do
|
12
|
+
expect(headable.action(controller)).to be_kind_of Aldous::Respondable::Headable::HeadAction
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'creates a head response action with the relevant parameters' do
|
16
|
+
expect(Aldous::Respondable::Headable::HeadAction).to receive(:new).with(controller, status)
|
17
|
+
headable.action(controller)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Redirectable::RedirectAction do
|
2
|
+
subject(:respondable) {described_class.new(location, controller, view_data, status)}
|
3
|
+
|
4
|
+
let(:location) {"hello"}
|
5
|
+
let(:controller) {double 'controller', redirect_to: nil, flash: flash }
|
6
|
+
let(:view_data) {"blah"}
|
7
|
+
let(:response_status) {'world'}
|
8
|
+
let(:status) { :found }
|
9
|
+
|
10
|
+
let(:flash) { double("flash") }
|
11
|
+
let(:flash_object) { instance_double Aldous::Respondable::Shared::Flash, set_error: nil }
|
12
|
+
|
13
|
+
|
14
|
+
describe "#execute" do
|
15
|
+
before do
|
16
|
+
allow(Aldous::Respondable::Shared::Flash).to receive(:new){ flash_object }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "calls redirect_to on controller with the relevant options" do
|
20
|
+
expect(controller).to receive(:redirect_to).with(location, {status: status})
|
21
|
+
respondable.execute
|
22
|
+
end
|
23
|
+
|
24
|
+
it "tries to set flash" do
|
25
|
+
expect(Aldous::Respondable::Shared::Flash).to receive(:new).with(view_data, flash)
|
26
|
+
respondable.execute
|
27
|
+
end
|
28
|
+
|
29
|
+
it "calls set_error on flash object" do
|
30
|
+
expect(flash_object).to receive(:set_error)
|
31
|
+
respondable.execute
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Redirectable do
|
2
|
+
class Aldous::Respondable::Redirectable::Dummy < described_class
|
3
|
+
def location
|
4
|
+
'hello'
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
subject(:redirectable) {Aldous::Respondable::Redirectable::Dummy.new(status, view_data, view_context)}
|
9
|
+
|
10
|
+
let(:status) {:foo}
|
11
|
+
let(:view_data) {double("view_data")}
|
12
|
+
let(:view_context) {double("view context")}
|
13
|
+
|
14
|
+
describe "::action" do
|
15
|
+
let(:controller) {double("controller")}
|
16
|
+
|
17
|
+
it "returns a redirect response action object" do
|
18
|
+
expect(redirectable.action(controller)).to be_kind_of Aldous::Respondable::Redirectable::RedirectAction
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'creates a redirect response action with the relevant parameters' do
|
22
|
+
expect(Aldous::Respondable::Redirectable::RedirectAction).to receive(:new).with(redirectable.location, controller, view_data, status)
|
23
|
+
redirectable.action(controller)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Renderable::RenderAction do
|
2
|
+
subject(:respondable) {described_class.new(template, status, controller, view_data)}
|
3
|
+
|
4
|
+
let(:status) {:foo}
|
5
|
+
let(:template) { {hello: 'world'} }
|
6
|
+
let(:controller) {double 'controller', render: nil, flash: flash }
|
7
|
+
let(:view_data) {"blah"}
|
8
|
+
let(:response_status) {'world'}
|
9
|
+
|
10
|
+
let(:flash) { double("flash", now: flash_now) }
|
11
|
+
let(:flash_now) { double("flash_now") }
|
12
|
+
let(:flash_object) { instance_double Aldous::Respondable::Shared::Flash, set_error: nil }
|
13
|
+
|
14
|
+
describe "#execute" do
|
15
|
+
before do
|
16
|
+
allow(Aldous::Respondable::Shared::Flash).to receive(:new){ flash_object }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "calls render on controller with the relevant options" do
|
20
|
+
expect(controller).to receive(:render).with(template.merge(status: status))
|
21
|
+
respondable.execute
|
22
|
+
end
|
23
|
+
|
24
|
+
it "tries to set flash" do
|
25
|
+
expect(Aldous::Respondable::Shared::Flash).to receive(:new).with(view_data, flash_now)
|
26
|
+
respondable.execute
|
27
|
+
end
|
28
|
+
|
29
|
+
it "calls set_error on flash object" do
|
30
|
+
expect(flash_object).to receive(:set_error)
|
31
|
+
respondable.execute
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Renderable do
|
2
|
+
class Aldous::Respondable::Renderable::Dummy < described_class
|
3
|
+
def template_data
|
4
|
+
{
|
5
|
+
locals: {hello: 1}
|
6
|
+
}
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_template_locals
|
10
|
+
{
|
11
|
+
hello: 2
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
subject(:renderable) {Aldous::Respondable::Renderable::Dummy.new(status, view_data, view_context)}
|
17
|
+
|
18
|
+
let(:status) {:foo}
|
19
|
+
let(:view_data) {double("view_data")}
|
20
|
+
let(:view_context) {double("view context")}
|
21
|
+
|
22
|
+
describe "#action" do
|
23
|
+
let(:controller) {double("controller")}
|
24
|
+
|
25
|
+
it "returns a render response action object" do
|
26
|
+
expect(renderable.action(controller)).to be_kind_of Aldous::Respondable::Renderable::RenderAction
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates a redirect response action with the relevant parameters' do
|
30
|
+
expect(Aldous::Respondable::Renderable::RenderAction).to receive(:new).with(renderable.template, status, controller, view_data)
|
31
|
+
renderable.action(controller)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#template" do
|
36
|
+
subject(:renderable) {Aldous::Respondable::Renderable::Dummy.new(status, view_data, view_context)}
|
37
|
+
|
38
|
+
it "overrides the default locals with the template locals" do
|
39
|
+
expect(renderable.template).to eq({locals: {hello: 1}})
|
40
|
+
end
|
41
|
+
|
42
|
+
it "overrides the template locals with the provided locals" do
|
43
|
+
expect(renderable.template(hello: 3)).to eq({locals: {hello: 3}})
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::SendData::SendDataAction do
|
2
|
+
subject(:respondable) {described_class.new(data, options, controller, result)}
|
3
|
+
|
4
|
+
let(:data) { 'hello' }
|
5
|
+
let(:options) {'world'}
|
6
|
+
let(:controller) {double 'controller', render: nil}
|
7
|
+
let(:result) {"blah"}
|
8
|
+
|
9
|
+
describe "#execute" do
|
10
|
+
it "calls render on controller with the relevant options" do
|
11
|
+
expect(controller).to receive(:send_data).with(data, options)
|
12
|
+
respondable.execute
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::SendData do
|
2
|
+
class Aldous::Respondable::SendData::Dummy < described_class
|
3
|
+
def data
|
4
|
+
'hello'
|
5
|
+
end
|
6
|
+
|
7
|
+
def options
|
8
|
+
'world'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
subject(:send_data) {Aldous::Respondable::SendData::Dummy.new(status, view_data, view_context)}
|
13
|
+
|
14
|
+
let(:status) {:foo}
|
15
|
+
let(:view_data) {double("view_data")}
|
16
|
+
let(:view_context) {double("view context")}
|
17
|
+
|
18
|
+
describe "::action" do
|
19
|
+
let(:controller) {double("controller")}
|
20
|
+
|
21
|
+
it "returns a send_data response action object" do
|
22
|
+
expect(send_data.action(controller)).to be_kind_of Aldous::Respondable::SendData::SendDataAction
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'creates a send_data response action with the relevant parameters' do
|
26
|
+
expect(Aldous::Respondable::SendData::SendDataAction).to receive(:new).with(send_data.data, send_data.options, controller, view_data)
|
27
|
+
send_data.action(controller)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec.describe Aldous::Respondable::Shared::Flash do
|
2
|
+
let(:flash) {described_class.new(result, flash_container)}
|
3
|
+
|
4
|
+
let(:controller) {double 'controller', flash: flash_container}
|
5
|
+
let(:result) {double 'result', errors: errors}
|
6
|
+
let(:errors) {['1', '2']}
|
7
|
+
let(:flash_container) {double 'flash container', now: flash_now}
|
8
|
+
let(:flash_now) { {} }
|
9
|
+
|
10
|
+
describe "#set_error" do
|
11
|
+
context "when errors exist" do
|
12
|
+
let(:flash_container) { {} }
|
13
|
+
|
14
|
+
it "sets the error on the flash container" do
|
15
|
+
flash.set_error
|
16
|
+
expect(flash_container[:error]).to eq '1'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when errors don't exist" do
|
21
|
+
let(:errors) {[]}
|
22
|
+
let(:flash_container) { {} }
|
23
|
+
|
24
|
+
it "doesn't set the error on the flash container" do
|
25
|
+
flash.set_error
|
26
|
+
expect(flash_container[:error]).to eq nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|