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.
Files changed (212) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.irbrc +3 -0
  4. data/.rspec +3 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +591 -0
  9. data/Rakefile +1 -0
  10. data/aldous.gemspec +24 -0
  11. data/examples/basic_todo/.foreman +1 -0
  12. data/examples/basic_todo/.gitignore +16 -0
  13. data/examples/basic_todo/.rspec +3 -0
  14. data/examples/basic_todo/.ruby-version +2 -0
  15. data/examples/basic_todo/Gemfile +52 -0
  16. data/examples/basic_todo/Procfile +1 -0
  17. data/examples/basic_todo/README.rdoc +28 -0
  18. data/examples/basic_todo/Rakefile +6 -0
  19. data/examples/basic_todo/app/assets/images/.keep +0 -0
  20. data/examples/basic_todo/app/assets/javascripts/application.js +13 -0
  21. data/examples/basic_todo/app/assets/stylesheets/application.css +15 -0
  22. data/examples/basic_todo/app/controller_actions/base_action.rb +24 -0
  23. data/examples/basic_todo/app/controller_actions/base_precondition.rb +2 -0
  24. data/examples/basic_todo/app/controller_actions/home_controller/show.rb +8 -0
  25. data/examples/basic_todo/app/controller_actions/shared/ensure_user_not_disabled_precondition.rb +9 -0
  26. data/examples/basic_todo/app/controller_actions/sign_ins_controller/create.rb +24 -0
  27. data/examples/basic_todo/app/controller_actions/sign_ins_controller/destroy.rb +9 -0
  28. data/examples/basic_todo/app/controller_actions/sign_ins_controller/new.rb +7 -0
  29. data/examples/basic_todo/app/controller_actions/sign_ins_controller/user_params.rb +9 -0
  30. data/examples/basic_todo/app/controller_actions/sign_ups_controller/create.rb +23 -0
  31. data/examples/basic_todo/app/controller_actions/sign_ups_controller/new.rb +7 -0
  32. data/examples/basic_todo/app/controller_actions/sign_ups_controller/user_params.rb +9 -0
  33. data/examples/basic_todo/app/controller_actions/todos/all_completed_controller/destroy.rb +17 -0
  34. data/examples/basic_todo/app/controller_actions/todos/completed_controller/create.rb +29 -0
  35. data/examples/basic_todo/app/controller_actions/todos_controller/create.rb +26 -0
  36. data/examples/basic_todo/app/controller_actions/todos_controller/destroy.rb +21 -0
  37. data/examples/basic_todo/app/controller_actions/todos_controller/edit.rb +19 -0
  38. data/examples/basic_todo/app/controller_actions/todos_controller/index.rb +19 -0
  39. data/examples/basic_todo/app/controller_actions/todos_controller/new.rb +17 -0
  40. data/examples/basic_todo/app/controller_actions/todos_controller/todo_params.rb +9 -0
  41. data/examples/basic_todo/app/controller_actions/todos_controller/update.rb +28 -0
  42. data/examples/basic_todo/app/controller_actions/users_controller/index.rb +19 -0
  43. data/examples/basic_todo/app/controllers/application_controller.rb +9 -0
  44. data/examples/basic_todo/app/controllers/home_controller.rb +5 -0
  45. data/examples/basic_todo/app/controllers/sign_ins_controller.rb +5 -0
  46. data/examples/basic_todo/app/controllers/sign_ups_controller.rb +5 -0
  47. data/examples/basic_todo/app/controllers/todos/all_completed_controller.rb +5 -0
  48. data/examples/basic_todo/app/controllers/todos/completed_controller.rb +5 -0
  49. data/examples/basic_todo/app/controllers/todos_controller.rb +5 -0
  50. data/examples/basic_todo/app/controllers/users_controller.rb +5 -0
  51. data/examples/basic_todo/app/helpers/application_helper.rb +2 -0
  52. data/examples/basic_todo/app/mailers/.keep +0 -0
  53. data/examples/basic_todo/app/models/ability.rb +27 -0
  54. data/examples/basic_todo/app/models/role.rb +5 -0
  55. data/examples/basic_todo/app/models/todo.rb +5 -0
  56. data/examples/basic_todo/app/models/user.rb +12 -0
  57. data/examples/basic_todo/app/models/user_role.rb +5 -0
  58. data/examples/basic_todo/app/services/create_user_service.rb +26 -0
  59. data/examples/basic_todo/app/services/find_current_user_service.rb +29 -0
  60. data/examples/basic_todo/app/services/sign_in_service.rb +13 -0
  61. data/examples/basic_todo/app/services/sign_out_service.rb +12 -0
  62. data/examples/basic_todo/app/views/base_view.rb +18 -0
  63. data/examples/basic_todo/app/views/defaults/bad_request.html.slim +12 -0
  64. data/examples/basic_todo/app/views/defaults/bad_request_view.rb +15 -0
  65. data/examples/basic_todo/app/views/defaults/forbidden.html.slim +6 -0
  66. data/examples/basic_todo/app/views/defaults/forbidden_view.rb +14 -0
  67. data/examples/basic_todo/app/views/defaults/server_error.html.slim +12 -0
  68. data/examples/basic_todo/app/views/defaults/server_error_view.rb +14 -0
  69. data/examples/basic_todo/app/views/home/show.html.slim +5 -0
  70. data/examples/basic_todo/app/views/home/show_redirect.rb +5 -0
  71. data/examples/basic_todo/app/views/home/show_view.rb +7 -0
  72. data/examples/basic_todo/app/views/layouts/application.html.slim +18 -0
  73. data/examples/basic_todo/app/views/modules/_header.html.slim +13 -0
  74. data/examples/basic_todo/app/views/modules/header_view.rb +7 -0
  75. data/examples/basic_todo/app/views/sign_ins/new.html.slim +14 -0
  76. data/examples/basic_todo/app/views/sign_ins/new_view.rb +10 -0
  77. data/examples/basic_todo/app/views/sign_ups/new.html.slim +13 -0
  78. data/examples/basic_todo/app/views/sign_ups/new_view.rb +10 -0
  79. data/examples/basic_todo/app/views/todos/edit.html.slim +14 -0
  80. data/examples/basic_todo/app/views/todos/edit_view.rb +10 -0
  81. data/examples/basic_todo/app/views/todos/index.html.slim +12 -0
  82. data/examples/basic_todo/app/views/todos/index_redirect.rb +5 -0
  83. data/examples/basic_todo/app/views/todos/index_view/_todo.html.slim +8 -0
  84. data/examples/basic_todo/app/views/todos/index_view/todo_view.rb +28 -0
  85. data/examples/basic_todo/app/views/todos/index_view.rb +26 -0
  86. data/examples/basic_todo/app/views/todos/new.html.slim +14 -0
  87. data/examples/basic_todo/app/views/todos/new_view.rb +10 -0
  88. data/examples/basic_todo/app/views/todos/not_found.html.slim +6 -0
  89. data/examples/basic_todo/app/views/todos/not_found_view.rb +15 -0
  90. data/examples/basic_todo/app/views/users/index.html.slim +7 -0
  91. data/examples/basic_todo/app/views/users/index_redirect.rb +5 -0
  92. data/examples/basic_todo/app/views/users/index_view/_user.html.slim +2 -0
  93. data/examples/basic_todo/app/views/users/index_view/user_view.rb +22 -0
  94. data/examples/basic_todo/app/views/users/index_view.rb +26 -0
  95. data/examples/basic_todo/bin/bundle +3 -0
  96. data/examples/basic_todo/bin/rails +8 -0
  97. data/examples/basic_todo/bin/rake +8 -0
  98. data/examples/basic_todo/bin/rspec +7 -0
  99. data/examples/basic_todo/bin/spring +15 -0
  100. data/examples/basic_todo/config/application.rb +41 -0
  101. data/examples/basic_todo/config/boot.rb +4 -0
  102. data/examples/basic_todo/config/database.yml +25 -0
  103. data/examples/basic_todo/config/environment.rb +5 -0
  104. data/examples/basic_todo/config/environments/development.rb +37 -0
  105. data/examples/basic_todo/config/environments/production.rb +78 -0
  106. data/examples/basic_todo/config/environments/test.rb +39 -0
  107. data/examples/basic_todo/config/initializers/aldous.rb +3 -0
  108. data/examples/basic_todo/config/initializers/assets.rb +8 -0
  109. data/examples/basic_todo/config/initializers/backtrace_silencers.rb +7 -0
  110. data/examples/basic_todo/config/initializers/cookies_serializer.rb +3 -0
  111. data/examples/basic_todo/config/initializers/filter_parameter_logging.rb +4 -0
  112. data/examples/basic_todo/config/initializers/inflections.rb +16 -0
  113. data/examples/basic_todo/config/initializers/mime_types.rb +4 -0
  114. data/examples/basic_todo/config/initializers/session_store.rb +3 -0
  115. data/examples/basic_todo/config/initializers/wrap_parameters.rb +14 -0
  116. data/examples/basic_todo/config/locales/en.yml +23 -0
  117. data/examples/basic_todo/config/routes.rb +18 -0
  118. data/examples/basic_todo/config/secrets.yml +22 -0
  119. data/examples/basic_todo/config.ru +4 -0
  120. data/examples/basic_todo/db/migrate/20150226035524_create_user.rb +10 -0
  121. data/examples/basic_todo/db/migrate/20150227004411_create_todo.rb +11 -0
  122. data/examples/basic_todo/db/migrate/20150301110126_roles.rb +22 -0
  123. data/examples/basic_todo/db/migrate/20150301121923_add_user_disabled_column.rb +5 -0
  124. data/examples/basic_todo/db/schema.rb +45 -0
  125. data/examples/basic_todo/db/seeds.rb +7 -0
  126. data/examples/basic_todo/lib/assets/.keep +0 -0
  127. data/examples/basic_todo/lib/tasks/.keep +0 -0
  128. data/examples/basic_todo/log/.keep +0 -0
  129. data/examples/basic_todo/public/404.html +67 -0
  130. data/examples/basic_todo/public/422.html +67 -0
  131. data/examples/basic_todo/public/500.html +66 -0
  132. data/examples/basic_todo/public/favicon.ico +0 -0
  133. data/examples/basic_todo/public/robots.txt +5 -0
  134. data/examples/basic_todo/test/controllers/.keep +0 -0
  135. data/examples/basic_todo/test/fixtures/.keep +0 -0
  136. data/examples/basic_todo/test/helpers/.keep +0 -0
  137. data/examples/basic_todo/test/integration/.keep +0 -0
  138. data/examples/basic_todo/test/mailers/.keep +0 -0
  139. data/examples/basic_todo/test/models/.keep +0 -0
  140. data/examples/basic_todo/test/test_helper.rb +10 -0
  141. data/examples/basic_todo/vendor/assets/javascripts/.keep +0 -0
  142. data/examples/basic_todo/vendor/assets/stylesheets/.keep +0 -0
  143. data/lib/aldous/build_respondable_service.rb +23 -0
  144. data/lib/aldous/configuration.rb +18 -0
  145. data/lib/aldous/controller/action/precondition/wrapper.rb +32 -0
  146. data/lib/aldous/controller/action/precondition.rb +52 -0
  147. data/lib/aldous/controller/action/result_execution_service.rb +27 -0
  148. data/lib/aldous/controller/action/wrapper.rb +34 -0
  149. data/lib/aldous/controller/action_execution_service.rb +42 -0
  150. data/lib/aldous/controller/preconditions_execution_service.rb +32 -0
  151. data/lib/aldous/controller.rb +21 -0
  152. data/lib/aldous/controller_action.rb +63 -0
  153. data/lib/aldous/dummy_error_reporter.rb +9 -0
  154. data/lib/aldous/dummy_logger.rb +8 -0
  155. data/lib/aldous/errors/user_error.rb +6 -0
  156. data/lib/aldous/logging_wrapper.rb +16 -0
  157. data/lib/aldous/params.rb +34 -0
  158. data/lib/aldous/respondable/base.rb +32 -0
  159. data/lib/aldous/respondable/headable.rb +30 -0
  160. data/lib/aldous/respondable/redirectable.rb +38 -0
  161. data/lib/aldous/respondable/renderable.rb +50 -0
  162. data/lib/aldous/respondable/request_http_basic_authentication.rb +23 -0
  163. data/lib/aldous/respondable/send_data.rb +36 -0
  164. data/lib/aldous/respondable/shared/flash.rb +24 -0
  165. data/lib/aldous/service/result/base/predicate_methods_for_inheritance.rb +44 -0
  166. data/lib/aldous/service/result/base.rb +13 -0
  167. data/lib/aldous/service/result/failure.rb +11 -0
  168. data/lib/aldous/service/result/success.rb +11 -0
  169. data/lib/aldous/service/wrapper.rb +48 -0
  170. data/lib/aldous/service.rb +34 -0
  171. data/lib/aldous/simple_dto.rb +47 -0
  172. data/lib/aldous/stdout_logger.rb +9 -0
  173. data/lib/aldous/version.rb +3 -0
  174. data/lib/aldous/view/blank/atom_view.rb +12 -0
  175. data/lib/aldous/view/blank/html_view.rb +16 -0
  176. data/lib/aldous/view/blank/json_view.rb +16 -0
  177. data/lib/aldous.rb +40 -0
  178. data/spec/aldous/build_respondable_service_spec.rb +48 -0
  179. data/spec/aldous/configuration_spec.rb +15 -0
  180. data/spec/aldous/controller/action/precondition/wrapper_spec.rb +48 -0
  181. data/spec/aldous/controller/action/precondition_spec.rb +81 -0
  182. data/spec/aldous/controller/action/result_execution_service_spec.rb +43 -0
  183. data/spec/aldous/controller/action/wrapper_spec.rb +46 -0
  184. data/spec/aldous/controller/action_execution_service_spec.rb +79 -0
  185. data/spec/aldous/controller/preconditions_execution_service_spec.rb +45 -0
  186. data/spec/aldous/controller_action_spec.rb +97 -0
  187. data/spec/aldous/controller_spec.rb +25 -0
  188. data/spec/aldous/dummy_error_reporter_spec.rb +10 -0
  189. data/spec/aldous/dummy_logger_spec.rb +7 -0
  190. data/spec/aldous/logging_wrapper_spec.rb +55 -0
  191. data/spec/aldous/params_spec.rb +39 -0
  192. data/spec/aldous/respondable/base_spec.rb +11 -0
  193. data/spec/aldous/respondable/headable/head_action_spec.rb +17 -0
  194. data/spec/aldous/respondable/headable_spec.rb +20 -0
  195. data/spec/aldous/respondable/redirectable/redirect_action_spec.rb +34 -0
  196. data/spec/aldous/respondable/redirectable_spec.rb +26 -0
  197. data/spec/aldous/respondable/renderable/render_action_spec.rb +34 -0
  198. data/spec/aldous/respondable/renderable_spec.rb +46 -0
  199. data/spec/aldous/respondable/request_http_basic_authentication_spec.rb +0 -0
  200. data/spec/aldous/respondable/send_data/send_data_action_spec.rb +15 -0
  201. data/spec/aldous/respondable/send_data_spec.rb +30 -0
  202. data/spec/aldous/respondable/shared/flash_spec.rb +30 -0
  203. data/spec/aldous/service/result/failure_spec.rb +11 -0
  204. data/spec/aldous/service/result/success_spec.rb +11 -0
  205. data/spec/aldous/service/wrapper_spec.rb +110 -0
  206. data/spec/aldous/service_spec.rb +101 -0
  207. data/spec/aldous/simple_dto_spec.rb +40 -0
  208. data/spec/aldous/view/blank/atom_view_spec.rb +15 -0
  209. data/spec/aldous/view/blank/html_view_spec.rb +15 -0
  210. data/spec/aldous/view/blank/json_view_spec.rb +15 -0
  211. data/spec/spec_helper.rb +26 -0
  212. 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,7 @@
1
+ RSpec.describe Aldous::DummyLogger do
2
+ describe "::info" do
3
+ it "responds to the info method correctly" do
4
+ expect(described_class.info('blah')).to eq nil
5
+ end
6
+ end
7
+ 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
@@ -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
@@ -0,0 +1,11 @@
1
+ RSpec.describe Aldous::Service::Result::Failure do
2
+ subject(:result) {described_class.new}
3
+
4
+ describe "#failure?" do
5
+ it {expect(result.failure?).to eq true}
6
+ end
7
+
8
+ describe "#success?" do
9
+ it {expect(result.success?).to eq false}
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ RSpec.describe Aldous::Service::Result::Success do
2
+ subject(:result) {described_class.new}
3
+
4
+ describe "#failure?" do
5
+ it {expect(result.failure?).to eq false}
6
+ end
7
+
8
+ describe "#success?" do
9
+ it {expect(result.success?).to eq true}
10
+ end
11
+ end