hanami 2.0.0.beta3 → 2.0.0.beta4
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 +20 -0
- data/hanami.gemspec +5 -5
- data/lib/hanami/app.rb +4 -4
- data/lib/hanami/assets/{app_configuration.rb → app_config.rb} +10 -10
- data/lib/hanami/assets/{configuration.rb → config.rb} +4 -4
- data/lib/hanami/{configuration → config}/actions/content_security_policy.rb +2 -2
- data/lib/hanami/{configuration → config}/actions/cookies.rb +6 -5
- data/lib/hanami/{configuration → config}/actions/sessions.rb +2 -2
- data/lib/hanami/{configuration → config}/actions.rb +11 -12
- data/lib/hanami/{configuration → config}/logger.rb +2 -2
- data/lib/hanami/config/null_config.rb +14 -0
- data/lib/hanami/{configuration → config}/router.rb +8 -8
- data/lib/hanami/{configuration → config}/sessions.rb +2 -2
- data/lib/hanami/{configuration → config}/views.rb +10 -10
- data/lib/hanami/{configuration.rb → config.rb} +19 -19
- data/lib/hanami/errors.rb +3 -0
- data/lib/hanami/extensions/action/slice_configured_action.rb +1 -1
- data/lib/hanami/providers/inflector.rb +0 -2
- data/lib/hanami/providers/logger.rb +1 -3
- data/lib/hanami/providers/rack.rb +0 -2
- data/lib/hanami/providers/routes.rb +0 -2
- data/lib/hanami/settings/env_store.rb +3 -3
- data/lib/hanami/settings.rb +87 -5
- data/lib/hanami/slice/routing/middleware/stack.rb +45 -1
- data/lib/hanami/slice.rb +52 -37
- data/lib/hanami/slice_configurable.rb +1 -1
- data/lib/hanami/slice_registrar.rb +6 -0
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami.rb +0 -1
- data/spec/integration/container/prepare_container_spec.rb +2 -0
- data/spec/integration/rack_app/body_parser_spec.rb +108 -0
- data/spec/integration/rack_app/middleware_spec.rb +28 -0
- data/spec/integration/settings/access_in_slice_class_body_spec.rb +82 -0
- data/spec/integration/settings/access_to_constants_spec.rb +23 -146
- data/spec/integration/{slices/slice_settings_spec.rb → settings/slice_registration_spec.rb} +5 -1
- data/spec/integration/settings/using_types_spec.rb +4 -11
- data/spec/support/app_integration.rb +18 -15
- data/spec/unit/hanami/{configuration → config}/actions/content_security_policy_spec.rb +10 -10
- data/spec/unit/hanami/{configuration → config}/actions/cookies_spec.rb +6 -6
- data/spec/unit/hanami/{configuration → config}/actions/csrf_protection_spec.rb +12 -12
- data/spec/unit/hanami/config/actions/default_values_spec.rb +54 -0
- data/spec/unit/hanami/{configuration → config}/actions/sessions_spec.rb +5 -5
- data/spec/unit/hanami/{configuration → config}/actions_spec.rb +9 -10
- data/spec/unit/hanami/{configuration → config}/base_url_spec.rb +2 -2
- data/spec/unit/hanami/{configuration → config}/inflector_spec.rb +2 -2
- data/spec/unit/hanami/{configuration → config}/logger_spec.rb +4 -4
- data/spec/unit/hanami/{configuration → config}/router_spec.rb +7 -8
- data/spec/unit/hanami/{configuration → config}/slices_spec.rb +2 -2
- data/spec/unit/hanami/{configuration → config}/views_spec.rb +11 -12
- data/spec/unit/hanami/{configuration_spec.rb → config_spec.rb} +3 -3
- data/spec/unit/hanami/settings_spec.rb +65 -10
- data/spec/unit/hanami/slice_configurable_spec.rb +21 -2
- data/spec/unit/hanami/version_spec.rb +1 -1
- metadata +73 -58
- data/lib/hanami/configuration/null_configuration.rb +0 -14
- data/lib/hanami/providers/settings.rb +0 -98
- data/spec/unit/hanami/configuration/actions/default_values_spec.rb +0 -52
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/inflector"
|
4
|
-
require "hanami/
|
4
|
+
require "hanami/config"
|
5
5
|
require "hanami/slice_name"
|
6
6
|
|
7
|
-
RSpec.describe Hanami::
|
7
|
+
RSpec.describe Hanami::Config, "#slices" do
|
8
8
|
subject(:config) { described_class.new(app_name: app_name, env: :development) }
|
9
9
|
let(:app_name) { Hanami::SliceName.new(double(name: "MyApp::App"), inflector: Dry::Inflector.new) }
|
10
10
|
|
@@ -1,25 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
4
|
-
require "hanami/configuration/views"
|
3
|
+
require "hanami/config"
|
5
4
|
require "saharspec/matchers/dont"
|
6
5
|
|
7
|
-
RSpec.describe Hanami::
|
8
|
-
let(:
|
6
|
+
RSpec.describe Hanami::Config, "#views" do
|
7
|
+
let(:config) { described_class.new(app_name: app_name, env: :development) }
|
9
8
|
let(:app_name) { "MyApp::app" }
|
10
9
|
|
11
|
-
subject(:views) {
|
10
|
+
subject(:views) { config.views }
|
12
11
|
|
13
12
|
context "hanami-view is bundled" do
|
14
|
-
it "exposes Hanami::Views's app
|
15
|
-
is_expected.to be_an_instance_of(Hanami::
|
13
|
+
it "exposes Hanami::Views's app config" do
|
14
|
+
is_expected.to be_an_instance_of(Hanami::Config::Views)
|
16
15
|
|
17
16
|
is_expected.to respond_to(:finalize!)
|
18
17
|
is_expected.to respond_to(:layouts_dir)
|
19
18
|
is_expected.to respond_to(:layouts_dir=)
|
20
19
|
end
|
21
20
|
|
22
|
-
it "includes base view
|
21
|
+
it "includes base view config" do
|
23
22
|
expect(views).to respond_to(:paths)
|
24
23
|
expect(views).to respond_to(:paths=)
|
25
24
|
end
|
@@ -39,11 +38,11 @@ RSpec.describe Hanami::Configuration, "#views" do
|
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
42
|
-
it "preserves default values from the base view
|
41
|
+
it "preserves default values from the base view config" do
|
43
42
|
expect(views.layouts_dir).to eq Hanami::View.config.layouts_dir
|
44
43
|
end
|
45
44
|
|
46
|
-
it "allows settings to be configured independently of the base view
|
45
|
+
it "allows settings to be configured independently of the base view config" do
|
47
46
|
expect { views.layouts_dir = "custom_layouts" }
|
48
47
|
.to change { views.layouts_dir }.to("custom_layouts")
|
49
48
|
.and(dont.change { Hanami::View.config.layouts_dir })
|
@@ -71,7 +70,7 @@ RSpec.describe Hanami::Configuration, "#views" do
|
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
|
-
describe "finalized
|
73
|
+
describe "finalized config" do
|
75
74
|
before do
|
76
75
|
views.finalize!
|
77
76
|
end
|
@@ -97,7 +96,7 @@ RSpec.describe Hanami::Configuration, "#views" do
|
|
97
96
|
end
|
98
97
|
|
99
98
|
it "does not expose any settings" do
|
100
|
-
is_expected.not_to be_an_instance_of(Hanami::
|
99
|
+
is_expected.not_to be_an_instance_of(Hanami::Config::Views)
|
101
100
|
is_expected.not_to respond_to(:layouts_dir)
|
102
101
|
is_expected.not_to respond_to(:layouts_dir=)
|
103
102
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require "hanami/
|
1
|
+
require "hanami/config"
|
2
2
|
|
3
|
-
RSpec.describe Hanami::
|
3
|
+
RSpec.describe Hanami::Config do
|
4
4
|
let(:config) { described_class.new(app_name: app_name, env: env) }
|
5
5
|
let(:app_name) { "MyApp::app" }
|
6
6
|
let(:env) { :development }
|
7
7
|
|
8
|
-
describe "environment-specific
|
8
|
+
describe "environment-specific config" do
|
9
9
|
before do
|
10
10
|
config.logger.level = :debug__set_without_env
|
11
11
|
end
|
@@ -5,51 +5,106 @@ require "hanami/settings"
|
|
5
5
|
RSpec.describe Hanami::Settings do
|
6
6
|
describe "#initialize" do
|
7
7
|
it "uses values from the store when present" do
|
8
|
-
|
8
|
+
settings_class = Class.new(described_class) do
|
9
9
|
setting :database_url, default: "postgres://localhost/test_app_development"
|
10
10
|
end
|
11
|
-
store = { database_url: "mysql://localhost/test_app_development" }.freeze
|
12
11
|
|
13
|
-
|
12
|
+
store = {database_url: "mysql://localhost/test_app_development"}.freeze
|
13
|
+
|
14
|
+
instance = settings_class.new(store)
|
14
15
|
|
15
16
|
expect(instance.config.database_url).to eq("mysql://localhost/test_app_development")
|
16
17
|
end
|
17
18
|
|
18
19
|
it "uses defaults when values are not present in the store" do
|
19
|
-
|
20
|
+
settings_class = Class.new(described_class) do
|
20
21
|
setting :database_url, default: "postgres://localhost/test_app_development"
|
21
22
|
end
|
23
|
+
|
22
24
|
store = {}.freeze
|
23
25
|
|
24
|
-
instance =
|
26
|
+
instance = settings_class.new(store)
|
25
27
|
|
26
28
|
expect(instance.config.database_url).to eq("postgres://localhost/test_app_development")
|
27
29
|
end
|
28
30
|
|
29
|
-
it "collects error for all
|
30
|
-
|
31
|
+
it "collects error for all setting values failing their constructors" do
|
32
|
+
settings_class = Class.new(described_class) do
|
31
33
|
setting :database_url, constructor: ->(_v) { raise "nope to database" }
|
32
34
|
setting :redis_url, constructor: ->(_v) { raise "nope to redis" }
|
33
35
|
end
|
36
|
+
|
34
37
|
store = {
|
35
38
|
database_url: "postgres://localhost/test_app_development",
|
36
39
|
redis_url: "redis://localhost:6379"
|
37
40
|
}.freeze
|
38
41
|
|
39
|
-
expect {
|
42
|
+
expect { settings_class.new(store) }.to raise_error(
|
40
43
|
described_class::InvalidSettingsError,
|
41
44
|
/(database_url: nope to database).*(redis_url: nope to redis)/m,
|
42
45
|
)
|
43
46
|
end
|
47
|
+
|
48
|
+
it "collects errors for missing settings failing their constructors" do
|
49
|
+
settings_class = Class.new(described_class) do
|
50
|
+
setting :database_url, constructor: ->(_v) { raise "nope to database" }
|
51
|
+
end
|
52
|
+
|
53
|
+
store = {}
|
54
|
+
|
55
|
+
expect { settings_class.new(store) }.to raise_error(
|
56
|
+
described_class::InvalidSettingsError,
|
57
|
+
/database_url: nope to database/m,
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "finalizes the config" do
|
62
|
+
settings_class = Class.new(described_class) do
|
63
|
+
setting :database_url
|
64
|
+
end
|
65
|
+
|
66
|
+
store = {database_url: "postgres://localhost/test_app_development"}
|
67
|
+
|
68
|
+
settings = settings_class.new(store)
|
69
|
+
|
70
|
+
expect(settings.config).to be_frozen
|
71
|
+
expect { settings.database_url = "new" }.to raise_error(Dry::Configurable::FrozenConfig)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#inspect" do
|
76
|
+
it "shows keys" do
|
77
|
+
settings_class = Class.new(described_class) do
|
78
|
+
setting :password, default: "dont_tell_anybody"
|
79
|
+
setting :passphrase, default: "shhhh"
|
80
|
+
end
|
81
|
+
|
82
|
+
expect(settings_class.new.inspect).to eq(
|
83
|
+
"#<#{settings_class.to_s} [password, passphrase]>"
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#inspect_values" do
|
89
|
+
it "shows keys & values" do
|
90
|
+
settings_class = Class.new(described_class) do
|
91
|
+
setting :password, default: "dont_tell_anybody"
|
92
|
+
setting :passphrase, default: "shhh"
|
93
|
+
end
|
94
|
+
|
95
|
+
expect(settings_class.new.inspect_values).to eq(
|
96
|
+
"#<#{settings_class.to_s} password=\"dont_tell_anybody\" passphrase=\"shhh\">"
|
97
|
+
)
|
98
|
+
end
|
44
99
|
end
|
45
100
|
|
46
101
|
it "delegates unknown methods to config" do
|
47
|
-
|
102
|
+
settings_class = Class.new(described_class) do
|
48
103
|
setting :foo, default: "bar"
|
49
104
|
end
|
50
105
|
store = {}.freeze
|
51
106
|
|
52
|
-
instance =
|
107
|
+
instance = settings_class.new(store)
|
53
108
|
|
54
109
|
expect(instance.foo).to eq("bar")
|
55
110
|
end
|
@@ -28,8 +28,6 @@ RSpec.describe Hanami::SliceConfigurable, :app_integration do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
Hanami.app.prepare
|
33
31
|
end
|
34
32
|
|
35
33
|
context "subclass inside slice namespace" do
|
@@ -101,4 +99,25 @@ RSpec.describe Hanami::SliceConfigurable, :app_integration do
|
|
101
99
|
end
|
102
100
|
end
|
103
101
|
end
|
102
|
+
|
103
|
+
context "subclass inside nested slice namespace" do
|
104
|
+
before do
|
105
|
+
module Main
|
106
|
+
class Slice
|
107
|
+
register_slice :nested
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
module Nested
|
112
|
+
class MySubclass < TestApp::BaseClass
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
subject(:subclass) { Nested::MySubclass }
|
118
|
+
|
119
|
+
it "calls `configure_for_slice` with the nested slice" do
|
120
|
+
expect(subclass.traces).to eq [Nested::Slice]
|
121
|
+
end
|
122
|
+
end
|
104
123
|
end
|
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.
|
4
|
+
version: 2.0.0.beta4
|
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-
|
11
|
+
date: 2022-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -36,28 +36,40 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0.
|
39
|
+
version: '0.16'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.16.1
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
47
|
- - "~>"
|
45
48
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
49
|
+
version: '0.16'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.16.1
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: dry-core
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
50
56
|
requirements:
|
51
57
|
- - "~>"
|
52
58
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
59
|
+
version: '0.9'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.9.1
|
54
63
|
type: :runtime
|
55
64
|
prerelease: false
|
56
65
|
version_requirements: !ruby/object:Gem::Requirement
|
57
66
|
requirements:
|
58
67
|
- - "~>"
|
59
68
|
- !ruby/object:Gem::Version
|
60
|
-
version: '0.
|
69
|
+
version: '0.9'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.9.1
|
61
73
|
- !ruby/object:Gem::Dependency
|
62
74
|
name: dry-inflector
|
63
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,40 +96,40 @@ dependencies:
|
|
84
96
|
requirements:
|
85
97
|
- - "~>"
|
86
98
|
- !ruby/object:Gem::Version
|
87
|
-
version: '0.
|
99
|
+
version: '0.27'
|
88
100
|
- - ">="
|
89
101
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
102
|
+
version: 0.27.2
|
91
103
|
type: :runtime
|
92
104
|
prerelease: false
|
93
105
|
version_requirements: !ruby/object:Gem::Requirement
|
94
106
|
requirements:
|
95
107
|
- - "~>"
|
96
108
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
109
|
+
version: '0.27'
|
98
110
|
- - ">="
|
99
111
|
- !ruby/object:Gem::Version
|
100
|
-
version: 0.
|
112
|
+
version: 0.27.2
|
101
113
|
- !ruby/object:Gem::Dependency
|
102
114
|
name: dry-monitor
|
103
115
|
requirement: !ruby/object:Gem::Requirement
|
104
116
|
requirements:
|
105
117
|
- - "~>"
|
106
118
|
- !ruby/object:Gem::Version
|
107
|
-
version: '0.
|
119
|
+
version: '0.7'
|
108
120
|
- - ">="
|
109
121
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
122
|
+
version: '0.7'
|
111
123
|
type: :runtime
|
112
124
|
prerelease: false
|
113
125
|
version_requirements: !ruby/object:Gem::Requirement
|
114
126
|
requirements:
|
115
127
|
- - "~>"
|
116
128
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0.
|
129
|
+
version: '0.7'
|
118
130
|
- - ">="
|
119
131
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
132
|
+
version: '0.7'
|
121
133
|
- !ruby/object:Gem::Dependency
|
122
134
|
name: hanami-cli
|
123
135
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,14 +164,14 @@ dependencies:
|
|
152
164
|
requirements:
|
153
165
|
- - "~>"
|
154
166
|
- !ruby/object:Gem::Version
|
155
|
-
version: '2.
|
167
|
+
version: '2.6'
|
156
168
|
type: :runtime
|
157
169
|
prerelease: false
|
158
170
|
version_requirements: !ruby/object:Gem::Requirement
|
159
171
|
requirements:
|
160
172
|
- - "~>"
|
161
173
|
- !ruby/object:Gem::Version
|
162
|
-
version: '2.
|
174
|
+
version: '2.6'
|
163
175
|
- !ruby/object:Gem::Dependency
|
164
176
|
name: rspec
|
165
177
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,19 +229,19 @@ files:
|
|
217
229
|
- hanami.gemspec
|
218
230
|
- lib/hanami.rb
|
219
231
|
- lib/hanami/app.rb
|
220
|
-
- lib/hanami/assets/
|
221
|
-
- lib/hanami/assets/
|
232
|
+
- lib/hanami/assets/app_config.rb
|
233
|
+
- lib/hanami/assets/config.rb
|
222
234
|
- lib/hanami/boot.rb
|
223
|
-
- lib/hanami/
|
224
|
-
- lib/hanami/
|
225
|
-
- lib/hanami/
|
226
|
-
- lib/hanami/
|
227
|
-
- lib/hanami/
|
228
|
-
- lib/hanami/
|
229
|
-
- lib/hanami/
|
230
|
-
- lib/hanami/
|
231
|
-
- lib/hanami/
|
232
|
-
- lib/hanami/
|
235
|
+
- lib/hanami/config.rb
|
236
|
+
- lib/hanami/config/actions.rb
|
237
|
+
- lib/hanami/config/actions/content_security_policy.rb
|
238
|
+
- lib/hanami/config/actions/cookies.rb
|
239
|
+
- lib/hanami/config/actions/sessions.rb
|
240
|
+
- lib/hanami/config/logger.rb
|
241
|
+
- lib/hanami/config/null_config.rb
|
242
|
+
- lib/hanami/config/router.rb
|
243
|
+
- lib/hanami/config/sessions.rb
|
244
|
+
- lib/hanami/config/views.rb
|
233
245
|
- lib/hanami/constants.rb
|
234
246
|
- lib/hanami/errors.rb
|
235
247
|
- lib/hanami/extensions.rb
|
@@ -244,7 +256,6 @@ files:
|
|
244
256
|
- lib/hanami/providers/logger.rb
|
245
257
|
- lib/hanami/providers/rack.rb
|
246
258
|
- lib/hanami/providers/routes.rb
|
247
|
-
- lib/hanami/providers/settings.rb
|
248
259
|
- lib/hanami/rake_tasks.rb
|
249
260
|
- lib/hanami/routes.rb
|
250
261
|
- lib/hanami/settings.rb
|
@@ -282,19 +293,21 @@ files:
|
|
282
293
|
- spec/integration/container/shutdown_spec.rb
|
283
294
|
- spec/integration/container/standard_bootable_components_spec.rb
|
284
295
|
- spec/integration/dotenv_loading_spec.rb
|
296
|
+
- spec/integration/rack_app/body_parser_spec.rb
|
285
297
|
- spec/integration/rack_app/middleware_spec.rb
|
286
298
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
287
299
|
- spec/integration/rack_app/rack_app_spec.rb
|
300
|
+
- spec/integration/settings/access_in_slice_class_body_spec.rb
|
288
301
|
- spec/integration/settings/access_to_constants_spec.rb
|
289
302
|
- spec/integration/settings/loading_from_env_spec.rb
|
290
303
|
- spec/integration/settings/settings_component_loading_spec.rb
|
304
|
+
- spec/integration/settings/slice_registration_spec.rb
|
291
305
|
- spec/integration/settings/using_types_spec.rb
|
292
306
|
- spec/integration/setup_spec.rb
|
293
307
|
- spec/integration/slices/external_slice_spec.rb
|
294
308
|
- spec/integration/slices/slice_configuration_spec.rb
|
295
309
|
- spec/integration/slices/slice_loading_spec.rb
|
296
310
|
- spec/integration/slices/slice_routing_spec.rb
|
297
|
-
- spec/integration/slices/slice_settings_spec.rb
|
298
311
|
- spec/integration/slices_spec.rb
|
299
312
|
- spec/integration/view/context/assets_spec.rb
|
300
313
|
- spec/integration/view/context/inflector_spec.rb
|
@@ -322,19 +335,19 @@ files:
|
|
322
335
|
- spec/support/shared_examples/cli/generate/migration.rb
|
323
336
|
- spec/support/shared_examples/cli/generate/model.rb
|
324
337
|
- spec/support/shared_examples/cli/new.rb
|
325
|
-
- spec/unit/hanami/
|
326
|
-
- spec/unit/hanami/
|
327
|
-
- spec/unit/hanami/
|
328
|
-
- spec/unit/hanami/
|
329
|
-
- spec/unit/hanami/
|
330
|
-
- spec/unit/hanami/
|
331
|
-
- spec/unit/hanami/
|
332
|
-
- spec/unit/hanami/
|
333
|
-
- spec/unit/hanami/
|
334
|
-
- spec/unit/hanami/
|
335
|
-
- spec/unit/hanami/
|
336
|
-
- spec/unit/hanami/
|
337
|
-
- spec/unit/hanami/
|
338
|
+
- spec/unit/hanami/config/actions/content_security_policy_spec.rb
|
339
|
+
- spec/unit/hanami/config/actions/cookies_spec.rb
|
340
|
+
- spec/unit/hanami/config/actions/csrf_protection_spec.rb
|
341
|
+
- spec/unit/hanami/config/actions/default_values_spec.rb
|
342
|
+
- spec/unit/hanami/config/actions/sessions_spec.rb
|
343
|
+
- spec/unit/hanami/config/actions_spec.rb
|
344
|
+
- spec/unit/hanami/config/base_url_spec.rb
|
345
|
+
- spec/unit/hanami/config/inflector_spec.rb
|
346
|
+
- spec/unit/hanami/config/logger_spec.rb
|
347
|
+
- spec/unit/hanami/config/router_spec.rb
|
348
|
+
- spec/unit/hanami/config/slices_spec.rb
|
349
|
+
- spec/unit/hanami/config/views_spec.rb
|
350
|
+
- spec/unit/hanami/config_spec.rb
|
338
351
|
- spec/unit/hanami/env_spec.rb
|
339
352
|
- spec/unit/hanami/settings/env_store_spec.rb
|
340
353
|
- spec/unit/hanami/settings_spec.rb
|
@@ -364,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
364
377
|
- !ruby/object:Gem::Version
|
365
378
|
version: 1.3.1
|
366
379
|
requirements: []
|
367
|
-
rubygems_version: 3.3.
|
380
|
+
rubygems_version: 3.3.7
|
368
381
|
signing_key:
|
369
382
|
specification_version: 4
|
370
383
|
summary: The web, with simplicity
|
@@ -390,19 +403,21 @@ test_files:
|
|
390
403
|
- spec/integration/container/shutdown_spec.rb
|
391
404
|
- spec/integration/container/standard_bootable_components_spec.rb
|
392
405
|
- spec/integration/dotenv_loading_spec.rb
|
406
|
+
- spec/integration/rack_app/body_parser_spec.rb
|
393
407
|
- spec/integration/rack_app/middleware_spec.rb
|
394
408
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
395
409
|
- spec/integration/rack_app/rack_app_spec.rb
|
410
|
+
- spec/integration/settings/access_in_slice_class_body_spec.rb
|
396
411
|
- spec/integration/settings/access_to_constants_spec.rb
|
397
412
|
- spec/integration/settings/loading_from_env_spec.rb
|
398
413
|
- spec/integration/settings/settings_component_loading_spec.rb
|
414
|
+
- spec/integration/settings/slice_registration_spec.rb
|
399
415
|
- spec/integration/settings/using_types_spec.rb
|
400
416
|
- spec/integration/setup_spec.rb
|
401
417
|
- spec/integration/slices/external_slice_spec.rb
|
402
418
|
- spec/integration/slices/slice_configuration_spec.rb
|
403
419
|
- spec/integration/slices/slice_loading_spec.rb
|
404
420
|
- spec/integration/slices/slice_routing_spec.rb
|
405
|
-
- spec/integration/slices/slice_settings_spec.rb
|
406
421
|
- spec/integration/slices_spec.rb
|
407
422
|
- spec/integration/view/context/assets_spec.rb
|
408
423
|
- spec/integration/view/context/inflector_spec.rb
|
@@ -430,19 +445,19 @@ test_files:
|
|
430
445
|
- spec/support/shared_examples/cli/generate/migration.rb
|
431
446
|
- spec/support/shared_examples/cli/generate/model.rb
|
432
447
|
- spec/support/shared_examples/cli/new.rb
|
433
|
-
- spec/unit/hanami/
|
434
|
-
- spec/unit/hanami/
|
435
|
-
- spec/unit/hanami/
|
436
|
-
- spec/unit/hanami/
|
437
|
-
- spec/unit/hanami/
|
438
|
-
- spec/unit/hanami/
|
439
|
-
- spec/unit/hanami/
|
440
|
-
- spec/unit/hanami/
|
441
|
-
- spec/unit/hanami/
|
442
|
-
- spec/unit/hanami/
|
443
|
-
- spec/unit/hanami/
|
444
|
-
- spec/unit/hanami/
|
445
|
-
- spec/unit/hanami/
|
448
|
+
- spec/unit/hanami/config/actions/content_security_policy_spec.rb
|
449
|
+
- spec/unit/hanami/config/actions/cookies_spec.rb
|
450
|
+
- spec/unit/hanami/config/actions/csrf_protection_spec.rb
|
451
|
+
- spec/unit/hanami/config/actions/default_values_spec.rb
|
452
|
+
- spec/unit/hanami/config/actions/sessions_spec.rb
|
453
|
+
- spec/unit/hanami/config/actions_spec.rb
|
454
|
+
- spec/unit/hanami/config/base_url_spec.rb
|
455
|
+
- spec/unit/hanami/config/inflector_spec.rb
|
456
|
+
- spec/unit/hanami/config/logger_spec.rb
|
457
|
+
- spec/unit/hanami/config/router_spec.rb
|
458
|
+
- spec/unit/hanami/config/slices_spec.rb
|
459
|
+
- spec/unit/hanami/config/views_spec.rb
|
460
|
+
- spec/unit/hanami/config_spec.rb
|
446
461
|
- spec/unit/hanami/env_spec.rb
|
447
462
|
- spec/unit/hanami/settings/env_store_spec.rb
|
448
463
|
- spec/unit/hanami/settings_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "dry/configurable"
|
4
|
-
|
5
|
-
module Hanami
|
6
|
-
class Configuration
|
7
|
-
# NullConfiguration can serve as a fallback configuration object when out-of-gem
|
8
|
-
# configuration objects are not available (specifically, when the
|
9
|
-
# hanami-controller, hanami-router or hanami-view gems are not loaded)
|
10
|
-
class NullConfiguration
|
11
|
-
include Dry::Configurable
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "dry/system/provider/source"
|
4
|
-
require_relative "../constants"
|
5
|
-
require_relative "../errors"
|
6
|
-
|
7
|
-
module Hanami
|
8
|
-
module Providers
|
9
|
-
# The settings provider loads and registers the "settings" component in app and slice
|
10
|
-
# containers.
|
11
|
-
#
|
12
|
-
# To register this provider with a slice container, you should use
|
13
|
-
# {.register_with_slice}, which will register the provider only if settings are
|
14
|
-
# defined for the slice.
|
15
|
-
#
|
16
|
-
# @see Slice::ClassMethods.prepare_container_providers
|
17
|
-
#
|
18
|
-
# @api private
|
19
|
-
# @since 2.0.0
|
20
|
-
class Settings < Dry::System::Provider::Source
|
21
|
-
class << self
|
22
|
-
# Registers the provider with the slice's container, but only if settings are
|
23
|
-
# defined for the slice.
|
24
|
-
def register_with_slice(slice)
|
25
|
-
return unless settings_defined?(slice)
|
26
|
-
|
27
|
-
slice.register_provider(:settings, source: with_slice(slice))
|
28
|
-
end
|
29
|
-
|
30
|
-
# Creates a new subclass of the provider for the given slice.
|
31
|
-
#
|
32
|
-
# You must do this before registering the provider with a container. The provider
|
33
|
-
# uses the slice to locate the settings definition based on the slice's config.
|
34
|
-
def with_slice(slice)
|
35
|
-
Class.new(self) do |klass|
|
36
|
-
klass.instance_variable_set(:@slice, slice)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Returns the slice for the provider
|
41
|
-
def slice
|
42
|
-
unless @slice
|
43
|
-
raise SliceLoadError, "a slice must be given to #{self} via `.with_slice(slice)`"
|
44
|
-
end
|
45
|
-
|
46
|
-
@slice
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
# Returns true if settings are defined for the slice.
|
52
|
-
#
|
53
|
-
# Settings are considered defined if a `Settings` class is already defined in the
|
54
|
-
# slice namespace, or a `config/settings.rb` exists under the slice root.
|
55
|
-
def settings_defined?(slice)
|
56
|
-
slice.namespace.const_defined?(SETTINGS_CLASS_NAME) ||
|
57
|
-
slice.root.join("#{SETTINGS_PATH}#{RB_EXT}").file?
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def prepare
|
62
|
-
require_slice_settings unless slice_settings_class?
|
63
|
-
end
|
64
|
-
|
65
|
-
def start
|
66
|
-
settings = slice_settings_class.new(slice.config.settings_store)
|
67
|
-
|
68
|
-
register :settings, settings
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
def slice
|
74
|
-
self.class.slice
|
75
|
-
end
|
76
|
-
|
77
|
-
def slice_settings_class?
|
78
|
-
slice.namespace.const_defined?(SETTINGS_CLASS_NAME)
|
79
|
-
end
|
80
|
-
|
81
|
-
def slice_settings_class
|
82
|
-
slice.namespace.const_get(SETTINGS_CLASS_NAME)
|
83
|
-
end
|
84
|
-
|
85
|
-
def require_slice_settings
|
86
|
-
require "hanami/settings"
|
87
|
-
|
88
|
-
slice_settings_require_path = File.join(slice.root, SETTINGS_PATH)
|
89
|
-
|
90
|
-
begin
|
91
|
-
require slice_settings_require_path
|
92
|
-
rescue LoadError => e
|
93
|
-
raise e unless e.path == slice_settings_require_path
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|