hanami 2.0.0.alpha6 → 2.0.0.alpha8
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 +79 -0
- data/lib/hanami/application/action/slice_configured_action.rb +103 -0
- data/lib/hanami/application/action.rb +72 -0
- data/lib/hanami/application/routing/router.rb +36 -0
- data/lib/hanami/application/slice_registrar.rb +106 -0
- data/lib/hanami/application/view/context.rb +95 -0
- data/lib/hanami/application/view/slice_configured_context.rb +71 -0
- data/lib/hanami/application/view/slice_configured_view.rb +101 -0
- data/lib/hanami/application/view.rb +24 -0
- data/lib/hanami/application/view_name_inferrer.rb +63 -0
- data/lib/hanami/application.rb +64 -147
- data/lib/hanami/configuration/actions/content_security_policy.rb +118 -0
- data/lib/hanami/configuration/actions/cookies.rb +29 -0
- data/lib/hanami/configuration/actions/sessions.rb +46 -0
- data/lib/hanami/configuration/actions.rb +95 -0
- data/lib/hanami/configuration/logger.rb +11 -8
- data/lib/hanami/configuration/views.rb +81 -0
- data/lib/hanami/configuration.rb +28 -62
- data/lib/hanami/constants.rb +29 -0
- data/lib/hanami/errors.rb +15 -0
- data/lib/hanami/slice.rb +157 -99
- data/lib/hanami/slice_configurable.rb +75 -0
- data/lib/hanami/slice_name.rb +111 -0
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami.rb +13 -5
- metadata +21 -3
data/lib/hanami/slice.rb
CHANGED
@@ -1,130 +1,187 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/system/container"
|
4
|
+
require "hanami/errors"
|
4
5
|
require "pathname"
|
6
|
+
require_relative "constants"
|
7
|
+
require_relative "slice_name"
|
5
8
|
|
6
9
|
module Hanami
|
7
10
|
# Distinct area of concern within an Hanami application
|
8
11
|
#
|
9
12
|
# @since 2.0.0
|
10
13
|
class Slice
|
11
|
-
|
12
|
-
|
13
|
-
def initialize(application, name:, namespace: nil, root: nil, container: nil)
|
14
|
-
@application = application
|
15
|
-
@name = name.to_sym
|
16
|
-
@namespace = namespace
|
17
|
-
@root = root ? Pathname(root) : root
|
18
|
-
@container = container
|
19
|
-
end
|
14
|
+
def self.inherited(subclass)
|
15
|
+
super
|
20
16
|
|
21
|
-
|
22
|
-
application.inflector
|
23
|
-
end
|
17
|
+
subclass.extend(ClassMethods)
|
24
18
|
|
25
|
-
|
26
|
-
|
19
|
+
# Eagerly initialize any variables that may be accessed inside the subclass body
|
20
|
+
subclass.instance_variable_set(:@application, Hanami.application)
|
21
|
+
subclass.instance_variable_set(:@container, Class.new(Dry::System::Container))
|
27
22
|
end
|
28
23
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
24
|
+
# rubocop:disable Metrics/ModuleLength
|
25
|
+
module ClassMethods
|
26
|
+
attr_reader :application, :container
|
27
|
+
|
28
|
+
def slice_name
|
29
|
+
@slice_name ||= SliceName.new(self, inflector: method(:inflector))
|
33
30
|
end
|
34
31
|
|
35
|
-
|
32
|
+
def namespace
|
33
|
+
slice_name.namespace
|
34
|
+
end
|
36
35
|
|
37
|
-
|
36
|
+
def root
|
37
|
+
application.root.join(SLICES_DIR, slice_name.to_s)
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
def inflector
|
41
|
+
application.inflector
|
42
|
+
end
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
container.configured!
|
44
|
+
def prepare(provider_name = nil)
|
45
|
+
container.prepare(provider_name) and return self if provider_name
|
45
46
|
|
46
|
-
|
47
|
-
end
|
47
|
+
return self if prepared?
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
ensure_slice_name
|
50
|
+
ensure_slice_consts
|
51
51
|
|
52
|
-
|
53
|
-
self
|
54
|
-
end
|
52
|
+
prepare_all
|
55
53
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
# rubocop:enable Style/DoubleNegation
|
54
|
+
@prepared = true
|
55
|
+
self
|
56
|
+
end
|
61
57
|
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
def prepare_container(&block)
|
59
|
+
@prepare_container_block = block
|
60
|
+
end
|
65
61
|
|
66
|
-
|
67
|
-
|
68
|
-
raise "Cannot import after booting" if booted?
|
62
|
+
def boot
|
63
|
+
return self if booted?
|
69
64
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
65
|
+
container.finalize!
|
66
|
+
|
67
|
+
@booted = true
|
68
|
+
|
69
|
+
self
|
74
70
|
end
|
75
71
|
|
76
|
-
|
72
|
+
def shutdown
|
73
|
+
container.shutdown!
|
74
|
+
self
|
75
|
+
end
|
77
76
|
|
78
|
-
|
79
|
-
|
77
|
+
def prepared?
|
78
|
+
!!@prepared
|
79
|
+
end
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
def booted?
|
82
|
+
!!@booted
|
83
|
+
end
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
def register(...)
|
86
|
+
container.register(...)
|
87
|
+
end
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
def register_provider(...)
|
90
|
+
container.register_provider(...)
|
91
|
+
end
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
def start(...)
|
94
|
+
container.start(...)
|
95
|
+
end
|
96
96
|
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
def key?(...)
|
98
|
+
container.key?(...)
|
99
|
+
end
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
def keys
|
102
|
+
container.keys
|
103
|
+
end
|
104
104
|
|
105
|
-
|
106
|
-
|
107
|
-
|
105
|
+
def [](...)
|
106
|
+
container.[](...)
|
107
|
+
end
|
108
108
|
|
109
|
-
|
109
|
+
def resolve(...)
|
110
|
+
container.resolve(...)
|
111
|
+
end
|
112
|
+
|
113
|
+
def export(keys)
|
114
|
+
container.config.exports = keys
|
115
|
+
end
|
116
|
+
|
117
|
+
def import(from:, **kwargs)
|
118
|
+
# TODO: This should be handled via dry-system (see dry-rb/dry-system#228)
|
119
|
+
raise "Cannot import after booting" if booted?
|
120
|
+
|
121
|
+
application = self.application
|
122
|
+
|
123
|
+
container.after(:configure) do
|
124
|
+
if from.is_a?(Symbol) || from.is_a?(String)
|
125
|
+
slice_name = from
|
126
|
+
from = application.slices[from.to_sym].container
|
127
|
+
end
|
128
|
+
|
129
|
+
as = kwargs[:as] || slice_name
|
110
130
|
|
111
|
-
|
112
|
-
|
113
|
-
|
131
|
+
import(from: from, as: as, **kwargs)
|
132
|
+
end
|
133
|
+
end
|
114
134
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
135
|
+
private
|
136
|
+
|
137
|
+
def ensure_slice_name
|
138
|
+
unless name
|
139
|
+
raise SliceLoadError, "Slice must have a class name before it can be prepared"
|
140
|
+
end
|
141
|
+
end
|
120
142
|
|
121
|
-
|
122
|
-
|
123
|
-
|
143
|
+
def ensure_slice_consts
|
144
|
+
if namespace.const_defined?(:Container) || namespace.const_defined?(:Deps)
|
145
|
+
raise(
|
146
|
+
SliceLoadError,
|
147
|
+
"#{namespace}::Container and #{namespace}::Deps constants must not already be defined"
|
148
|
+
)
|
149
|
+
end
|
150
|
+
end
|
124
151
|
|
125
|
-
|
152
|
+
def prepare_all
|
153
|
+
prepare_container_plugins
|
154
|
+
prepare_container_base_config
|
155
|
+
prepare_container_component_dirs
|
156
|
+
prepare_autoloader
|
157
|
+
prepare_container_imports
|
158
|
+
prepare_container_consts
|
159
|
+
instance_exec(container, &@prepare_container_block) if @prepare_container_block
|
160
|
+
container.configured!
|
161
|
+
end
|
162
|
+
|
163
|
+
def prepare_container_plugins
|
164
|
+
container.use(:env, inferrer: -> { Hanami.env })
|
165
|
+
|
166
|
+
container.use(
|
167
|
+
:zeitwerk,
|
168
|
+
loader: application.autoloader,
|
169
|
+
run_setup: false,
|
170
|
+
eager_load: false
|
171
|
+
)
|
172
|
+
end
|
173
|
+
|
174
|
+
def prepare_container_base_config
|
175
|
+
container.config.name = slice_name.to_sym
|
126
176
|
container.config.root = root
|
127
|
-
container.config.provider_dirs = ["config
|
177
|
+
container.config.provider_dirs = [File.join("config", "providers")]
|
178
|
+
|
179
|
+
container.config.env = application.configuration.env
|
180
|
+
container.config.inflector = application.configuration.inflector
|
181
|
+
end
|
182
|
+
|
183
|
+
def prepare_container_component_dirs # rubocop:disable Metrics/AbcSize
|
184
|
+
return unless root&.directory?
|
128
185
|
|
129
186
|
# Add component dirs for each configured component path
|
130
187
|
application.configuration.source_dirs.component_dirs.each do |component_dir|
|
@@ -132,17 +189,14 @@ module Hanami
|
|
132
189
|
|
133
190
|
component_dir = component_dir.dup
|
134
191
|
|
135
|
-
|
136
|
-
if component_dir.path == "lib"
|
192
|
+
if component_dir.path == LIB_DIR
|
137
193
|
# Expect component files in the root of the lib/ component dir to define
|
138
194
|
# classes inside the slice's namespace.
|
139
195
|
#
|
140
196
|
# e.g. "lib/foo.rb" should define SliceNamespace::Foo, to be registered as
|
141
197
|
# "foo"
|
142
198
|
component_dir.namespaces.delete_root
|
143
|
-
component_dir.namespaces.add_root(key: nil, const:
|
144
|
-
|
145
|
-
container.config.component_dirs.add(component_dir)
|
199
|
+
component_dir.namespaces.add_root(key: nil, const: slice_name.name)
|
146
200
|
else
|
147
201
|
# Expect component files in the root of non-lib/ component dirs to define
|
148
202
|
# classes inside a namespace matching that dir.
|
@@ -150,22 +204,24 @@ module Hanami
|
|
150
204
|
# e.g. "actions/foo.rb" should define SliceNamespace::Actions::Foo, to be
|
151
205
|
# registered as "actions.foo"
|
152
206
|
|
153
|
-
dir_namespace_path = File.join(
|
207
|
+
dir_namespace_path = File.join(slice_name.name, component_dir.path)
|
154
208
|
|
155
209
|
component_dir.namespaces.delete_root
|
156
210
|
component_dir.namespaces.add_root(const: dir_namespace_path, key: component_dir.path)
|
157
|
-
|
158
|
-
container.config.component_dirs.add(component_dir)
|
159
211
|
end
|
212
|
+
|
213
|
+
container.config.component_dirs.add(component_dir)
|
160
214
|
end
|
161
215
|
end
|
162
216
|
|
163
|
-
|
217
|
+
def prepare_autoloader # rubocop:disable Metrics/AbcSize
|
218
|
+
return unless root&.directory?
|
219
|
+
|
164
220
|
# Pass configured autoload dirs to the autoloader
|
165
221
|
application.configuration.source_dirs.autoload_paths.each do |autoload_path|
|
166
222
|
next unless root.join(autoload_path).directory?
|
167
223
|
|
168
|
-
dir_namespace_path = File.join(
|
224
|
+
dir_namespace_path = File.join(slice_name.name, autoload_path)
|
169
225
|
|
170
226
|
autoloader_namespace = begin
|
171
227
|
inflector.constantize(inflector.camelize(dir_namespace_path))
|
@@ -180,13 +236,15 @@ module Hanami
|
|
180
236
|
end
|
181
237
|
end
|
182
238
|
|
183
|
-
|
239
|
+
def prepare_container_imports
|
240
|
+
container.import from: application.container, as: :application
|
241
|
+
end
|
242
|
+
|
243
|
+
def prepare_container_consts
|
184
244
|
namespace.const_set :Container, container
|
185
245
|
namespace.const_set :Deps, container.injector
|
186
246
|
end
|
187
|
-
|
188
|
-
container
|
189
247
|
end
|
190
|
-
# rubocop:enable Metrics/
|
248
|
+
# rubocop:enable Metrics/ModuleLength
|
191
249
|
end
|
192
250
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "errors"
|
4
|
+
|
5
|
+
module Hanami
|
6
|
+
# Calls `configure_for_slice(slice)` on the extended class whenever it is first
|
7
|
+
# subclassed within a module namespace corresponding to a slice.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# class BaseClass
|
11
|
+
# extend Hanami::SliceConfigurable
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# # slices/main/lib/my_class.rb
|
15
|
+
# module Main
|
16
|
+
# class MyClass < BaseClass
|
17
|
+
# # Will be called with `Main::Slice`
|
18
|
+
# def self.configure_for_slice(slice)
|
19
|
+
# # ...
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
# @since 2.0.0
|
26
|
+
module SliceConfigurable
|
27
|
+
class << self
|
28
|
+
def extended(klass)
|
29
|
+
slice_for = method(:slice_for)
|
30
|
+
|
31
|
+
inherited_mod = Module.new do
|
32
|
+
define_method(:inherited) do |subclass|
|
33
|
+
unless Hanami.application?
|
34
|
+
raise ComponentLoadError, "Class #{klass} must be defined within an Hanami application"
|
35
|
+
end
|
36
|
+
|
37
|
+
super(subclass)
|
38
|
+
|
39
|
+
subclass.instance_variable_set(:@configured_for_slices, configured_for_slices.dup)
|
40
|
+
|
41
|
+
slice = slice_for.(subclass)
|
42
|
+
return unless slice
|
43
|
+
|
44
|
+
unless subclass.configured_for_slice?(slice)
|
45
|
+
subclass.configure_for_slice(slice)
|
46
|
+
subclass.configured_for_slices << slice
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
klass.singleton_class.prepend(inherited_mod)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def slice_for(klass)
|
57
|
+
return unless klass.name
|
58
|
+
|
59
|
+
slices = Hanami.application.slices.to_a + [Hanami.application]
|
60
|
+
|
61
|
+
slices.detect { |slice| klass.name.include?(slice.namespace.to_s) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def configure_for_slice(slice); end
|
66
|
+
|
67
|
+
def configured_for_slice?(slice)
|
68
|
+
configured_for_slices.include?(slice)
|
69
|
+
end
|
70
|
+
|
71
|
+
def configured_for_slices
|
72
|
+
@configured_for_slices ||= []
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "constants"
|
4
|
+
|
5
|
+
module Hanami
|
6
|
+
# Represents the name of an {Application} or {Slice}.
|
7
|
+
#
|
8
|
+
# @see Application::ClassMethods#application_name
|
9
|
+
# @see Slice::ClassMethods#slice_name
|
10
|
+
#
|
11
|
+
# @api public
|
12
|
+
# @since 2.0.0
|
13
|
+
class SliceName
|
14
|
+
# Returns a new SliceName for the slice or application.
|
15
|
+
#
|
16
|
+
# You must provide an inflector for the manipulation of the name into various formats.
|
17
|
+
# This should be given in the form of a Proc that returns the inflector when called.
|
18
|
+
# The reason for this is that the inflector may be replaced by the user during the
|
19
|
+
# application configuration phase, so the proc should ensure that the current instance
|
20
|
+
# of the inflector is returned whenever needed.
|
21
|
+
#
|
22
|
+
# @param slice [#name] the slice or application object
|
23
|
+
# @param inflector [Proc] Proc returning the application's inflector when called
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
def initialize(slice, inflector:)
|
27
|
+
@slice = slice
|
28
|
+
@inflector = inflector
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns the name of the slice as a downcased, underscored string.
|
32
|
+
#
|
33
|
+
# This is considered the canonical name of the slice.
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# slice_name.name # => "main"
|
37
|
+
#
|
38
|
+
# @return [String] the slice name
|
39
|
+
#
|
40
|
+
# @api public
|
41
|
+
# @since 2.0.0
|
42
|
+
def name
|
43
|
+
inflector.underscore(namespace_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
# @api public
|
47
|
+
# @since 2.0.0
|
48
|
+
alias_method :path, :name
|
49
|
+
|
50
|
+
# Returns the name of the slice's module namespace.
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# slice_name.namespace_name # => "Main"
|
54
|
+
#
|
55
|
+
# @return [String] the namespace name
|
56
|
+
#
|
57
|
+
# @api public
|
58
|
+
# @since 2.0.0
|
59
|
+
def namespace_name
|
60
|
+
slice_name.split(MODULE_DELIMITER)[0..-2].join(MODULE_DELIMITER)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns the constant for the slice's module namespace.
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# slice_name.namespace_const # => Main
|
67
|
+
#
|
68
|
+
# @return [Module] the namespace module constant
|
69
|
+
#
|
70
|
+
# @api public
|
71
|
+
# @since 2.0.0
|
72
|
+
def namespace_const
|
73
|
+
inflector.constantize(namespace_name)
|
74
|
+
end
|
75
|
+
|
76
|
+
# @api public
|
77
|
+
# @since 2.0.0
|
78
|
+
alias_method :namespace, :namespace_const
|
79
|
+
|
80
|
+
# @api public
|
81
|
+
# @since 2.0.0
|
82
|
+
alias_method :to_s, :name
|
83
|
+
|
84
|
+
# Returns the name of a slice as a downcased, underscored symbol.
|
85
|
+
#
|
86
|
+
# @example
|
87
|
+
# slice_name.name # => :main
|
88
|
+
#
|
89
|
+
# @return [Symbol] the slice name
|
90
|
+
#
|
91
|
+
# @see name, to_s
|
92
|
+
#
|
93
|
+
# @api public
|
94
|
+
# @since 2.0.0
|
95
|
+
def to_sym
|
96
|
+
name.to_sym
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def slice_name
|
102
|
+
@slice.name
|
103
|
+
end
|
104
|
+
|
105
|
+
# The inflector is callable to allow for it to be configured/replaced after this
|
106
|
+
# object has been initialized
|
107
|
+
def inflector
|
108
|
+
@inflector.()
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/hanami/version.rb
CHANGED
data/lib/hanami.rb
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "hanami/application"
|
4
|
+
require_relative "hanami/errors"
|
5
|
+
require_relative "hanami/version"
|
6
|
+
|
7
|
+
|
3
8
|
# A complete web framework for Ruby
|
4
9
|
#
|
5
10
|
# @since 0.1.0
|
6
11
|
#
|
7
12
|
# @see http://hanamirb.org
|
8
13
|
module Hanami
|
9
|
-
require "hanami/version"
|
10
|
-
require "hanami/application"
|
11
|
-
|
12
14
|
@_mutex = Mutex.new
|
13
15
|
|
14
16
|
def self.application
|
15
17
|
@_mutex.synchronize do
|
16
|
-
|
18
|
+
unless defined?(@_application)
|
19
|
+
raise ApplicationLoadError,
|
20
|
+
"Hanami.application is not yet configured. " \
|
21
|
+
"You may need to `require \"hanami/setup\"` to load your config/application.rb file."
|
22
|
+
end
|
17
23
|
|
18
24
|
@_application
|
19
25
|
end
|
@@ -25,7 +31,9 @@ module Hanami
|
|
25
31
|
|
26
32
|
def self.application=(klass)
|
27
33
|
@_mutex.synchronize do
|
28
|
-
|
34
|
+
if defined?(@_application)
|
35
|
+
raise ApplicationLoadError, "Hanami.application is already configured."
|
36
|
+
end
|
29
37
|
|
30
38
|
@_application = klass unless klass.name.nil?
|
31
39
|
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.alpha8
|
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-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -217,6 +217,8 @@ files:
|
|
217
217
|
- hanami.gemspec
|
218
218
|
- lib/hanami.rb
|
219
219
|
- lib/hanami/application.rb
|
220
|
+
- lib/hanami/application/action.rb
|
221
|
+
- lib/hanami/application/action/slice_configured_action.rb
|
220
222
|
- lib/hanami/application/container/providers/inflector.rb
|
221
223
|
- lib/hanami/application/container/providers/logger.rb
|
222
224
|
- lib/hanami/application/container/providers/rack_logger.rb
|
@@ -230,8 +232,15 @@ files:
|
|
230
232
|
- lib/hanami/application/routing/resolver.rb
|
231
233
|
- lib/hanami/application/routing/resolver/node.rb
|
232
234
|
- lib/hanami/application/routing/resolver/trie.rb
|
235
|
+
- lib/hanami/application/routing/router.rb
|
233
236
|
- lib/hanami/application/settings.rb
|
234
237
|
- lib/hanami/application/settings/dotenv_store.rb
|
238
|
+
- lib/hanami/application/slice_registrar.rb
|
239
|
+
- lib/hanami/application/view.rb
|
240
|
+
- lib/hanami/application/view/context.rb
|
241
|
+
- lib/hanami/application/view/slice_configured_context.rb
|
242
|
+
- lib/hanami/application/view/slice_configured_view.rb
|
243
|
+
- lib/hanami/application/view_name_inferrer.rb
|
235
244
|
- lib/hanami/assets/application_configuration.rb
|
236
245
|
- lib/hanami/assets/configuration.rb
|
237
246
|
- lib/hanami/boot.rb
|
@@ -244,16 +253,25 @@ files:
|
|
244
253
|
- lib/hanami/cli/commands/command.rb
|
245
254
|
- lib/hanami/cli/commands/server.rb
|
246
255
|
- lib/hanami/configuration.rb
|
256
|
+
- lib/hanami/configuration/actions.rb
|
257
|
+
- lib/hanami/configuration/actions/content_security_policy.rb
|
258
|
+
- lib/hanami/configuration/actions/cookies.rb
|
259
|
+
- lib/hanami/configuration/actions/sessions.rb
|
247
260
|
- lib/hanami/configuration/logger.rb
|
248
261
|
- lib/hanami/configuration/middleware.rb
|
249
262
|
- lib/hanami/configuration/null_configuration.rb
|
250
263
|
- lib/hanami/configuration/router.rb
|
251
264
|
- lib/hanami/configuration/sessions.rb
|
252
265
|
- lib/hanami/configuration/source_dirs.rb
|
266
|
+
- lib/hanami/configuration/views.rb
|
267
|
+
- lib/hanami/constants.rb
|
268
|
+
- lib/hanami/errors.rb
|
253
269
|
- lib/hanami/prepare.rb
|
254
270
|
- lib/hanami/server.rb
|
255
271
|
- lib/hanami/setup.rb
|
256
272
|
- lib/hanami/slice.rb
|
273
|
+
- lib/hanami/slice_configurable.rb
|
274
|
+
- lib/hanami/slice_name.rb
|
257
275
|
- lib/hanami/version.rb
|
258
276
|
- lib/hanami/web/rack_logger.rb
|
259
277
|
homepage: http://hanamirb.org
|
@@ -277,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
295
|
- !ruby/object:Gem::Version
|
278
296
|
version: 1.3.1
|
279
297
|
requirements: []
|
280
|
-
rubygems_version: 3.3.
|
298
|
+
rubygems_version: 3.3.7
|
281
299
|
signing_key:
|
282
300
|
specification_version: 4
|
283
301
|
summary: The web, with simplicity
|