hanami 2.0.3 → 2.1.0.beta2
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 +4 -4
- data/CHANGELOG.md +37 -2
- data/LICENSE.md +1 -1
- data/README.md +26 -10
- data/hanami.gemspec +2 -2
- data/lib/hanami/app.rb +5 -0
- data/lib/hanami/config/actions.rb +4 -11
- data/lib/hanami/config/assets.rb +84 -0
- data/lib/hanami/config/null_config.rb +3 -0
- data/lib/hanami/config/views.rb +0 -4
- data/lib/hanami/config.rb +71 -5
- data/lib/hanami/extensions/action/slice_configured_action.rb +15 -7
- data/lib/hanami/extensions/action.rb +8 -6
- data/lib/hanami/extensions/router/errors.rb +58 -0
- data/lib/hanami/extensions/view/context.rb +129 -60
- data/lib/hanami/extensions/view/part.rb +26 -0
- data/lib/hanami/extensions/view/scope.rb +26 -0
- data/lib/hanami/extensions/view/slice_configured_context.rb +0 -2
- data/lib/hanami/extensions/view/slice_configured_helpers.rb +44 -0
- data/lib/hanami/extensions/view/slice_configured_view.rb +106 -21
- data/lib/hanami/extensions/view/standard_helpers.rb +18 -0
- data/lib/hanami/extensions.rb +10 -3
- data/lib/hanami/helpers/assets_helper.rb +752 -0
- data/lib/hanami/helpers/form_helper/form_builder.rb +1391 -0
- data/lib/hanami/helpers/form_helper/values.rb +75 -0
- data/lib/hanami/helpers/form_helper.rb +213 -0
- data/lib/hanami/middleware/assets.rb +21 -0
- data/lib/hanami/middleware/public_errors_app.rb +75 -0
- data/lib/hanami/middleware/render_errors.rb +90 -0
- data/lib/hanami/providers/assets.rb +44 -0
- data/lib/hanami/rake_tasks.rb +19 -18
- data/lib/hanami/settings.rb +1 -1
- data/lib/hanami/slice.rb +48 -2
- data/lib/hanami/slice_configurable.rb +3 -2
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami/web/rack_logger.rb +1 -1
- data/lib/hanami.rb +3 -3
- data/spec/integration/action/view_rendering/view_context_spec.rb +221 -0
- data/spec/integration/action/view_rendering_spec.rb +0 -18
- data/spec/integration/assets/assets_spec.rb +101 -0
- data/spec/integration/assets/serve_static_assets_spec.rb +152 -0
- data/spec/integration/logging/exception_logging_spec.rb +115 -0
- data/spec/integration/logging/notifications_spec.rb +68 -0
- data/spec/integration/logging/request_logging_spec.rb +128 -0
- data/spec/integration/rack_app/middleware_spec.rb +22 -22
- data/spec/integration/rack_app/rack_app_spec.rb +3 -220
- data/spec/integration/rake_tasks_spec.rb +107 -0
- data/spec/integration/view/config/default_context_spec.rb +149 -0
- data/spec/integration/view/{inflector_spec.rb → config/inflector_spec.rb} +1 -1
- data/spec/integration/view/config/part_class_spec.rb +147 -0
- data/spec/integration/view/config/part_namespace_spec.rb +103 -0
- data/spec/integration/view/config/paths_spec.rb +119 -0
- data/spec/integration/view/config/scope_class_spec.rb +147 -0
- data/spec/integration/view/config/scope_namespace_spec.rb +103 -0
- data/spec/integration/view/config/template_spec.rb +38 -0
- data/spec/integration/view/context/assets_spec.rb +3 -9
- data/spec/integration/view/context/request_spec.rb +3 -7
- data/spec/integration/view/helpers/form_helper_spec.rb +174 -0
- data/spec/integration/view/helpers/part_helpers_spec.rb +124 -0
- data/spec/integration/view/helpers/scope_helpers_spec.rb +84 -0
- data/spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb +162 -0
- data/spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb +119 -0
- data/spec/integration/view/slice_configuration_spec.rb +9 -9
- data/spec/integration/web/render_detailed_errors_spec.rb +107 -0
- data/spec/integration/web/render_errors_spec.rb +242 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/app_integration.rb +46 -2
- data/spec/support/matchers.rb +32 -0
- data/spec/unit/hanami/config/actions/content_security_policy_spec.rb +24 -36
- data/spec/unit/hanami/config/actions/csrf_protection_spec.rb +4 -3
- data/spec/unit/hanami/config/actions/default_values_spec.rb +3 -6
- data/spec/unit/hanami/config/render_detailed_errors_spec.rb +25 -0
- data/spec/unit/hanami/config/render_errors_spec.rb +25 -0
- data/spec/unit/hanami/config/views_spec.rb +0 -18
- data/spec/unit/hanami/env_spec.rb +11 -25
- data/spec/unit/hanami/extensions/view/context_spec.rb +59 -0
- data/spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb +109 -0
- data/spec/unit/hanami/helpers/assets_helper/audio_tag_spec.rb +132 -0
- data/spec/unit/hanami/helpers/assets_helper/favicon_link_tag_spec.rb +91 -0
- data/spec/unit/hanami/helpers/assets_helper/image_tag_spec.rb +92 -0
- data/spec/unit/hanami/helpers/assets_helper/javascript_tag_spec.rb +143 -0
- data/spec/unit/hanami/helpers/assets_helper/stylesheet_link_tag_spec.rb +126 -0
- data/spec/unit/hanami/helpers/assets_helper/video_tag_spec.rb +132 -0
- data/spec/unit/hanami/helpers/form_helper_spec.rb +2826 -0
- data/spec/unit/hanami/router/errors/not_allowed_error_spec.rb +27 -0
- data/spec/unit/hanami/router/errors/not_found_error_spec.rb +22 -0
- data/spec/unit/hanami/slice_configurable_spec.rb +18 -0
- data/spec/unit/hanami/version_spec.rb +1 -1
- data/spec/unit/hanami/web/rack_logger_spec.rb +1 -1
- metadata +95 -35
- data/lib/hanami/assets/app_config.rb +0 -61
- data/lib/hanami/assets/config.rb +0 -53
- data/spec/integration/action/view_integration_spec.rb +0 -165
- data/spec/integration/view/part_namespace_spec.rb +0 -96
- data/spec/integration/view/path_spec.rb +0 -56
- data/spec/integration/view/template_spec.rb +0 -68
- data/spec/isolation/hanami/application/already_configured_spec.rb +0 -19
- data/spec/isolation/hanami/application/inherit_anonymous_class_spec.rb +0 -10
- data/spec/isolation/hanami/application/inherit_concrete_class_spec.rb +0 -14
- data/spec/isolation/hanami/application/not_configured_spec.rb +0 -9
- data/spec/isolation/hanami/application/routes/configured_spec.rb +0 -44
- data/spec/isolation/hanami/application/routes/not_configured_spec.rb +0 -16
- data/spec/isolation/hanami/boot/success_spec.rb +0 -50
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/router"
|
|
4
|
+
require "hanami/extensions/router/errors"
|
|
5
|
+
|
|
6
|
+
RSpec.describe(Hanami::Router::NotAllowedError) do
|
|
7
|
+
subject(:error) { described_class.new(env, allowed_methods) }
|
|
8
|
+
|
|
9
|
+
let(:env) { Rack::MockRequest.env_for("http://example.com/example", method: "POST") }
|
|
10
|
+
let(:allowed_methods) { ["GET", "HEAD"] }
|
|
11
|
+
|
|
12
|
+
it "is a Hanami::Router::Error" do
|
|
13
|
+
expect(error.class).to be < Hanami::Router::Error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "returns a relevant message" do
|
|
17
|
+
expect(error.to_s).to eq "Only GET, HEAD requests are allowed at /example"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "returns the env" do
|
|
21
|
+
expect(error.env).to be env
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns the allowed methods" do
|
|
25
|
+
expect(error.allowed_methods).to be allowed_methods
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/router"
|
|
4
|
+
require "hanami/extensions/router/errors"
|
|
5
|
+
|
|
6
|
+
RSpec.describe(Hanami::Router::NotFoundError) do
|
|
7
|
+
subject(:error) { described_class.new(env) }
|
|
8
|
+
|
|
9
|
+
let(:env) { Rack::MockRequest.env_for("http://example.com/example", method: "GET") }
|
|
10
|
+
|
|
11
|
+
it "is a Hanami::Router::Error" do
|
|
12
|
+
expect(error.class).to be < Hanami::Router::Error
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "returns a relevant message" do
|
|
16
|
+
expect(error.to_s).to eq "No route found for GET /example"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns the env" do
|
|
20
|
+
expect(error.env).to be env
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -72,6 +72,24 @@ RSpec.describe Hanami::SliceConfigurable, :app_integration do
|
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
context "subclass inside slice with name overlapping another slice" do
|
|
76
|
+
let(:app_modules) { super() << :ExternalAdmin }
|
|
77
|
+
|
|
78
|
+
before do
|
|
79
|
+
TestApp::App.register_slice :external_admin
|
|
80
|
+
|
|
81
|
+
module ExternalAdmin
|
|
82
|
+
class MySubclass < TestApp::BaseClass; end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
subject(:subclass) { ExternalAdmin::MySubclass }
|
|
87
|
+
|
|
88
|
+
it "calls `configure_for_slice` with the correct matching slice" do
|
|
89
|
+
expect(subclass.traces).to eq [ExternalAdmin::Slice]
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
75
93
|
context "class inside app" do
|
|
76
94
|
before do
|
|
77
95
|
module TestApp
|
|
@@ -42,7 +42,7 @@ RSpec.describe Hanami::Web::RackLogger do
|
|
|
42
42
|
verb = "POST"
|
|
43
43
|
|
|
44
44
|
env = Rack::MockRequest.env_for(path, method: verb)
|
|
45
|
-
env["
|
|
45
|
+
env["CONTENT_LENGTH"] = content_length
|
|
46
46
|
env["REMOTE_ADDR"] = ip
|
|
47
47
|
|
|
48
48
|
params = {"user" => {"password" => "secret"}}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hanami
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.1.0.beta2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Luca Guidi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-10-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -162,28 +162,28 @@ dependencies:
|
|
|
162
162
|
requirements:
|
|
163
163
|
- - "~>"
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
|
-
version:
|
|
165
|
+
version: 2.1.beta
|
|
166
166
|
type: :runtime
|
|
167
167
|
prerelease: false
|
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
169
|
requirements:
|
|
170
170
|
- - "~>"
|
|
171
171
|
- !ruby/object:Gem::Version
|
|
172
|
-
version:
|
|
172
|
+
version: 2.1.beta
|
|
173
173
|
- !ruby/object:Gem::Dependency
|
|
174
174
|
name: hanami-utils
|
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
|
176
176
|
requirements:
|
|
177
177
|
- - "~>"
|
|
178
178
|
- !ruby/object:Gem::Version
|
|
179
|
-
version:
|
|
179
|
+
version: 2.1.beta
|
|
180
180
|
type: :runtime
|
|
181
181
|
prerelease: false
|
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
|
183
183
|
requirements:
|
|
184
184
|
- - "~>"
|
|
185
185
|
- !ruby/object:Gem::Version
|
|
186
|
-
version:
|
|
186
|
+
version: 2.1.beta
|
|
187
187
|
- !ruby/object:Gem::Dependency
|
|
188
188
|
name: zeitwerk
|
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -255,14 +255,13 @@ files:
|
|
|
255
255
|
- hanami.gemspec
|
|
256
256
|
- lib/hanami.rb
|
|
257
257
|
- lib/hanami/app.rb
|
|
258
|
-
- lib/hanami/assets/app_config.rb
|
|
259
|
-
- lib/hanami/assets/config.rb
|
|
260
258
|
- lib/hanami/boot.rb
|
|
261
259
|
- lib/hanami/config.rb
|
|
262
260
|
- lib/hanami/config/actions.rb
|
|
263
261
|
- lib/hanami/config/actions/content_security_policy.rb
|
|
264
262
|
- lib/hanami/config/actions/cookies.rb
|
|
265
263
|
- lib/hanami/config/actions/sessions.rb
|
|
264
|
+
- lib/hanami/config/assets.rb
|
|
266
265
|
- lib/hanami/config/logger.rb
|
|
267
266
|
- lib/hanami/config/null_config.rb
|
|
268
267
|
- lib/hanami/config/router.rb
|
|
@@ -273,12 +272,25 @@ files:
|
|
|
273
272
|
- lib/hanami/extensions.rb
|
|
274
273
|
- lib/hanami/extensions/action.rb
|
|
275
274
|
- lib/hanami/extensions/action/slice_configured_action.rb
|
|
275
|
+
- lib/hanami/extensions/router/errors.rb
|
|
276
276
|
- lib/hanami/extensions/view.rb
|
|
277
277
|
- lib/hanami/extensions/view/context.rb
|
|
278
|
+
- lib/hanami/extensions/view/part.rb
|
|
279
|
+
- lib/hanami/extensions/view/scope.rb
|
|
278
280
|
- lib/hanami/extensions/view/slice_configured_context.rb
|
|
281
|
+
- lib/hanami/extensions/view/slice_configured_helpers.rb
|
|
279
282
|
- lib/hanami/extensions/view/slice_configured_view.rb
|
|
283
|
+
- lib/hanami/extensions/view/standard_helpers.rb
|
|
284
|
+
- lib/hanami/helpers/assets_helper.rb
|
|
285
|
+
- lib/hanami/helpers/form_helper.rb
|
|
286
|
+
- lib/hanami/helpers/form_helper/form_builder.rb
|
|
287
|
+
- lib/hanami/helpers/form_helper/values.rb
|
|
288
|
+
- lib/hanami/middleware/assets.rb
|
|
289
|
+
- lib/hanami/middleware/public_errors_app.rb
|
|
290
|
+
- lib/hanami/middleware/render_errors.rb
|
|
280
291
|
- lib/hanami/port.rb
|
|
281
292
|
- lib/hanami/prepare.rb
|
|
293
|
+
- lib/hanami/providers/assets.rb
|
|
282
294
|
- lib/hanami/providers/inflector.rb
|
|
283
295
|
- lib/hanami/providers/logger.rb
|
|
284
296
|
- lib/hanami/providers/rack.rb
|
|
@@ -305,10 +317,12 @@ files:
|
|
|
305
317
|
- spec/integration/action/routes_spec.rb
|
|
306
318
|
- spec/integration/action/sessions_spec.rb
|
|
307
319
|
- spec/integration/action/slice_configuration_spec.rb
|
|
308
|
-
- spec/integration/action/view_integration_spec.rb
|
|
309
320
|
- spec/integration/action/view_rendering/automatic_rendering_spec.rb
|
|
310
321
|
- spec/integration/action/view_rendering/paired_view_inference_spec.rb
|
|
322
|
+
- spec/integration/action/view_rendering/view_context_spec.rb
|
|
311
323
|
- spec/integration/action/view_rendering_spec.rb
|
|
324
|
+
- spec/integration/assets/assets_spec.rb
|
|
325
|
+
- spec/integration/assets/serve_static_assets_spec.rb
|
|
312
326
|
- spec/integration/code_loading/loading_from_app_spec.rb
|
|
313
327
|
- spec/integration/code_loading/loading_from_lib_spec.rb
|
|
314
328
|
- spec/integration/code_loading/loading_from_slice_spec.rb
|
|
@@ -323,10 +337,14 @@ files:
|
|
|
323
337
|
- spec/integration/container/standard_providers/rack_provider_spec.rb
|
|
324
338
|
- spec/integration/container/standard_providers_spec.rb
|
|
325
339
|
- spec/integration/dotenv_loading_spec.rb
|
|
340
|
+
- spec/integration/logging/exception_logging_spec.rb
|
|
341
|
+
- spec/integration/logging/notifications_spec.rb
|
|
342
|
+
- spec/integration/logging/request_logging_spec.rb
|
|
326
343
|
- spec/integration/rack_app/body_parser_spec.rb
|
|
327
344
|
- spec/integration/rack_app/middleware_spec.rb
|
|
328
345
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
|
329
346
|
- spec/integration/rack_app/rack_app_spec.rb
|
|
347
|
+
- spec/integration/rake_tasks_spec.rb
|
|
330
348
|
- spec/integration/settings/access_in_slice_class_body_spec.rb
|
|
331
349
|
- spec/integration/settings/access_to_constants_spec.rb
|
|
332
350
|
- spec/integration/settings/loading_from_env_spec.rb
|
|
@@ -340,27 +358,32 @@ files:
|
|
|
340
358
|
- spec/integration/slices/slice_registrations_spec.rb
|
|
341
359
|
- spec/integration/slices/slice_routing_spec.rb
|
|
342
360
|
- spec/integration/slices_spec.rb
|
|
361
|
+
- spec/integration/view/config/default_context_spec.rb
|
|
362
|
+
- spec/integration/view/config/inflector_spec.rb
|
|
363
|
+
- spec/integration/view/config/part_class_spec.rb
|
|
364
|
+
- spec/integration/view/config/part_namespace_spec.rb
|
|
365
|
+
- spec/integration/view/config/paths_spec.rb
|
|
366
|
+
- spec/integration/view/config/scope_class_spec.rb
|
|
367
|
+
- spec/integration/view/config/scope_namespace_spec.rb
|
|
368
|
+
- spec/integration/view/config/template_spec.rb
|
|
343
369
|
- spec/integration/view/context/assets_spec.rb
|
|
344
370
|
- spec/integration/view/context/inflector_spec.rb
|
|
345
371
|
- spec/integration/view/context/request_spec.rb
|
|
346
372
|
- spec/integration/view/context/routes_spec.rb
|
|
347
373
|
- spec/integration/view/context/settings_spec.rb
|
|
348
|
-
- spec/integration/view/
|
|
349
|
-
- spec/integration/view/
|
|
350
|
-
- spec/integration/view/
|
|
374
|
+
- spec/integration/view/helpers/form_helper_spec.rb
|
|
375
|
+
- spec/integration/view/helpers/part_helpers_spec.rb
|
|
376
|
+
- spec/integration/view/helpers/scope_helpers_spec.rb
|
|
377
|
+
- spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb
|
|
378
|
+
- spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb
|
|
351
379
|
- spec/integration/view/slice_configuration_spec.rb
|
|
352
|
-
- spec/integration/view/template_spec.rb
|
|
353
380
|
- spec/integration/view/views_spec.rb
|
|
354
|
-
- spec/
|
|
355
|
-
- spec/
|
|
356
|
-
- spec/isolation/hanami/application/inherit_concrete_class_spec.rb
|
|
357
|
-
- spec/isolation/hanami/application/not_configured_spec.rb
|
|
358
|
-
- spec/isolation/hanami/application/routes/configured_spec.rb
|
|
359
|
-
- spec/isolation/hanami/application/routes/not_configured_spec.rb
|
|
360
|
-
- spec/isolation/hanami/boot/success_spec.rb
|
|
381
|
+
- spec/integration/web/render_detailed_errors_spec.rb
|
|
382
|
+
- spec/integration/web/render_errors_spec.rb
|
|
361
383
|
- spec/spec_helper.rb
|
|
362
384
|
- spec/support/app_integration.rb
|
|
363
385
|
- spec/support/coverage.rb
|
|
386
|
+
- spec/support/matchers.rb
|
|
364
387
|
- spec/support/rspec.rb
|
|
365
388
|
- spec/support/shared_examples/cli/generate/app.rb
|
|
366
389
|
- spec/support/shared_examples/cli/generate/migration.rb
|
|
@@ -375,11 +398,24 @@ files:
|
|
|
375
398
|
- spec/unit/hanami/config/base_url_spec.rb
|
|
376
399
|
- spec/unit/hanami/config/inflector_spec.rb
|
|
377
400
|
- spec/unit/hanami/config/logger_spec.rb
|
|
401
|
+
- spec/unit/hanami/config/render_detailed_errors_spec.rb
|
|
402
|
+
- spec/unit/hanami/config/render_errors_spec.rb
|
|
378
403
|
- spec/unit/hanami/config/router_spec.rb
|
|
379
404
|
- spec/unit/hanami/config/slices_spec.rb
|
|
380
405
|
- spec/unit/hanami/config/views_spec.rb
|
|
381
406
|
- spec/unit/hanami/env_spec.rb
|
|
407
|
+
- spec/unit/hanami/extensions/view/context_spec.rb
|
|
408
|
+
- spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb
|
|
409
|
+
- spec/unit/hanami/helpers/assets_helper/audio_tag_spec.rb
|
|
410
|
+
- spec/unit/hanami/helpers/assets_helper/favicon_link_tag_spec.rb
|
|
411
|
+
- spec/unit/hanami/helpers/assets_helper/image_tag_spec.rb
|
|
412
|
+
- spec/unit/hanami/helpers/assets_helper/javascript_tag_spec.rb
|
|
413
|
+
- spec/unit/hanami/helpers/assets_helper/stylesheet_link_tag_spec.rb
|
|
414
|
+
- spec/unit/hanami/helpers/assets_helper/video_tag_spec.rb
|
|
415
|
+
- spec/unit/hanami/helpers/form_helper_spec.rb
|
|
382
416
|
- spec/unit/hanami/port_spec.rb
|
|
417
|
+
- spec/unit/hanami/router/errors/not_allowed_error_spec.rb
|
|
418
|
+
- spec/unit/hanami/router/errors/not_found_error_spec.rb
|
|
383
419
|
- spec/unit/hanami/settings/env_store_spec.rb
|
|
384
420
|
- spec/unit/hanami/settings_spec.rb
|
|
385
421
|
- spec/unit/hanami/slice_configurable_spec.rb
|
|
@@ -404,11 +440,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
404
440
|
version: '3.0'
|
|
405
441
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
406
442
|
requirements:
|
|
407
|
-
- - "
|
|
443
|
+
- - ">"
|
|
408
444
|
- !ruby/object:Gem::Version
|
|
409
|
-
version:
|
|
445
|
+
version: 1.3.1
|
|
410
446
|
requirements: []
|
|
411
|
-
rubygems_version: 3.4.
|
|
447
|
+
rubygems_version: 3.4.13
|
|
412
448
|
signing_key:
|
|
413
449
|
specification_version: 4
|
|
414
450
|
summary: The web, with simplicity
|
|
@@ -419,10 +455,12 @@ test_files:
|
|
|
419
455
|
- spec/integration/action/routes_spec.rb
|
|
420
456
|
- spec/integration/action/sessions_spec.rb
|
|
421
457
|
- spec/integration/action/slice_configuration_spec.rb
|
|
422
|
-
- spec/integration/action/view_integration_spec.rb
|
|
423
458
|
- spec/integration/action/view_rendering/automatic_rendering_spec.rb
|
|
424
459
|
- spec/integration/action/view_rendering/paired_view_inference_spec.rb
|
|
460
|
+
- spec/integration/action/view_rendering/view_context_spec.rb
|
|
425
461
|
- spec/integration/action/view_rendering_spec.rb
|
|
462
|
+
- spec/integration/assets/assets_spec.rb
|
|
463
|
+
- spec/integration/assets/serve_static_assets_spec.rb
|
|
426
464
|
- spec/integration/code_loading/loading_from_app_spec.rb
|
|
427
465
|
- spec/integration/code_loading/loading_from_lib_spec.rb
|
|
428
466
|
- spec/integration/code_loading/loading_from_slice_spec.rb
|
|
@@ -437,10 +475,14 @@ test_files:
|
|
|
437
475
|
- spec/integration/container/standard_providers/rack_provider_spec.rb
|
|
438
476
|
- spec/integration/container/standard_providers_spec.rb
|
|
439
477
|
- spec/integration/dotenv_loading_spec.rb
|
|
478
|
+
- spec/integration/logging/exception_logging_spec.rb
|
|
479
|
+
- spec/integration/logging/notifications_spec.rb
|
|
480
|
+
- spec/integration/logging/request_logging_spec.rb
|
|
440
481
|
- spec/integration/rack_app/body_parser_spec.rb
|
|
441
482
|
- spec/integration/rack_app/middleware_spec.rb
|
|
442
483
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
|
443
484
|
- spec/integration/rack_app/rack_app_spec.rb
|
|
485
|
+
- spec/integration/rake_tasks_spec.rb
|
|
444
486
|
- spec/integration/settings/access_in_slice_class_body_spec.rb
|
|
445
487
|
- spec/integration/settings/access_to_constants_spec.rb
|
|
446
488
|
- spec/integration/settings/loading_from_env_spec.rb
|
|
@@ -454,27 +496,32 @@ test_files:
|
|
|
454
496
|
- spec/integration/slices/slice_registrations_spec.rb
|
|
455
497
|
- spec/integration/slices/slice_routing_spec.rb
|
|
456
498
|
- spec/integration/slices_spec.rb
|
|
499
|
+
- spec/integration/view/config/default_context_spec.rb
|
|
500
|
+
- spec/integration/view/config/inflector_spec.rb
|
|
501
|
+
- spec/integration/view/config/part_class_spec.rb
|
|
502
|
+
- spec/integration/view/config/part_namespace_spec.rb
|
|
503
|
+
- spec/integration/view/config/paths_spec.rb
|
|
504
|
+
- spec/integration/view/config/scope_class_spec.rb
|
|
505
|
+
- spec/integration/view/config/scope_namespace_spec.rb
|
|
506
|
+
- spec/integration/view/config/template_spec.rb
|
|
457
507
|
- spec/integration/view/context/assets_spec.rb
|
|
458
508
|
- spec/integration/view/context/inflector_spec.rb
|
|
459
509
|
- spec/integration/view/context/request_spec.rb
|
|
460
510
|
- spec/integration/view/context/routes_spec.rb
|
|
461
511
|
- spec/integration/view/context/settings_spec.rb
|
|
462
|
-
- spec/integration/view/
|
|
463
|
-
- spec/integration/view/
|
|
464
|
-
- spec/integration/view/
|
|
512
|
+
- spec/integration/view/helpers/form_helper_spec.rb
|
|
513
|
+
- spec/integration/view/helpers/part_helpers_spec.rb
|
|
514
|
+
- spec/integration/view/helpers/scope_helpers_spec.rb
|
|
515
|
+
- spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb
|
|
516
|
+
- spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb
|
|
465
517
|
- spec/integration/view/slice_configuration_spec.rb
|
|
466
|
-
- spec/integration/view/template_spec.rb
|
|
467
518
|
- spec/integration/view/views_spec.rb
|
|
468
|
-
- spec/
|
|
469
|
-
- spec/
|
|
470
|
-
- spec/isolation/hanami/application/inherit_concrete_class_spec.rb
|
|
471
|
-
- spec/isolation/hanami/application/not_configured_spec.rb
|
|
472
|
-
- spec/isolation/hanami/application/routes/configured_spec.rb
|
|
473
|
-
- spec/isolation/hanami/application/routes/not_configured_spec.rb
|
|
474
|
-
- spec/isolation/hanami/boot/success_spec.rb
|
|
519
|
+
- spec/integration/web/render_detailed_errors_spec.rb
|
|
520
|
+
- spec/integration/web/render_errors_spec.rb
|
|
475
521
|
- spec/spec_helper.rb
|
|
476
522
|
- spec/support/app_integration.rb
|
|
477
523
|
- spec/support/coverage.rb
|
|
524
|
+
- spec/support/matchers.rb
|
|
478
525
|
- spec/support/rspec.rb
|
|
479
526
|
- spec/support/shared_examples/cli/generate/app.rb
|
|
480
527
|
- spec/support/shared_examples/cli/generate/migration.rb
|
|
@@ -489,11 +536,24 @@ test_files:
|
|
|
489
536
|
- spec/unit/hanami/config/base_url_spec.rb
|
|
490
537
|
- spec/unit/hanami/config/inflector_spec.rb
|
|
491
538
|
- spec/unit/hanami/config/logger_spec.rb
|
|
539
|
+
- spec/unit/hanami/config/render_detailed_errors_spec.rb
|
|
540
|
+
- spec/unit/hanami/config/render_errors_spec.rb
|
|
492
541
|
- spec/unit/hanami/config/router_spec.rb
|
|
493
542
|
- spec/unit/hanami/config/slices_spec.rb
|
|
494
543
|
- spec/unit/hanami/config/views_spec.rb
|
|
495
544
|
- spec/unit/hanami/env_spec.rb
|
|
545
|
+
- spec/unit/hanami/extensions/view/context_spec.rb
|
|
546
|
+
- spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb
|
|
547
|
+
- spec/unit/hanami/helpers/assets_helper/audio_tag_spec.rb
|
|
548
|
+
- spec/unit/hanami/helpers/assets_helper/favicon_link_tag_spec.rb
|
|
549
|
+
- spec/unit/hanami/helpers/assets_helper/image_tag_spec.rb
|
|
550
|
+
- spec/unit/hanami/helpers/assets_helper/javascript_tag_spec.rb
|
|
551
|
+
- spec/unit/hanami/helpers/assets_helper/stylesheet_link_tag_spec.rb
|
|
552
|
+
- spec/unit/hanami/helpers/assets_helper/video_tag_spec.rb
|
|
553
|
+
- spec/unit/hanami/helpers/form_helper_spec.rb
|
|
496
554
|
- spec/unit/hanami/port_spec.rb
|
|
555
|
+
- spec/unit/hanami/router/errors/not_allowed_error_spec.rb
|
|
556
|
+
- spec/unit/hanami/router/errors/not_found_error_spec.rb
|
|
497
557
|
- spec/unit/hanami/settings/env_store_spec.rb
|
|
498
558
|
- spec/unit/hanami/settings_spec.rb
|
|
499
559
|
- spec/unit/hanami/slice_configurable_spec.rb
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "dry/configurable"
|
|
4
|
-
|
|
5
|
-
module Hanami
|
|
6
|
-
# @api private
|
|
7
|
-
module Assets
|
|
8
|
-
# App config for assets.
|
|
9
|
-
#
|
|
10
|
-
# This is NOT RELEASED as of 2.0.0.
|
|
11
|
-
#
|
|
12
|
-
# @api private
|
|
13
|
-
class AppConfig
|
|
14
|
-
include Dry::Configurable
|
|
15
|
-
|
|
16
|
-
attr_reader :base_config
|
|
17
|
-
protected :base_config
|
|
18
|
-
|
|
19
|
-
setting :server_url, default: "http://localhost:8080"
|
|
20
|
-
|
|
21
|
-
def initialize(*)
|
|
22
|
-
super
|
|
23
|
-
|
|
24
|
-
@base_config = Assets::Config.new
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def initialize_copy(source)
|
|
28
|
-
super
|
|
29
|
-
@base_config = source.base_config.dup
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def finalize!
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Returns the list of available settings
|
|
36
|
-
#
|
|
37
|
-
# @return [Set]
|
|
38
|
-
#
|
|
39
|
-
# @api private
|
|
40
|
-
def settings
|
|
41
|
-
base_config.settings + self.class.settings
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def method_missing(name, *args, &block)
|
|
47
|
-
if config.respond_to?(name)
|
|
48
|
-
config.public_send(name, *args, &block)
|
|
49
|
-
elsif base_config.respond_to?(name)
|
|
50
|
-
base_config.public_send(name, *args, &block)
|
|
51
|
-
else
|
|
52
|
-
super
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def respond_to_missing?(name, _incude_all = false)
|
|
57
|
-
config.respond_to?(name) || base_config.respond_to?(name) || super
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
data/lib/hanami/assets/config.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "dry/configurable"
|
|
4
|
-
|
|
5
|
-
module Hanami
|
|
6
|
-
module Assets
|
|
7
|
-
# App config for assets.
|
|
8
|
-
#
|
|
9
|
-
# This is NOT RELEASED as of 2.0.0.
|
|
10
|
-
#
|
|
11
|
-
# @api private
|
|
12
|
-
class Config
|
|
13
|
-
include Dry::Configurable
|
|
14
|
-
|
|
15
|
-
# Initialize the Config
|
|
16
|
-
#
|
|
17
|
-
# @yield [config] the config object
|
|
18
|
-
#
|
|
19
|
-
# @return [Config]
|
|
20
|
-
#
|
|
21
|
-
# @since 2.0.0
|
|
22
|
-
# @api private
|
|
23
|
-
def initialize(*)
|
|
24
|
-
super
|
|
25
|
-
yield self if block_given?
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Returns the list of available settings
|
|
29
|
-
#
|
|
30
|
-
# @return [Set]
|
|
31
|
-
#
|
|
32
|
-
# @since 2.0.0
|
|
33
|
-
# @api private
|
|
34
|
-
def settings
|
|
35
|
-
self.class.settings
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def method_missing(name, *args, &block)
|
|
41
|
-
if config.respond_to?(name)
|
|
42
|
-
config.public_send(name, *args, &block)
|
|
43
|
-
else
|
|
44
|
-
super
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def respond_to_missing?(name, _incude_all = false)
|
|
49
|
-
config.respond_to?(name) || super
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
RSpec.describe "App action / View integration", :app_integration do
|
|
4
|
-
before do
|
|
5
|
-
module TestApp
|
|
6
|
-
class App < Hanami::App
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
Hanami.app.instance_eval(&app_hook) if respond_to?(:app_hook)
|
|
11
|
-
Hanami.app.prepare
|
|
12
|
-
|
|
13
|
-
module TestApp
|
|
14
|
-
class Action < Hanami::Action; end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
module TestApp
|
|
18
|
-
module Actions
|
|
19
|
-
module Articles
|
|
20
|
-
class Index < TestApp::Action; end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
let(:action_class) { TestApp::Actions::Articles::Index }
|
|
27
|
-
subject(:action) { action_class.new(**action_args) }
|
|
28
|
-
let(:action_args) { {} }
|
|
29
|
-
|
|
30
|
-
describe "#view_context" do
|
|
31
|
-
subject(:view_context) { action.view_context }
|
|
32
|
-
|
|
33
|
-
context "Explicitly injected view context" do
|
|
34
|
-
let(:view_context) { double(:view_context) }
|
|
35
|
-
let(:action_args) { {view_context: view_context} }
|
|
36
|
-
|
|
37
|
-
it "returns the injected object" do
|
|
38
|
-
is_expected.to eql view_context
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "No view context registered" do
|
|
43
|
-
it "is nil" do
|
|
44
|
-
is_expected.to be_nil
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
context "Default view context identifier" do
|
|
49
|
-
context "View context registered in slice" do
|
|
50
|
-
before do
|
|
51
|
-
TestApp::App.register "views.context", slice_view_context
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
let(:slice_view_context) { double(:slice_view_context) }
|
|
55
|
-
|
|
56
|
-
it "is the slice's view context" do
|
|
57
|
-
is_expected.to eql slice_view_context
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
context "View context registered in app" do
|
|
62
|
-
before do
|
|
63
|
-
Hanami.app.register "views.context", app_view_context
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
let(:app_view_context) { double(:app_view_context) }
|
|
67
|
-
|
|
68
|
-
it "is the apps's view context" do
|
|
69
|
-
is_expected.to eql app_view_context
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context "custom view context identifier" do
|
|
75
|
-
let(:app_hook) {
|
|
76
|
-
proc do |app|
|
|
77
|
-
app.config.actions.view_context_identifier = "view.custom_context"
|
|
78
|
-
end
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
before do
|
|
82
|
-
TestApp::App.register "view.custom_context", custom_view_context
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
let(:custom_view_context) { double(:custom_view_context) }
|
|
86
|
-
|
|
87
|
-
it "is the context registered with the custom identifier" do
|
|
88
|
-
is_expected.to eql custom_view_context
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
describe "#view_options" do
|
|
94
|
-
subject(:view_options) { action.send(:view_options, req, res) }
|
|
95
|
-
let(:req) { double(:req) }
|
|
96
|
-
let(:res) { double(:res) }
|
|
97
|
-
|
|
98
|
-
context "without view context" do
|
|
99
|
-
it "is an empty hash" do
|
|
100
|
-
is_expected.to eq({})
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
context "with view context" do
|
|
105
|
-
let(:initial_view_context) { double(:initial_view_context) }
|
|
106
|
-
let(:action_args) { {view_context: initial_view_context} }
|
|
107
|
-
|
|
108
|
-
context "default #view_context_options" do
|
|
109
|
-
let(:request_view_context) { double(:request_view_context) }
|
|
110
|
-
|
|
111
|
-
before do
|
|
112
|
-
allow(initial_view_context).to receive(:with).with(
|
|
113
|
-
request: req,
|
|
114
|
-
response: res,
|
|
115
|
-
) { request_view_context }
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "is the view context with the request and response provided" do
|
|
119
|
-
is_expected.to eq(context: request_view_context)
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
context "custom #view_context_options" do
|
|
124
|
-
let(:custom_view_context) { double(:custom_view_context)}
|
|
125
|
-
|
|
126
|
-
before do
|
|
127
|
-
action_class.class_eval do
|
|
128
|
-
def view_context_options(req, res)
|
|
129
|
-
{custom_option: "custom option"}
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
allow(initial_view_context).to receive(:with).with(
|
|
134
|
-
custom_option: "custom option"
|
|
135
|
-
) { custom_view_context }
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "is the view context with the custom options provided" do
|
|
139
|
-
is_expected.to eq(context: custom_view_context)
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
context "specialized method (calling super) defined in action class" do
|
|
144
|
-
let(:request_view_context) { double(:request_view_context) }
|
|
145
|
-
|
|
146
|
-
before do
|
|
147
|
-
allow(initial_view_context).to receive(:with).with(
|
|
148
|
-
request: req,
|
|
149
|
-
response: res,
|
|
150
|
-
) { request_view_context }
|
|
151
|
-
|
|
152
|
-
action_class.class_eval do
|
|
153
|
-
def view_options(req, res)
|
|
154
|
-
super.merge(extra_option: "extra option")
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "includes the options provided by the specialized method" do
|
|
160
|
-
is_expected.to eq(context: request_view_context, extra_option: "extra option")
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|