hanami 2.0.0.beta4 → 2.0.0.rc1

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/hanami.gemspec +8 -7
  4. data/lib/hanami/app.rb +47 -36
  5. data/lib/hanami/assets/app_config.rb +7 -15
  6. data/lib/hanami/assets/config.rb +5 -6
  7. data/lib/hanami/config/actions/content_security_policy.rb +1 -1
  8. data/lib/hanami/config/actions/cookies.rb +27 -0
  9. data/lib/hanami/config/actions/sessions.rb +42 -5
  10. data/lib/hanami/config/actions.rb +81 -17
  11. data/lib/hanami/config/logger.rb +112 -23
  12. data/lib/hanami/config/router.rb +0 -1
  13. data/lib/hanami/config/views.rb +6 -10
  14. data/lib/hanami/config.rb +235 -73
  15. data/lib/hanami/constants.rb +4 -0
  16. data/lib/hanami/errors.rb +17 -0
  17. data/lib/hanami/extensions/action/slice_configured_action.rb +9 -5
  18. data/lib/hanami/extensions/action.rb +59 -7
  19. data/lib/hanami/extensions/view/context.rb +3 -4
  20. data/lib/hanami/extensions/view/slice_configured_view.rb +4 -4
  21. data/lib/hanami/extensions/view.rb +7 -5
  22. data/lib/hanami/providers/inflector.rb +6 -0
  23. data/lib/hanami/providers/logger.rb +8 -0
  24. data/lib/hanami/providers/rack.rb +12 -0
  25. data/lib/hanami/providers/routes.rb +14 -4
  26. data/lib/hanami/routes.rb +36 -1
  27. data/lib/hanami/settings/env_store.rb +1 -1
  28. data/lib/hanami/settings.rb +102 -36
  29. data/lib/hanami/slice/router.rb +38 -16
  30. data/lib/hanami/slice/routing/middleware/stack.rb +66 -42
  31. data/lib/hanami/slice/routing/resolver.rb +10 -17
  32. data/lib/hanami/slice/view_name_inferrer.rb +1 -1
  33. data/lib/hanami/slice.rb +553 -14
  34. data/lib/hanami/slice_registrar.rb +20 -15
  35. data/lib/hanami/version.rb +2 -3
  36. data/lib/hanami/web/rack_logger.rb +14 -4
  37. data/lib/hanami.rb +122 -23
  38. data/spec/integration/action/csrf_protection_spec.rb +1 -1
  39. data/spec/integration/container/application_routes_helper_spec.rb +3 -1
  40. data/spec/integration/container/provider_lifecycle_spec.rb +61 -0
  41. data/spec/integration/container/standard_providers/rack_provider_spec.rb +44 -0
  42. data/spec/integration/container/{standard_bootable_components_spec.rb → standard_providers_spec.rb} +3 -3
  43. data/spec/integration/rack_app/body_parser_spec.rb +3 -0
  44. data/spec/integration/rack_app/middleware_spec.rb +427 -3
  45. data/spec/integration/rack_app/non_booted_rack_app_spec.rb +2 -1
  46. data/spec/integration/rack_app/rack_app_spec.rb +39 -11
  47. data/spec/integration/setup_spec.rb +4 -4
  48. data/spec/integration/slices/external_slice_spec.rb +2 -1
  49. data/spec/integration/slices/slice_configuration_spec.rb +3 -1
  50. data/spec/integration/slices/slice_loading_spec.rb +4 -4
  51. data/spec/integration/slices/slice_routing_spec.rb +4 -3
  52. data/spec/integration/slices_spec.rb +100 -0
  53. data/spec/isolation/hanami/boot/success_spec.rb +1 -1
  54. data/spec/support/app_integration.rb +2 -10
  55. data/spec/unit/hanami/config/actions/content_security_policy_spec.rb +7 -7
  56. data/spec/unit/hanami/config/actions/default_values_spec.rb +1 -1
  57. data/spec/unit/hanami/config/actions/sessions_spec.rb +1 -3
  58. data/spec/unit/hanami/config/actions_spec.rb +1 -12
  59. data/spec/unit/hanami/config/logger_spec.rb +38 -55
  60. data/spec/unit/hanami/config/router_spec.rb +1 -1
  61. data/spec/unit/hanami/config/views_spec.rb +3 -13
  62. data/spec/unit/hanami/settings_spec.rb +1 -1
  63. data/spec/unit/hanami/slice_configurable_spec.rb +5 -5
  64. data/spec/unit/hanami/slice_spec.rb +32 -0
  65. data/spec/unit/hanami/version_spec.rb +1 -1
  66. data/spec/unit/hanami/web/rack_logger_spec.rb +13 -2
  67. metadata +54 -45
  68. data/lib/hanami/config/sessions.rb +0 -50
  69. data/spec/unit/hanami/config_spec.rb +0 -43
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.0.beta4
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-24 00:00:00.000000000 Z
11
+ date: 2022-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -36,128 +36,136 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.16'
40
- - - ">="
39
+ version: '1.0'
40
+ - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 0.16.1
42
+ version: '2'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0.16'
50
- - - ">="
49
+ version: '1.0'
50
+ - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 0.16.1
52
+ version: '2'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: dry-core
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '0.9'
60
- - - ">="
59
+ version: '1.0'
60
+ - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: 0.9.1
62
+ version: '2'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0.9'
70
- - - ">="
69
+ version: '1.0'
70
+ - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: 0.9.1
72
+ version: '2'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: dry-inflector
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '0.2'
80
- - - ">="
79
+ version: '1.0'
80
+ - - "<"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.1
82
+ version: '2'
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.2'
90
- - - ">="
89
+ version: '1.0'
90
+ - - "<"
91
91
  - !ruby/object:Gem::Version
92
- version: 0.2.1
92
+ version: '2'
93
93
  - !ruby/object:Gem::Dependency
94
- name: dry-system
94
+ name: dry-monitor
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: '0.27'
100
- - - ">="
99
+ version: '1.0'
100
+ - - "<"
101
101
  - !ruby/object:Gem::Version
102
- version: 0.27.2
102
+ version: '2'
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.27'
110
- - - ">="
109
+ version: '1.0'
110
+ - - "<"
111
111
  - !ruby/object:Gem::Version
112
- version: 0.27.2
112
+ version: '2'
113
113
  - !ruby/object:Gem::Dependency
114
- name: dry-monitor
114
+ name: dry-system
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0.7'
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: '0.7'
119
+ version: 1.0.rc
123
120
  type: :runtime
124
121
  prerelease: false
125
122
  version_requirements: !ruby/object:Gem::Requirement
126
123
  requirements:
127
124
  - - "~>"
128
125
  - !ruby/object:Gem::Version
129
- version: '0.7'
130
- - - ">="
126
+ version: 1.0.rc
127
+ - !ruby/object:Gem::Dependency
128
+ name: dry-logger
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 1.0.rc
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
131
139
  - !ruby/object:Gem::Version
132
- version: '0.7'
140
+ version: 1.0.rc
133
141
  - !ruby/object:Gem::Dependency
134
142
  name: hanami-cli
135
143
  requirement: !ruby/object:Gem::Requirement
136
144
  requirements:
137
145
  - - "~>"
138
146
  - !ruby/object:Gem::Version
139
- version: 2.0.beta
147
+ version: 2.0.rc
140
148
  type: :runtime
141
149
  prerelease: false
142
150
  version_requirements: !ruby/object:Gem::Requirement
143
151
  requirements:
144
152
  - - "~>"
145
153
  - !ruby/object:Gem::Version
146
- version: 2.0.beta
154
+ version: 2.0.rc
147
155
  - !ruby/object:Gem::Dependency
148
156
  name: hanami-utils
149
157
  requirement: !ruby/object:Gem::Requirement
150
158
  requirements:
151
159
  - - "~>"
152
160
  - !ruby/object:Gem::Version
153
- version: 2.0.beta
161
+ version: 2.0.rc
154
162
  type: :runtime
155
163
  prerelease: false
156
164
  version_requirements: !ruby/object:Gem::Requirement
157
165
  requirements:
158
166
  - - "~>"
159
167
  - !ruby/object:Gem::Version
160
- version: 2.0.beta
168
+ version: 2.0.rc
161
169
  - !ruby/object:Gem::Dependency
162
170
  name: zeitwerk
163
171
  requirement: !ruby/object:Gem::Requirement
@@ -240,7 +248,6 @@ files:
240
248
  - lib/hanami/config/logger.rb
241
249
  - lib/hanami/config/null_config.rb
242
250
  - lib/hanami/config/router.rb
243
- - lib/hanami/config/sessions.rb
244
251
  - lib/hanami/config/views.rb
245
252
  - lib/hanami/constants.rb
246
253
  - lib/hanami/errors.rb
@@ -290,8 +297,10 @@ files:
290
297
  - spec/integration/container/autoloader_spec.rb
291
298
  - spec/integration/container/imports_spec.rb
292
299
  - spec/integration/container/prepare_container_spec.rb
300
+ - spec/integration/container/provider_lifecycle_spec.rb
293
301
  - spec/integration/container/shutdown_spec.rb
294
- - spec/integration/container/standard_bootable_components_spec.rb
302
+ - spec/integration/container/standard_providers/rack_provider_spec.rb
303
+ - spec/integration/container/standard_providers_spec.rb
295
304
  - spec/integration/dotenv_loading_spec.rb
296
305
  - spec/integration/rack_app/body_parser_spec.rb
297
306
  - spec/integration/rack_app/middleware_spec.rb
@@ -347,7 +356,6 @@ files:
347
356
  - spec/unit/hanami/config/router_spec.rb
348
357
  - spec/unit/hanami/config/slices_spec.rb
349
358
  - spec/unit/hanami/config/views_spec.rb
350
- - spec/unit/hanami/config_spec.rb
351
359
  - spec/unit/hanami/env_spec.rb
352
360
  - spec/unit/hanami/settings/env_store_spec.rb
353
361
  - spec/unit/hanami/settings_spec.rb
@@ -377,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
377
385
  - !ruby/object:Gem::Version
378
386
  version: 1.3.1
379
387
  requirements: []
380
- rubygems_version: 3.3.7
388
+ rubygems_version: 3.3.3
381
389
  signing_key:
382
390
  specification_version: 4
383
391
  summary: The web, with simplicity
@@ -400,8 +408,10 @@ test_files:
400
408
  - spec/integration/container/autoloader_spec.rb
401
409
  - spec/integration/container/imports_spec.rb
402
410
  - spec/integration/container/prepare_container_spec.rb
411
+ - spec/integration/container/provider_lifecycle_spec.rb
403
412
  - spec/integration/container/shutdown_spec.rb
404
- - spec/integration/container/standard_bootable_components_spec.rb
413
+ - spec/integration/container/standard_providers/rack_provider_spec.rb
414
+ - spec/integration/container/standard_providers_spec.rb
405
415
  - spec/integration/dotenv_loading_spec.rb
406
416
  - spec/integration/rack_app/body_parser_spec.rb
407
417
  - spec/integration/rack_app/middleware_spec.rb
@@ -457,7 +467,6 @@ test_files:
457
467
  - spec/unit/hanami/config/router_spec.rb
458
468
  - spec/unit/hanami/config/slices_spec.rb
459
469
  - spec/unit/hanami/config/views_spec.rb
460
- - spec/unit/hanami/config_spec.rb
461
470
  - spec/unit/hanami/env_spec.rb
462
471
  - spec/unit/hanami/settings/env_store_spec.rb
463
472
  - spec/unit/hanami/settings_spec.rb
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/utils/string"
4
- require "hanami/utils/class"
5
-
6
- module Hanami
7
- class Config
8
- # Hanami config for HTTP sessions
9
- #
10
- # @since 2.0.0
11
- class Sessions
12
- NULL_SESSION_OPTION = :null
13
- private_constant :NULL_SESSION_OPTION
14
-
15
- def self.null
16
- self.class.new(NULL_SESSION_OPTION)
17
- end
18
-
19
- attr_reader :storage, :options
20
-
21
- def initialize(*args)
22
- storage, options, = Array(args.dup).flatten
23
-
24
- @storage = storage
25
- @options = options || {}
26
- end
27
-
28
- def enabled?
29
- storage != NULL_SESSION_OPTION
30
- end
31
-
32
- def middleware
33
- [storage_middleware, options]
34
- end
35
-
36
- private
37
-
38
- def storage_middleware
39
- require_storage
40
-
41
- name = Utils::String.classify(storage)
42
- Utils::Class.load!(name, Rack::Session)
43
- end
44
-
45
- def require_storage
46
- require "rack/session/#{storage}"
47
- end
48
- end
49
- end
50
- end
@@ -1,43 +0,0 @@
1
- require "hanami/config"
2
-
3
- RSpec.describe Hanami::Config do
4
- let(:config) { described_class.new(app_name: app_name, env: env) }
5
- let(:app_name) { "MyApp::app" }
6
- let(:env) { :development }
7
-
8
- describe "environment-specific config" do
9
- before do
10
- config.logger.level = :debug__set_without_env
11
- end
12
-
13
- before do
14
- config.environment :production do |c|
15
- c.logger.level = :info__set_for_production_env
16
- end
17
- end
18
-
19
- context "settings configured for current env" do
20
- let(:env) { :production }
21
-
22
- it "applies the settings" do
23
- expect(config.logger.level).to eq :info__set_for_production_env
24
- end
25
-
26
- it "leaves the settings in place when finalizing" do
27
- expect { config.finalize! }.not_to(change { config.logger.level })
28
- end
29
- end
30
-
31
- context "settings configured for a different env" do
32
- let(:env) { :development }
33
-
34
- it "does not apply the settings" do
35
- expect(config.logger.level).to eq :debug__set_without_env
36
- end
37
-
38
- it "does not apply the settings when finalizing" do
39
- expect { config.finalize! }.not_to(change { config.logger.level })
40
- end
41
- end
42
- end
43
- end