hanami 2.0.0.beta3 → 2.0.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -9,161 +9,38 @@ RSpec.describe "Settings / Access to constants", :app_integration do
|
|
9
9
|
ENV.replace(@env)
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
class App < Hanami::App
|
21
|
-
end
|
22
|
-
end
|
23
|
-
RUBY
|
24
|
-
|
25
|
-
write ".env", <<~'TEXT'
|
26
|
-
SOME_FLAG=true
|
27
|
-
TEXT
|
28
|
-
|
29
|
-
write "config/settings.rb", <<~'RUBY'
|
30
|
-
module TestApp
|
31
|
-
class Settings < Hanami::Settings
|
32
|
-
setting :some_flag, constructor: Types::Params::Bool
|
33
|
-
end
|
34
|
-
end
|
35
|
-
RUBY
|
36
|
-
|
37
|
-
write "app/types.rb", <<~'RUBY'
|
38
|
-
# auto_register: false
|
39
|
-
|
40
|
-
require "dry/types"
|
41
|
-
|
42
|
-
module TestApp
|
43
|
-
Types = Dry.Types()
|
44
|
-
end
|
45
|
-
RUBY
|
46
|
-
|
47
|
-
require "hanami/prepare"
|
48
|
-
|
49
|
-
expect(Hanami.app[:settings].some_flag).to be true
|
12
|
+
specify "Settings can not access autoloadable constants" do
|
13
|
+
with_directory(make_tmp_directory) do
|
14
|
+
write "config/app.rb", <<~'RUBY'
|
15
|
+
require "hanami"
|
16
|
+
|
17
|
+
module TestApp
|
18
|
+
class App < Hanami::App
|
19
|
+
end
|
50
20
|
end
|
51
|
-
|
52
|
-
|
53
|
-
specify "constant defined in root lib directory" do
|
54
|
-
with_directory(make_tmp_directory) do
|
55
|
-
write "config/app.rb", <<~'RUBY'
|
56
|
-
require "hanami"
|
57
|
-
|
58
|
-
module TestApp
|
59
|
-
class App < Hanami::App
|
60
|
-
end
|
61
|
-
end
|
62
|
-
RUBY
|
63
|
-
|
64
|
-
write ".env", <<~'TEXT'
|
65
|
-
SOME_FLAG=true
|
66
|
-
TEXT
|
67
|
-
|
68
|
-
write "config/settings.rb", <<~'RUBY'
|
69
|
-
module TestApp
|
70
|
-
class Settings < Hanami::Settings
|
71
|
-
setting :some_flag, constructor: Types::Params::Bool
|
72
|
-
end
|
73
|
-
end
|
74
|
-
RUBY
|
75
|
-
|
76
|
-
write "lib/test_app/types.rb", <<~'RUBY'
|
77
|
-
require "dry/types"
|
78
|
-
|
79
|
-
module TestApp
|
80
|
-
Types = Dry.Types()
|
81
|
-
end
|
82
|
-
RUBY
|
83
|
-
|
84
|
-
require "hanami/prepare"
|
21
|
+
RUBY
|
85
22
|
|
86
|
-
|
23
|
+
write "config/settings.rb", <<~'RUBY'
|
24
|
+
module TestApp
|
25
|
+
class Settings < Hanami::Settings
|
26
|
+
setting :some_flag, constructor: TestApp::Types::Params::Bool
|
27
|
+
end
|
87
28
|
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "settings for slice" do
|
92
|
-
specify "constant defined in slice directory" do
|
93
|
-
with_directory(make_tmp_directory) do
|
94
|
-
write "config/app.rb", <<~'RUBY'
|
95
|
-
require "hanami"
|
96
|
-
|
97
|
-
module TestApp
|
98
|
-
class App < Hanami::App
|
99
|
-
end
|
100
|
-
end
|
101
|
-
RUBY
|
102
|
-
|
103
|
-
write ".env", <<~'TEXT'
|
104
|
-
SOME_FLAG=true
|
105
|
-
TEXT
|
106
|
-
|
107
|
-
write "slices/main/config/settings.rb", <<~'RUBY'
|
108
|
-
module Main
|
109
|
-
class Settings < Hanami::Settings
|
110
|
-
setting :some_flag, constructor: Types::Params::Bool
|
111
|
-
end
|
112
|
-
end
|
113
|
-
RUBY
|
114
|
-
|
115
|
-
write "slices/main/types.rb", <<~'RUBY'
|
116
|
-
# auto_register: false
|
117
|
-
|
118
|
-
require "dry/types"
|
29
|
+
RUBY
|
119
30
|
|
120
|
-
|
121
|
-
|
122
|
-
end
|
123
|
-
RUBY
|
31
|
+
write "app/types.rb", <<~'RUBY'
|
32
|
+
# auto_register: false
|
124
33
|
|
125
|
-
|
34
|
+
require "dry/types"
|
126
35
|
|
127
|
-
|
36
|
+
module TestApp
|
37
|
+
Types = Dry.Types()
|
128
38
|
end
|
129
|
-
|
39
|
+
RUBY
|
130
40
|
|
131
|
-
|
132
|
-
with_directory(make_tmp_directory) do
|
133
|
-
write "config/app.rb", <<~'RUBY'
|
134
|
-
require "hanami"
|
41
|
+
require "hanami/setup"
|
135
42
|
|
136
|
-
|
137
|
-
class App < Hanami::App
|
138
|
-
end
|
139
|
-
end
|
140
|
-
RUBY
|
141
|
-
|
142
|
-
write ".env", <<~'TEXT'
|
143
|
-
SOME_FLAG=true
|
144
|
-
TEXT
|
145
|
-
|
146
|
-
write "slices/main/config/settings.rb", <<~'RUBY'
|
147
|
-
module Main
|
148
|
-
class Settings < Hanami::Settings
|
149
|
-
setting :some_flag, constructor: TestApp::Types::Params::Bool
|
150
|
-
end
|
151
|
-
end
|
152
|
-
RUBY
|
153
|
-
|
154
|
-
write "lib/test_app/types.rb", <<~'RUBY'
|
155
|
-
require "dry/types"
|
156
|
-
|
157
|
-
module TestApp
|
158
|
-
Types = Dry.Types()
|
159
|
-
end
|
160
|
-
RUBY
|
161
|
-
|
162
|
-
require "hanami/prepare"
|
163
|
-
|
164
|
-
expect(Main::Slice[:settings].some_flag).to be true
|
165
|
-
end
|
166
|
-
end
|
43
|
+
expect { Hanami.app.settings }.to raise_error(NameError, /TestApp::Types/)
|
167
44
|
end
|
168
45
|
end
|
169
46
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe "Settings / Slice registration", :app_integration do
|
2
4
|
specify "Settings are registered for each slice with a settings file" do
|
3
5
|
with_tmp_directory(Dir.mktmpdir) do
|
4
6
|
write "config/app.rb", <<~RUBY
|
@@ -10,6 +12,8 @@ RSpec.describe "Slices / Slice settings", :app_integration do
|
|
10
12
|
end
|
11
13
|
RUBY
|
12
14
|
|
15
|
+
# n.b. no app-level settings file
|
16
|
+
|
13
17
|
# The main slice has settings
|
14
18
|
write "slices/main/config/settings.rb", <<~RUBY
|
15
19
|
# frozen_string_literal: true
|
@@ -11,7 +11,7 @@ RSpec.describe "Settings / Using types", :app_integration do
|
|
11
11
|
ENV.replace(@env)
|
12
12
|
end
|
13
13
|
|
14
|
-
specify "
|
14
|
+
specify "types from a provided types module can be used as setting constructors to coerce values" do
|
15
15
|
with_tmp_directory(Dir.mktmpdir) do
|
16
16
|
write "config/app.rb", <<~RUBY
|
17
17
|
require "hanami"
|
@@ -23,14 +23,12 @@ RSpec.describe "Settings / Using types", :app_integration do
|
|
23
23
|
RUBY
|
24
24
|
|
25
25
|
write "config/settings.rb", <<~RUBY
|
26
|
-
require "dry/types"
|
27
|
-
|
28
26
|
module TestApp
|
29
27
|
class Settings < Hanami::Settings
|
30
|
-
|
28
|
+
Bool = Types::Params::Bool
|
31
29
|
|
32
30
|
setting :numeric, constructor: Types::Params::Integer
|
33
|
-
setting :flag, constructor:
|
31
|
+
setting :flag, constructor: Bool
|
34
32
|
end
|
35
33
|
end
|
36
34
|
RUBY
|
@@ -45,7 +43,7 @@ RSpec.describe "Settings / Using types", :app_integration do
|
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
48
|
-
specify "errors raised from setting constructors are collected and re-raised in aggregate" do
|
46
|
+
specify "errors raised from setting constructors are collected and re-raised in aggregate, and will prevent the app from booting" do
|
49
47
|
with_tmp_directory(Dir.mktmpdir) do
|
50
48
|
write "config/app.rb", <<~RUBY
|
51
49
|
require "hanami"
|
@@ -57,12 +55,8 @@ RSpec.describe "Settings / Using types", :app_integration do
|
|
57
55
|
RUBY
|
58
56
|
|
59
57
|
write "config/settings.rb", <<~RUBY
|
60
|
-
require "dry/types"
|
61
|
-
|
62
58
|
module TestApp
|
63
59
|
class Settings < Hanami::Settings
|
64
|
-
Types = Dry.Types()
|
65
|
-
|
66
60
|
setting :numeric, constructor: Types::Params::Integer
|
67
61
|
setting :flag, constructor: Types::Params::Bool
|
68
62
|
end
|
@@ -83,5 +77,4 @@ RSpec.describe "Settings / Using types", :app_integration do
|
|
83
77
|
)
|
84
78
|
end
|
85
79
|
end
|
86
|
-
|
87
80
|
end
|
@@ -23,6 +23,23 @@ RSpec.shared_context "Application integration" do
|
|
23
23
|
let(:app_modules) { %i[TestApp Admin Main Search] }
|
24
24
|
end
|
25
25
|
|
26
|
+
def autoloaders_teardown!
|
27
|
+
# Tear down Zeitwerk (from zeitwerk's own test/support/loader_test)
|
28
|
+
Zeitwerk::Registry.loaders.reject! do |loader|
|
29
|
+
test_loader = loader.dirs.any? { |dir|
|
30
|
+
dir.include?("/spec/") || dir.include?(Dir.tmpdir) ||
|
31
|
+
dir.include?("/slices/") || dir.include?("/app")
|
32
|
+
}
|
33
|
+
|
34
|
+
if test_loader
|
35
|
+
loader.unregister
|
36
|
+
true
|
37
|
+
else
|
38
|
+
false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
26
43
|
RSpec.configure do |config|
|
27
44
|
config.include RSpec::Support::Files, :app_integration
|
28
45
|
config.include RSpec::Support::WithTmpDirectory, :app_integration
|
@@ -36,21 +53,7 @@ RSpec.configure do |config|
|
|
36
53
|
end
|
37
54
|
|
38
55
|
config.after :each, :app_integration do
|
39
|
-
|
40
|
-
Zeitwerk::Registry.loaders.each(&:unload)
|
41
|
-
Zeitwerk::Registry.loaders.clear
|
42
|
-
|
43
|
-
# This private interface changes between 2.5.4 and 2.6.0
|
44
|
-
if Zeitwerk::Registry.respond_to?(:loaders_managing_gems)
|
45
|
-
Zeitwerk::Registry.loaders_managing_gems.clear
|
46
|
-
else
|
47
|
-
Zeitwerk::Registry.gem_loaders_by_root_file.clear
|
48
|
-
Zeitwerk::Registry.autoloads.clear
|
49
|
-
Zeitwerk::Registry.inceptions.clear
|
50
|
-
end
|
51
|
-
|
52
|
-
Zeitwerk::ExplicitNamespace.cpaths.clear
|
53
|
-
Zeitwerk::ExplicitNamespace.tracer.disable
|
56
|
+
autoloaders_teardown!
|
54
57
|
|
55
58
|
Hanami.instance_variable_set(:@_bundled, {})
|
56
59
|
Hanami.remove_instance_variable(:@_app) if Hanami.instance_variable_defined?(:@_app)
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config/actions"
|
4
4
|
|
5
|
-
RSpec.describe Hanami::
|
6
|
-
let(:
|
7
|
-
subject(:content_security_policy) {
|
5
|
+
RSpec.describe Hanami::Config::Actions, "#content_security_policy" do
|
6
|
+
let(:config) { described_class.new }
|
7
|
+
subject(:content_security_policy) { config.content_security_policy }
|
8
8
|
|
9
9
|
context "no CSP config specified" do
|
10
10
|
context "without assets_server_url" do
|
@@ -34,7 +34,7 @@ RSpec.describe Hanami::Configuration::Actions, "#content_security_policy" do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
context "with assets_server_url" do
|
37
|
-
let(:
|
37
|
+
let(:config) { described_class.new(assets_server_url: assets_server_url) }
|
38
38
|
let(:assets_server_url) { "http://localhost:8080" }
|
39
39
|
|
40
40
|
it "includes server url" do
|
@@ -85,18 +85,18 @@ RSpec.describe Hanami::Configuration::Actions, "#content_security_policy" do
|
|
85
85
|
|
86
86
|
context "with CSP enabled" do
|
87
87
|
it "sets default header" do
|
88
|
-
|
88
|
+
config.finalize!
|
89
89
|
|
90
|
-
expect(
|
90
|
+
expect(config.default_headers.fetch("Content-Security-Policy")).to eq(content_security_policy.to_str)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
94
|
context "with CSP disabled" do
|
95
95
|
it "doesn't set default header" do
|
96
|
-
|
97
|
-
|
96
|
+
config.content_security_policy = false
|
97
|
+
config.finalize!
|
98
98
|
|
99
|
-
expect(
|
99
|
+
expect(config.default_headers.key?("Content-Security-Policy")).to be(false)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config/actions"
|
4
4
|
|
5
|
-
RSpec.describe Hanami::
|
6
|
-
let(:
|
7
|
-
subject(:cookies) {
|
5
|
+
RSpec.describe Hanami::Config::Actions, "#cookies" do
|
6
|
+
let(:config) { described_class.new }
|
7
|
+
subject(:cookies) { config.cookies }
|
8
8
|
|
9
9
|
context "default config" do
|
10
10
|
it "is enabled" do
|
@@ -18,7 +18,7 @@ RSpec.describe Hanami::Configuration::Actions, "#cookies" do
|
|
18
18
|
|
19
19
|
context "options given" do
|
20
20
|
before do
|
21
|
-
|
21
|
+
config.cookies = {max_age: 300}
|
22
22
|
end
|
23
23
|
|
24
24
|
it "is enabled" do
|
@@ -32,7 +32,7 @@ RSpec.describe Hanami::Configuration::Actions, "#cookies" do
|
|
32
32
|
|
33
33
|
context "nil value given" do
|
34
34
|
before do
|
35
|
-
|
35
|
+
config.cookies = nil
|
36
36
|
end
|
37
37
|
|
38
38
|
it "is not enabled" do
|
@@ -1,32 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config/actions"
|
4
4
|
|
5
|
-
RSpec.describe Hanami::
|
6
|
-
let(:
|
7
|
-
subject(:value) {
|
5
|
+
RSpec.describe Hanami::Config::Actions, "#csrf_protection" do
|
6
|
+
let(:config) { described_class.new }
|
7
|
+
subject(:value) { config.csrf_protection }
|
8
8
|
|
9
|
-
context "non-finalized
|
9
|
+
context "non-finalized config" do
|
10
10
|
it "returns a default of nil" do
|
11
11
|
is_expected.to be_nil
|
12
12
|
end
|
13
13
|
|
14
14
|
it "can be explicitly enabled" do
|
15
|
-
|
15
|
+
config.csrf_protection = true
|
16
16
|
is_expected.to be true
|
17
17
|
end
|
18
18
|
|
19
19
|
it "can be explicitly disabled" do
|
20
|
-
|
20
|
+
config.csrf_protection = false
|
21
21
|
is_expected.to be false
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
context "finalized
|
25
|
+
context "finalized config" do
|
26
26
|
context "sessions enabled" do
|
27
27
|
before do
|
28
|
-
|
29
|
-
|
28
|
+
config.sessions = :cookie, {secret: "abc"}
|
29
|
+
config.finalize!
|
30
30
|
end
|
31
31
|
|
32
32
|
it "is true" do
|
@@ -35,7 +35,7 @@ RSpec.describe Hanami::Configuration::Actions, "#csrf_protection" do
|
|
35
35
|
|
36
36
|
context "explicitly disabled" do
|
37
37
|
before do
|
38
|
-
|
38
|
+
config.csrf_protection = false
|
39
39
|
end
|
40
40
|
|
41
41
|
it "is false" do
|
@@ -46,7 +46,7 @@ RSpec.describe Hanami::Configuration::Actions, "#csrf_protection" do
|
|
46
46
|
|
47
47
|
context "sessions not enabled" do
|
48
48
|
before do
|
49
|
-
|
49
|
+
config.finalize!
|
50
50
|
end
|
51
51
|
|
52
52
|
it "is true" do
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "hanami/config/actions"
|
4
|
+
|
5
|
+
RSpec.describe Hanami::Config::Actions, "default values" do
|
6
|
+
subject(:config) { described_class.new }
|
7
|
+
|
8
|
+
describe "sessions" do
|
9
|
+
specify { expect(config.sessions).not_to be_enabled }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "name_inference_base" do
|
13
|
+
specify { expect(config.name_inference_base).to eq "actions" }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "view_context_identifier" do
|
17
|
+
specify { expect(config.view_context_identifier).to eq "views.context" }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "view_name_inferrer" do
|
21
|
+
specify { expect(config.view_name_inferrer).to eq Hanami::Slice::ViewNameInferrer }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "view_name_inference_base" do
|
25
|
+
specify { expect(config.view_name_inference_base).to eq "views" }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "new default values applied to base action settings" do
|
29
|
+
describe "default_request_format" do
|
30
|
+
specify { expect(config.default_request_format).to eq :html }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "default_response_format" do
|
34
|
+
specify { expect(config.default_response_format).to eq :html }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "content_security_policy" do
|
38
|
+
specify { expect(config.content_security_policy).to be_kind_of(Hanami::Config::Actions::ContentSecurityPolicy) }
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "default_headers" do
|
42
|
+
specify {
|
43
|
+
config.finalize!
|
44
|
+
|
45
|
+
expect(config.default_headers).to eq(
|
46
|
+
"X-Frame-Options" => "DENY",
|
47
|
+
"X-Content-Type-Options" => "nosniff",
|
48
|
+
"X-XSS-Protection" => "1; mode=block",
|
49
|
+
"Content-Security-Policy" => config.content_security_policy.to_str
|
50
|
+
)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config/actions"
|
4
4
|
|
5
|
-
RSpec.describe Hanami::
|
6
|
-
let(:
|
7
|
-
subject(:sessions) {
|
5
|
+
RSpec.describe Hanami::Config::Actions, "#sessions" do
|
6
|
+
let(:config) { described_class.new }
|
7
|
+
subject(:sessions) { config.sessions }
|
8
8
|
|
9
9
|
context "no session config specified" do
|
10
10
|
it "is not enabled" do
|
@@ -26,7 +26,7 @@ RSpec.describe Hanami::Configuration::Actions, "#sessions" do
|
|
26
26
|
|
27
27
|
context "valid session config provided" do
|
28
28
|
before do
|
29
|
-
|
29
|
+
config.sessions = :cookie, {secret: "abc"}
|
30
30
|
end
|
31
31
|
|
32
32
|
it "is enabled" do
|
@@ -1,18 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
4
|
-
require "hanami/
|
5
|
-
require "hanami/action/configuration"
|
3
|
+
require "hanami/config"
|
4
|
+
require "hanami/action"
|
6
5
|
|
7
|
-
RSpec.describe Hanami::
|
8
|
-
let(:
|
6
|
+
RSpec.describe Hanami::Config, "#actions" do
|
7
|
+
let(:config) { described_class.new(app_name: app_name, env: :development) }
|
9
8
|
let(:app_name) { "MyApp::app" }
|
10
9
|
|
11
|
-
subject(:actions) {
|
10
|
+
subject(:actions) { config.actions }
|
12
11
|
|
13
12
|
context "hanami-controller is bundled" do
|
14
|
-
it "is a full actions
|
15
|
-
is_expected.to be_an_instance_of(Hanami::
|
13
|
+
it "is a full actions config" do
|
14
|
+
is_expected.to be_an_instance_of(Hanami::Config::Actions)
|
16
15
|
|
17
16
|
is_expected.to respond_to(:default_response_format)
|
18
17
|
is_expected.to respond_to(:default_response_format=)
|
@@ -43,7 +42,7 @@ RSpec.describe Hanami::Configuration, "#actions" do
|
|
43
42
|
end
|
44
43
|
|
45
44
|
it "includes all base action settings" do
|
46
|
-
expect(actions.settings).to include(Hanami::Action
|
45
|
+
expect(actions.settings).to include(Hanami::Action.settings)
|
47
46
|
end
|
48
47
|
end
|
49
48
|
end
|
@@ -55,7 +54,7 @@ RSpec.describe Hanami::Configuration, "#actions" do
|
|
55
54
|
end
|
56
55
|
|
57
56
|
it "does not expose any settings" do
|
58
|
-
is_expected.not_to be_an_instance_of(Hanami::
|
57
|
+
is_expected.not_to be_an_instance_of(Hanami::Config::Actions)
|
59
58
|
is_expected.not_to respond_to(:default_response_format)
|
60
59
|
is_expected.not_to respond_to(:default_response_format=)
|
61
60
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config"
|
4
4
|
require "uri"
|
5
5
|
|
6
|
-
RSpec.describe Hanami::
|
6
|
+
RSpec.describe Hanami::Config, "base_url" do
|
7
7
|
subject(:config) { described_class.new(app_name: app_name, env: :development) }
|
8
8
|
let(:app_name) { "MyApp::app" }
|
9
9
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config"
|
4
4
|
|
5
|
-
RSpec.describe Hanami::
|
5
|
+
RSpec.describe Hanami::Config do
|
6
6
|
subject(:config) { described_class.new(app_name: app_name, env: :development) }
|
7
7
|
let(:app_name) { "MyApp::app" }
|
8
8
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
3
|
+
require "hanami/config/logger"
|
4
4
|
require "hanami/slice_name"
|
5
5
|
require "dry/inflector"
|
6
6
|
require "logger"
|
7
7
|
|
8
|
-
RSpec.describe Hanami::
|
8
|
+
RSpec.describe Hanami::Config::Logger do
|
9
9
|
subject { described_class.new(app_name: app_name, env: env) }
|
10
10
|
let(:app_name) { Hanami::SliceName.new(double(name: "MyApp::app"), inflector: -> { Dry::Inflector.new }) }
|
11
11
|
let(:env) { :development }
|
@@ -165,7 +165,7 @@ RSpec.describe Hanami::Configuration::Logger do
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
-
RSpec.describe Hanami::
|
168
|
+
RSpec.describe Hanami::Config do
|
169
169
|
subject(:config) { described_class.new(app_name: app_name, env: env) }
|
170
170
|
let(:app_name) { Hanami::SliceName.new(double(name: "SOS::app"), inflector: -> { Dry::Inflector.new }) }
|
171
171
|
let(:env) { :development }
|
@@ -180,7 +180,7 @@ RSpec.describe Hanami::Configuration do
|
|
180
180
|
end
|
181
181
|
|
182
182
|
describe "#app_name" do
|
183
|
-
it "defaults to Hanami::
|
183
|
+
it "defaults to Hanami::Config#app_name" do
|
184
184
|
expect(config.logger.app_name).to eq(config.app_name)
|
185
185
|
end
|
186
186
|
end
|
@@ -1,17 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami/
|
4
|
-
require "hanami/configuration/router"
|
3
|
+
require "hanami/config"
|
5
4
|
|
6
|
-
RSpec.describe Hanami::
|
7
|
-
let(:
|
5
|
+
RSpec.describe Hanami::Config, "#router" do
|
6
|
+
let(:config) { described_class.new(app_name: app_name, env: :development) }
|
8
7
|
let(:app_name) { "MyApp::app" }
|
9
8
|
|
10
|
-
subject(:router) {
|
9
|
+
subject(:router) { config.router }
|
11
10
|
|
12
11
|
context "hanami-router is bundled" do
|
13
12
|
it "is a full router configuration" do
|
14
|
-
is_expected.to be_an_instance_of(Hanami::
|
13
|
+
is_expected.to be_an_instance_of(Hanami::Config::Router)
|
15
14
|
|
16
15
|
is_expected.to respond_to(:resolver)
|
17
16
|
end
|
@@ -19,7 +18,7 @@ RSpec.describe Hanami::Configuration, "#router" do
|
|
19
18
|
it "loads the middleware stack" do
|
20
19
|
subject
|
21
20
|
|
22
|
-
expect(
|
21
|
+
expect(config.middleware_stack).not_to be_nil
|
23
22
|
end
|
24
23
|
|
25
24
|
it "can be finalized" do
|
@@ -34,7 +33,7 @@ RSpec.describe Hanami::Configuration, "#router" do
|
|
34
33
|
end
|
35
34
|
|
36
35
|
it "does not expose any settings" do
|
37
|
-
is_expected.not_to be_an_instance_of(Hanami::
|
36
|
+
is_expected.not_to be_an_instance_of(Hanami::Config::Router)
|
38
37
|
is_expected.not_to respond_to(:resolver)
|
39
38
|
end
|
40
39
|
|