hanami 2.0.0.beta4 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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