aldous 1.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.
- 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
|