hanami 2.1.0.rc1 → 2.1.0.rc2
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 +5 -0
- data/hanami.gemspec +2 -2
- data/lib/hanami/config/actions.rb +3 -4
- data/lib/hanami/config/assets.rb +1 -1
- data/lib/hanami/config/views.rb +10 -2
- data/lib/hanami/config.rb +21 -12
- data/lib/hanami/extensions/view/context.rb +111 -8
- data/lib/hanami/extensions/view/part.rb +14 -2
- data/lib/hanami/extensions/view/scope.rb +7 -0
- data/lib/hanami/extensions/view/slice_configured_context.rb +12 -8
- data/lib/hanami/extensions/view/slice_configured_helpers.rb +12 -1
- data/lib/hanami/extensions/view/slice_configured_part.rb +4 -5
- data/lib/hanami/extensions/view/slice_configured_view.rb +12 -4
- data/lib/hanami/extensions/view/standard_helpers.rb +4 -0
- data/lib/hanami/extensions/view.rb +5 -3
- data/lib/hanami/helpers/assets_helper.rb +41 -41
- data/lib/hanami/version.rb +1 -1
- data/spec/unit/hanami/config/render_detailed_errors_spec.rb +1 -1
- data/spec/unit/hanami/version_spec.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8a6835d72654251d1461ea2ad61c9fe56ad9b37b0ff333d23dc444e205b32ab1
|
|
4
|
+
data.tar.gz: 3daf6e28931aa6abf0c3579d95c8e403c1ba12bbcb5879549825e03ae8e81556
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4b79171920231066598260223766e9abaee75806c751bcf83ca9ddaa93ef2eabef1fabc3077674cb81f25e435fa8659a04f9c272200a4ed27fa02c271ac03531
|
|
7
|
+
data.tar.gz: 04072a74f320abda02874ace16c616db0f3db9bb63de4d3b00746f3c1898c1dc58a143abd47915c9ef0a32b0a5eda860bd9264bccd375779d87bb101e4686dc1
|
data/CHANGELOG.md
CHANGED
data/hanami.gemspec
CHANGED
|
@@ -38,8 +38,8 @@ Gem::Specification.new do |spec|
|
|
|
38
38
|
spec.add_dependency "dry-monitor", "~> 1.0", ">= 1.0.1", "< 2"
|
|
39
39
|
spec.add_dependency "dry-system", "~> 1.0", "< 2"
|
|
40
40
|
spec.add_dependency "dry-logger", "~> 1.0", "< 2"
|
|
41
|
-
spec.add_dependency "hanami-cli", "~> 2.1.
|
|
42
|
-
spec.add_dependency "hanami-utils", "~> 2.1.
|
|
41
|
+
spec.add_dependency "hanami-cli", "~> 2.1.rc"
|
|
42
|
+
spec.add_dependency "hanami-utils", "~> 2.1.rc"
|
|
43
43
|
spec.add_dependency "zeitwerk", "~> 2.6"
|
|
44
44
|
|
|
45
45
|
spec.add_development_dependency "rspec", "~> 3.8"
|
|
@@ -88,20 +88,19 @@ module Hanami
|
|
|
88
88
|
# @since 2.1.0
|
|
89
89
|
setting :method_override, default: true
|
|
90
90
|
|
|
91
|
-
# The following settings are for view and assets integration with actions, and are NOT
|
|
92
|
-
# publicly released as of 2.0.0. We'll make full documentation available when these become
|
|
93
|
-
# public in a subsequent release.
|
|
94
|
-
|
|
95
91
|
# @!attribute [rw] name_inference_base
|
|
96
92
|
# @api private
|
|
93
|
+
# @since 2.1.0
|
|
97
94
|
setting :name_inference_base, default: "actions"
|
|
98
95
|
|
|
99
96
|
# @!attribute [rw] view_name_inferrer
|
|
100
97
|
# @api private
|
|
98
|
+
# @since 2.1.0
|
|
101
99
|
setting :view_name_inferrer, default: Slice::ViewNameInferrer
|
|
102
100
|
|
|
103
101
|
# @!attribute [rw] view_name_inference_base
|
|
104
102
|
# @api private
|
|
103
|
+
# @since 2.1.0
|
|
105
104
|
setting :view_name_inference_base, default: "views"
|
|
106
105
|
|
|
107
106
|
# @api private
|
data/lib/hanami/config/assets.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Hanami
|
|
|
9
9
|
#
|
|
10
10
|
# This exposes all the settings from the standalone `Hanami::Assets` class, pre-configured with
|
|
11
11
|
# sensible defaults for actions within a full Hanami app. It also provides additional settings
|
|
12
|
-
# for further integration of
|
|
12
|
+
# for further integration of assets with other full stack app components.
|
|
13
13
|
#
|
|
14
14
|
# @since 2.1.0
|
|
15
15
|
# @api public
|
data/lib/hanami/config/views.rb
CHANGED
|
@@ -7,16 +7,22 @@ module Hanami
|
|
|
7
7
|
class Config
|
|
8
8
|
# Hanami views config
|
|
9
9
|
#
|
|
10
|
-
# This
|
|
10
|
+
# This exposes all the settings from the standalone `Hanami::View` class, pre-configured with
|
|
11
|
+
# sensible defaults for actions within a full Hanami app. It also provides additional settings
|
|
12
|
+
# for further integration of views with other full stack app components.
|
|
11
13
|
#
|
|
12
|
-
# @
|
|
14
|
+
# @since 2.1.0
|
|
15
|
+
# @api public
|
|
13
16
|
class Views
|
|
14
17
|
include Dry::Configurable
|
|
15
18
|
|
|
19
|
+
# @api private
|
|
20
|
+
# @since 2.1.0
|
|
16
21
|
attr_reader :base_config
|
|
17
22
|
protected :base_config
|
|
18
23
|
|
|
19
24
|
# @api private
|
|
25
|
+
# @since 2.1.0
|
|
20
26
|
def initialize(*)
|
|
21
27
|
super
|
|
22
28
|
|
|
@@ -26,6 +32,7 @@ module Hanami
|
|
|
26
32
|
end
|
|
27
33
|
|
|
28
34
|
# @api private
|
|
35
|
+
# @since 2.1.0
|
|
29
36
|
def initialize_copy(source)
|
|
30
37
|
super
|
|
31
38
|
@base_config = source.base_config.dup
|
|
@@ -33,6 +40,7 @@ module Hanami
|
|
|
33
40
|
private :initialize_copy
|
|
34
41
|
|
|
35
42
|
# @api private
|
|
43
|
+
# @since 2.1.0
|
|
36
44
|
def finalize!
|
|
37
45
|
return self if frozen?
|
|
38
46
|
|
data/lib/hanami/config.rb
CHANGED
|
@@ -251,16 +251,30 @@ module Hanami
|
|
|
251
251
|
|
|
252
252
|
# Returns the app's views config, or a null config if hanami-view is not bundled.
|
|
253
253
|
#
|
|
254
|
-
#
|
|
254
|
+
# @example When hanami-view is bundled
|
|
255
|
+
# config.views.paths # => [...]
|
|
255
256
|
#
|
|
256
|
-
# @
|
|
257
|
+
# @example When hanami-view is not bundled
|
|
258
|
+
# config.views.paths # => NoMethodError
|
|
259
|
+
#
|
|
260
|
+
# @return [Hanami::Config::Views, Hanami::Config::NullConfig]
|
|
261
|
+
#
|
|
262
|
+
# @api public
|
|
263
|
+
# @since 2.1.0
|
|
257
264
|
attr_reader :views
|
|
258
265
|
|
|
259
|
-
# Returns the app's
|
|
266
|
+
# Returns the app's views config, or a null config if hanami-view is not bundled.
|
|
260
267
|
#
|
|
261
|
-
#
|
|
268
|
+
# @example When hanami-view is bundled
|
|
269
|
+
# config.views.paths # => [...]
|
|
262
270
|
#
|
|
263
|
-
# @
|
|
271
|
+
# @example When hanami-view is not bundled
|
|
272
|
+
# config.views.paths # => NoMethodError
|
|
273
|
+
#
|
|
274
|
+
# @return [Hanami::Config::Assets, Hanami::Config::NullConfig]
|
|
275
|
+
#
|
|
276
|
+
# @api public
|
|
277
|
+
# @since 2.1.0
|
|
264
278
|
attr_reader :assets
|
|
265
279
|
|
|
266
280
|
# @api private
|
|
@@ -272,7 +286,7 @@ module Hanami
|
|
|
272
286
|
# Apply default values that are only knowable at initialize-time (vs require-time)
|
|
273
287
|
self.root = Dir.pwd
|
|
274
288
|
self.render_errors = (env == :production)
|
|
275
|
-
self.render_detailed_errors = (env
|
|
289
|
+
self.render_detailed_errors = (env == :development)
|
|
276
290
|
load_from_env
|
|
277
291
|
|
|
278
292
|
@logger = Config::Logger.new(env: env, app_name: app_name)
|
|
@@ -296,13 +310,8 @@ module Hanami
|
|
|
296
310
|
@assets = load_dependent_config("hanami-assets") {
|
|
297
311
|
require_relative "config/assets"
|
|
298
312
|
|
|
299
|
-
public_dir = root.join("public")
|
|
300
|
-
|
|
301
313
|
Hanami::Config::Assets.new(
|
|
302
|
-
|
|
303
|
-
sources: root.join("app", "assets"),
|
|
304
|
-
destination: public_dir.join("assets"),
|
|
305
|
-
manifest_path: public_dir.join("assets.json")
|
|
314
|
+
manifest_path: root.join("public", "assets.json")
|
|
306
315
|
)
|
|
307
316
|
}
|
|
308
317
|
|
|
@@ -7,15 +7,15 @@ module Hanami
|
|
|
7
7
|
module View
|
|
8
8
|
# View context for views in Hanami apps.
|
|
9
9
|
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
# @api private
|
|
10
|
+
# @api public
|
|
11
|
+
# @since 2.1.0
|
|
13
12
|
module Context
|
|
14
13
|
class << self
|
|
15
14
|
# Returns a context class for the given slice. If a context class is not defined, defines
|
|
16
15
|
# a class named `Views::Context` within the slice's namespace.
|
|
17
16
|
#
|
|
18
17
|
# @api private
|
|
18
|
+
# @since 2.1.0
|
|
19
19
|
def context_class(slice)
|
|
20
20
|
views_namespace = views_namespace(slice)
|
|
21
21
|
|
|
@@ -30,6 +30,8 @@ module Hanami
|
|
|
30
30
|
|
|
31
31
|
private
|
|
32
32
|
|
|
33
|
+
# @api private
|
|
34
|
+
# @since 2.1.0
|
|
33
35
|
def context_superclass(slice)
|
|
34
36
|
return Hanami::View::Context if Hanami.app.equal?(slice)
|
|
35
37
|
|
|
@@ -44,8 +46,10 @@ module Hanami
|
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
47
|
-
#
|
|
49
|
+
# @api private
|
|
50
|
+
# @since 2.1.0
|
|
48
51
|
def views_namespace(slice)
|
|
52
|
+
# TODO: this could be moved into the top-level Extensions::View
|
|
49
53
|
if slice.namespace.const_defined?(:Views)
|
|
50
54
|
slice.namespace.const_get(:Views)
|
|
51
55
|
else
|
|
@@ -54,6 +58,8 @@ module Hanami
|
|
|
54
58
|
end
|
|
55
59
|
end
|
|
56
60
|
|
|
61
|
+
# @api private
|
|
62
|
+
# @since 2.1.0
|
|
57
63
|
module ClassExtension
|
|
58
64
|
def self.included(context_class)
|
|
59
65
|
super
|
|
@@ -63,18 +69,39 @@ module Hanami
|
|
|
63
69
|
context_class.prepend(InstanceMethods)
|
|
64
70
|
end
|
|
65
71
|
|
|
72
|
+
# @api private
|
|
73
|
+
# @since 2.1.0
|
|
66
74
|
module ClassMethods
|
|
75
|
+
# @api private
|
|
76
|
+
# @since 2.1.0
|
|
67
77
|
def configure_for_slice(slice)
|
|
68
78
|
extend SliceConfiguredContext.new(slice)
|
|
69
79
|
end
|
|
70
80
|
end
|
|
71
81
|
|
|
82
|
+
# @api public
|
|
83
|
+
# @since 2.1.0
|
|
72
84
|
module InstanceMethods
|
|
85
|
+
# Returns the app's inflector.
|
|
86
|
+
#
|
|
87
|
+
# @return [Dry::Inflector] the inflector
|
|
88
|
+
#
|
|
89
|
+
# @api public
|
|
90
|
+
# @since 2.1.0
|
|
73
91
|
attr_reader :inflector
|
|
74
92
|
|
|
93
|
+
# Returns the app's settings.
|
|
94
|
+
#
|
|
95
|
+
# @return [Hanami::Settings] the settings
|
|
96
|
+
#
|
|
97
|
+
# @api public
|
|
98
|
+
# @since 2.1.0
|
|
75
99
|
attr_reader :settings
|
|
76
100
|
|
|
77
101
|
# @see SliceConfiguredContext#define_new
|
|
102
|
+
#
|
|
103
|
+
# @api private
|
|
104
|
+
# @since 2.1.0
|
|
78
105
|
def initialize( # rubocop:disable Metrics/ParameterLists
|
|
79
106
|
inflector: nil,
|
|
80
107
|
settings: nil,
|
|
@@ -94,6 +121,8 @@ module Hanami
|
|
|
94
121
|
super(**args)
|
|
95
122
|
end
|
|
96
123
|
|
|
124
|
+
# @api private
|
|
125
|
+
# @since 2.1.0
|
|
97
126
|
def initialize_copy(source)
|
|
98
127
|
# The standard implementation of initialize_copy will make shallow copies of all
|
|
99
128
|
# instance variables from the source. This is fine for most of our ivars.
|
|
@@ -104,6 +133,14 @@ module Hanami
|
|
|
104
133
|
@content_for = source.instance_variable_get(:@content_for).dup
|
|
105
134
|
end
|
|
106
135
|
|
|
136
|
+
# Returns the app's assets.
|
|
137
|
+
#
|
|
138
|
+
# @return [Hanami::Assets] the assets
|
|
139
|
+
#
|
|
140
|
+
# @raise [Hanami::ComponentLoadError] if the hanami-assets gem is not bundled
|
|
141
|
+
#
|
|
142
|
+
# @api public
|
|
143
|
+
# @since 2.1.0
|
|
107
144
|
def assets
|
|
108
145
|
unless @assets
|
|
109
146
|
raise Hanami::ComponentLoadError, "the hanami-assets gem is required to access assets"
|
|
@@ -112,6 +149,14 @@ module Hanami
|
|
|
112
149
|
@assets
|
|
113
150
|
end
|
|
114
151
|
|
|
152
|
+
# Returns the current request, if the view is rendered from within an action.
|
|
153
|
+
#
|
|
154
|
+
# @return [Hanami::Action::Request] the request
|
|
155
|
+
#
|
|
156
|
+
# @raise [Hanami::ComponentLoadError] if the view is not rendered from within a request
|
|
157
|
+
#
|
|
158
|
+
# @api public
|
|
159
|
+
# @since 2.1.0
|
|
115
160
|
def request
|
|
116
161
|
unless @request
|
|
117
162
|
raise Hanami::ComponentLoadError, "only views rendered from Hanami::Action instances have a request"
|
|
@@ -120,6 +165,15 @@ module Hanami
|
|
|
120
165
|
@request
|
|
121
166
|
end
|
|
122
167
|
|
|
168
|
+
# Returns the app's routes helper.
|
|
169
|
+
#
|
|
170
|
+
# @return [Hanami::Slice::RoutesHelper] the routes helper
|
|
171
|
+
#
|
|
172
|
+
# @raise [Hanami::ComponentLoadError] if the hanami-router gem is not bundled or routes
|
|
173
|
+
# are not defined
|
|
174
|
+
#
|
|
175
|
+
# @api public
|
|
176
|
+
# @since 2.1.0
|
|
123
177
|
def routes
|
|
124
178
|
unless @routes
|
|
125
179
|
raise Hanami::ComponentLoadError, "the hanami-router gem is required to access routes"
|
|
@@ -128,6 +182,32 @@ module Hanami
|
|
|
128
182
|
@routes
|
|
129
183
|
end
|
|
130
184
|
|
|
185
|
+
# @overload content_for(key, value = nil, &block)
|
|
186
|
+
# Stores a string or block of template markup for later use.
|
|
187
|
+
#
|
|
188
|
+
# @param key [Symbol] the content key, for later retrieval
|
|
189
|
+
# @param value [String, nil] the content, if no block is given
|
|
190
|
+
#
|
|
191
|
+
# @return [String] the content
|
|
192
|
+
#
|
|
193
|
+
# @example
|
|
194
|
+
# content_for(:page_title, "Hello world")
|
|
195
|
+
#
|
|
196
|
+
# @example In a template
|
|
197
|
+
# <% content_for :page_title do %>
|
|
198
|
+
# <h1>Hello world</h1>
|
|
199
|
+
# <% end %>
|
|
200
|
+
#
|
|
201
|
+
# @overload content_for(key)
|
|
202
|
+
# Returns the previously stored content for the given key.
|
|
203
|
+
#
|
|
204
|
+
# @param key [Symbol] the content key
|
|
205
|
+
#
|
|
206
|
+
# @return [String, nil] the content, or nil if no content previously stored with the
|
|
207
|
+
# key
|
|
208
|
+
#
|
|
209
|
+
# @api public
|
|
210
|
+
# @since 2.1.0
|
|
131
211
|
def content_for(key, value = nil)
|
|
132
212
|
if block_given?
|
|
133
213
|
@content_for[key] = yield
|
|
@@ -138,18 +218,41 @@ module Hanami
|
|
|
138
218
|
end
|
|
139
219
|
end
|
|
140
220
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
221
|
+
# Returns the current request's CSRF token.
|
|
222
|
+
#
|
|
223
|
+
# @return [String] the token
|
|
224
|
+
#
|
|
225
|
+
# @raise [Hanami::ComponentLoadError] if the view is not rendered from within a request
|
|
226
|
+
# @raise [Hanami::Action::MissingSessionError] if sessions are not enabled
|
|
227
|
+
#
|
|
228
|
+
# @api public
|
|
229
|
+
# @since 2.1.0
|
|
145
230
|
def csrf_token
|
|
146
231
|
request.session[Hanami::Action::CSRFProtection::CSRF_TOKEN]
|
|
147
232
|
end
|
|
148
233
|
|
|
234
|
+
# Returns the session for the current request.
|
|
235
|
+
#
|
|
236
|
+
# @return [Rack::Session::Abstract::SessionHash] the session hash
|
|
237
|
+
#
|
|
238
|
+
# @raise [Hanami::ComponentLoadError] if the view is not rendered from within a request
|
|
239
|
+
# @raise [Hanami::Action::MissingSessionError] if sessions are not enabled
|
|
240
|
+
#
|
|
241
|
+
# @api public
|
|
242
|
+
# @since 2.1.0
|
|
149
243
|
def session
|
|
150
244
|
request.session
|
|
151
245
|
end
|
|
152
246
|
|
|
247
|
+
# Returns the flash hash for the current request.
|
|
248
|
+
#
|
|
249
|
+
# @return []
|
|
250
|
+
#
|
|
251
|
+
# @raise [Hanami::ComponentLoadError] if the view is not rendered from within a request
|
|
252
|
+
# @raise [Hanami::Action::MissingSessionError] if sessions are not enabled
|
|
253
|
+
#
|
|
254
|
+
# @api public
|
|
255
|
+
# @since 2.1.0
|
|
153
256
|
def flash
|
|
154
257
|
request.flash
|
|
155
258
|
end
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
|
-
# @api
|
|
6
|
+
# @api public
|
|
7
7
|
# @since 2.1.0
|
|
8
8
|
module Part
|
|
9
|
+
# @api private
|
|
10
|
+
# @since 2.1.0
|
|
9
11
|
def self.included(part_class)
|
|
10
12
|
super
|
|
11
13
|
|
|
@@ -13,7 +15,11 @@ module Hanami
|
|
|
13
15
|
part_class.extend(ClassMethods)
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
# @api private
|
|
19
|
+
# @since 2.1.0
|
|
16
20
|
module ClassMethods
|
|
21
|
+
# @api private
|
|
22
|
+
# @since 2.1.0
|
|
17
23
|
def configure_for_slice(slice)
|
|
18
24
|
extend SliceConfiguredPart.new(slice)
|
|
19
25
|
|
|
@@ -28,7 +34,7 @@ module Hanami
|
|
|
28
34
|
#
|
|
29
35
|
# Use this when you need to access helpers inside your part classes.
|
|
30
36
|
#
|
|
31
|
-
# @return
|
|
37
|
+
# @return [Object] the helpers object
|
|
32
38
|
#
|
|
33
39
|
# @api public
|
|
34
40
|
# @since 2.1.0
|
|
@@ -50,10 +56,16 @@ module Hanami
|
|
|
50
56
|
|
|
51
57
|
include StandardHelpers
|
|
52
58
|
|
|
59
|
+
# @api private
|
|
60
|
+
# @since 2.1.0
|
|
53
61
|
def self.configure_for_slice(slice)
|
|
54
62
|
extend SliceConfiguredHelpers.new(slice)
|
|
55
63
|
end
|
|
56
64
|
|
|
65
|
+
# Returns the context for the current view rendering.
|
|
66
|
+
#
|
|
67
|
+
# @return [Hanami::View::Context] the context
|
|
68
|
+
#
|
|
57
69
|
# @api public
|
|
58
70
|
# @since 2.1.0
|
|
59
71
|
attr_reader :_context
|
|
@@ -4,7 +4,10 @@ module Hanami
|
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
6
|
# @api private
|
|
7
|
+
# @since 2.1.0
|
|
7
8
|
module Scope
|
|
9
|
+
# @api private
|
|
10
|
+
# @since 2.1.0
|
|
8
11
|
def self.included(scope_class)
|
|
9
12
|
super
|
|
10
13
|
|
|
@@ -13,7 +16,11 @@ module Hanami
|
|
|
13
16
|
scope_class.extend(ClassMethods)
|
|
14
17
|
end
|
|
15
18
|
|
|
19
|
+
# @api private
|
|
20
|
+
# @since 2.1.0
|
|
16
21
|
module ClassMethods
|
|
22
|
+
# @api private
|
|
23
|
+
# @since 2.1.0
|
|
17
24
|
def configure_for_slice(slice)
|
|
18
25
|
extend SliceConfiguredHelpers.new(slice)
|
|
19
26
|
end
|
|
@@ -3,35 +3,39 @@
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
|
-
# Provides slice-specific configuration and behavior for any view context class
|
|
7
|
-
#
|
|
6
|
+
# Provides slice-specific configuration and behavior for any view context class defined within
|
|
7
|
+
# a slice's module namespace.
|
|
8
8
|
#
|
|
9
|
-
# @api
|
|
10
|
-
# @since 2.
|
|
9
|
+
# @api public
|
|
10
|
+
# @since 2.1.0
|
|
11
11
|
class SliceConfiguredContext < Module
|
|
12
12
|
attr_reader :slice
|
|
13
13
|
|
|
14
|
+
# @api private
|
|
15
|
+
# @since 2.1.0
|
|
14
16
|
def initialize(slice)
|
|
15
17
|
super()
|
|
16
18
|
@slice = slice
|
|
17
19
|
end
|
|
18
20
|
|
|
21
|
+
# @api private
|
|
22
|
+
# @since 2.1.0
|
|
19
23
|
def extended(_context_class)
|
|
20
24
|
define_new
|
|
21
25
|
end
|
|
22
26
|
|
|
27
|
+
# @api public
|
|
28
|
+
# @since 2.1.0
|
|
23
29
|
def inspect
|
|
24
30
|
"#<#{self.class.name}[#{slice.name}]>"
|
|
25
31
|
end
|
|
26
32
|
|
|
27
33
|
private
|
|
28
34
|
|
|
29
|
-
# Defines a {.new} method on the context class that resolves key components from
|
|
30
|
-
#
|
|
31
|
-
# dependencies.
|
|
35
|
+
# Defines a {.new} method on the context class that resolves key components from the app
|
|
36
|
+
# container and provides them to {#initialize} as injected dependencies.
|
|
32
37
|
#
|
|
33
38
|
# This includes the following app components:
|
|
34
|
-
#
|
|
35
39
|
# - the configured inflector as `inflector`
|
|
36
40
|
# - "settings" from the app container as `settings`
|
|
37
41
|
# - "routes" from the app container as `routes`
|
|
@@ -3,19 +3,30 @@
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
|
-
#
|
|
6
|
+
# Provides slice-specific helper methods any view object requiring access to helpers.
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
# @since 2.1.0
|
|
7
10
|
class SliceConfiguredHelpers < Module
|
|
8
11
|
attr_reader :slice
|
|
9
12
|
|
|
13
|
+
# @api private
|
|
14
|
+
# @since 2.1.0
|
|
10
15
|
def initialize(slice)
|
|
11
16
|
super()
|
|
12
17
|
@slice = slice
|
|
13
18
|
end
|
|
14
19
|
|
|
20
|
+
# @api private
|
|
21
|
+
# @since 2.1.0
|
|
15
22
|
def extended(klass)
|
|
16
23
|
include_helpers(klass)
|
|
17
24
|
end
|
|
18
25
|
|
|
26
|
+
# @return [String]
|
|
27
|
+
#
|
|
28
|
+
# @api public
|
|
29
|
+
# @since 2.1.0
|
|
19
30
|
def inspect
|
|
20
31
|
"#<#{self.class.name}[#{slice.name}]>"
|
|
21
32
|
end
|
|
@@ -6,7 +6,7 @@ module Hanami
|
|
|
6
6
|
# Provides slice-specific configuration and behavior for any view part class defined within a
|
|
7
7
|
# slice's module namespace.
|
|
8
8
|
#
|
|
9
|
-
# @api
|
|
9
|
+
# @api public
|
|
10
10
|
# @since 2.1.0
|
|
11
11
|
class SliceConfiguredPart < Module
|
|
12
12
|
attr_reader :slice
|
|
@@ -24,7 +24,9 @@ module Hanami
|
|
|
24
24
|
define_new
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
# @
|
|
27
|
+
# @return [String]
|
|
28
|
+
#
|
|
29
|
+
# @api public
|
|
28
30
|
# @since 2.1.0
|
|
29
31
|
def inspect
|
|
30
32
|
"#<#{self.class.name}[#{slice.name}]>"
|
|
@@ -49,9 +51,6 @@ module Hanami
|
|
|
49
51
|
# # Useful when unit testing parts
|
|
50
52
|
# part = MyApp::Views::Parts::Post.new(value: hello_world_post)
|
|
51
53
|
# part.title_tag # => "<h1>Hello world</h1>"
|
|
52
|
-
#
|
|
53
|
-
# @api private
|
|
54
|
-
# @since 2.1.0
|
|
55
54
|
def define_new
|
|
56
55
|
slice = self.slice
|
|
57
56
|
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
|
-
# Provides slice-specific configuration and behavior for any view class defined
|
|
7
|
-
#
|
|
6
|
+
# Provides slice-specific configuration and behavior for any view class defined within a
|
|
7
|
+
# slice's module namespace.
|
|
8
8
|
#
|
|
9
|
-
# @api
|
|
10
|
-
# @since 2.
|
|
9
|
+
# @api public
|
|
10
|
+
# @since 2.1.0
|
|
11
11
|
class SliceConfiguredView < Module
|
|
12
12
|
TEMPLATES_DIR = "templates"
|
|
13
13
|
VIEWS_DIR = "views"
|
|
@@ -16,17 +16,25 @@ module Hanami
|
|
|
16
16
|
|
|
17
17
|
attr_reader :slice
|
|
18
18
|
|
|
19
|
+
# @api private
|
|
20
|
+
# @since 2.1.0
|
|
19
21
|
def initialize(slice)
|
|
20
22
|
super()
|
|
21
23
|
@slice = slice
|
|
22
24
|
end
|
|
23
25
|
|
|
26
|
+
# @api private
|
|
27
|
+
# @since 2.1.0
|
|
24
28
|
def extended(view_class)
|
|
25
29
|
load_app_view
|
|
26
30
|
configure_view(view_class)
|
|
27
31
|
define_inherited
|
|
28
32
|
end
|
|
29
33
|
|
|
34
|
+
# @return [String]
|
|
35
|
+
#
|
|
36
|
+
# @api public
|
|
37
|
+
# @since 2.1.0
|
|
30
38
|
def inspect
|
|
31
39
|
"#<#{self.class.name}[#{slice.name}]>"
|
|
32
40
|
end
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Extensions
|
|
5
5
|
module View
|
|
6
|
+
# Module including the standard library of Hanami helpers
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
# @since 2.1.0
|
|
6
10
|
module StandardHelpers
|
|
7
11
|
include Hanami::View::Helpers::EscapeHelper
|
|
8
12
|
include Hanami::View::Helpers::NumberFormattingHelper
|
|
@@ -7,13 +7,13 @@ module Hanami
|
|
|
7
7
|
module Extensions
|
|
8
8
|
# Integrated behavior for `Hanami::View` classes within Hanami apps.
|
|
9
9
|
#
|
|
10
|
-
# This is NOT RELEASED as of 2.0.0.
|
|
11
|
-
#
|
|
12
10
|
# @see Hanami::View
|
|
13
11
|
#
|
|
14
|
-
# @api
|
|
12
|
+
# @api public
|
|
13
|
+
# @since 2.1.0
|
|
15
14
|
module View
|
|
16
15
|
# @api private
|
|
16
|
+
# @since 2.1.0
|
|
17
17
|
def self.included(view_class)
|
|
18
18
|
super
|
|
19
19
|
|
|
@@ -22,8 +22,10 @@ module Hanami
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# @api private
|
|
25
|
+
# @since 2.1.0
|
|
25
26
|
module ClassMethods
|
|
26
27
|
# @api private
|
|
28
|
+
# @since 2.1.0
|
|
27
29
|
def configure_for_slice(slice)
|
|
28
30
|
extend SliceConfiguredView.new(slice)
|
|
29
31
|
end
|
|
@@ -99,58 +99,58 @@ module Hanami
|
|
|
99
99
|
#
|
|
100
100
|
# @example Single Asset
|
|
101
101
|
#
|
|
102
|
-
# <%=
|
|
102
|
+
# <%= javascript_tag "application" %>
|
|
103
103
|
#
|
|
104
104
|
# # <script src="/assets/application.js" type="text/javascript"></script>
|
|
105
105
|
#
|
|
106
106
|
# @example Multiple Assets
|
|
107
107
|
#
|
|
108
|
-
# <%=
|
|
108
|
+
# <%= javascript_tag "application", "dashboard" %>
|
|
109
109
|
#
|
|
110
110
|
# # <script src="/assets/application.js" type="text/javascript"></script>
|
|
111
111
|
# # <script src="/assets/dashboard.js" type="text/javascript"></script>
|
|
112
112
|
#
|
|
113
113
|
# @example Asynchronous Execution
|
|
114
114
|
#
|
|
115
|
-
# <%=
|
|
115
|
+
# <%= javascript_tag "application", async: true %>
|
|
116
116
|
#
|
|
117
117
|
# # <script src="/assets/application.js" type="text/javascript" async="async"></script>
|
|
118
118
|
#
|
|
119
119
|
# @example Subresource Integrity
|
|
120
120
|
#
|
|
121
|
-
# <%=
|
|
121
|
+
# <%= javascript_tag "application" %>
|
|
122
122
|
#
|
|
123
123
|
# # <script src="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js"
|
|
124
124
|
# # type="text/javascript" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
|
|
125
125
|
#
|
|
126
126
|
# @example Subresource Integrity for 3rd Party Scripts
|
|
127
127
|
#
|
|
128
|
-
# <%=
|
|
128
|
+
# <%= javascript_tag "https://example.com/assets/example.js", integrity: "sha384-oqVu...Y8wC" %>
|
|
129
129
|
#
|
|
130
130
|
# # <script src="https://example.com/assets/example.js" type="text/javascript"
|
|
131
131
|
# # integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
|
|
132
132
|
#
|
|
133
133
|
# @example Deferred Execution
|
|
134
134
|
#
|
|
135
|
-
# <%=
|
|
135
|
+
# <%= javascript_tag "application", defer: true %>
|
|
136
136
|
#
|
|
137
137
|
# # <script src="/assets/application.js" type="text/javascript" defer="defer"></script>
|
|
138
138
|
#
|
|
139
139
|
# @example Absolute URL
|
|
140
140
|
#
|
|
141
|
-
# <%=
|
|
141
|
+
# <%= javascript_tag "https://code.jquery.com/jquery-2.1.4.min.js" %>
|
|
142
142
|
#
|
|
143
143
|
# # <script src="https://code.jquery.com/jquery-2.1.4.min.js" type="text/javascript"></script>
|
|
144
144
|
#
|
|
145
145
|
# @example Fingerprint Mode
|
|
146
146
|
#
|
|
147
|
-
# <%=
|
|
147
|
+
# <%= javascript_tag "application" %>
|
|
148
148
|
#
|
|
149
149
|
# # <script src="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js" type="text/javascript"></script>
|
|
150
150
|
#
|
|
151
151
|
# @example CDN Mode
|
|
152
152
|
#
|
|
153
|
-
# <%=
|
|
153
|
+
# <%= javascript_tag "application" %>
|
|
154
154
|
#
|
|
155
155
|
# # <script src="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js"
|
|
156
156
|
# # type="text/javascript"></script>
|
|
@@ -203,47 +203,47 @@ module Hanami
|
|
|
203
203
|
#
|
|
204
204
|
# @example Single Asset
|
|
205
205
|
#
|
|
206
|
-
# <%=
|
|
206
|
+
# <%= stylesheet_tag "application" %>
|
|
207
207
|
#
|
|
208
208
|
# # <link href="/assets/application.css" type="text/css" rel="stylesheet">
|
|
209
209
|
#
|
|
210
210
|
# @example Multiple Assets
|
|
211
211
|
#
|
|
212
|
-
# <%=
|
|
212
|
+
# <%= stylesheet_tag "application", "dashboard" %>
|
|
213
213
|
#
|
|
214
214
|
# # <link href="/assets/application.css" type="text/css" rel="stylesheet">
|
|
215
215
|
# # <link href="/assets/dashboard.css" type="text/css" rel="stylesheet">
|
|
216
216
|
#
|
|
217
217
|
# @example Subresource Integrity
|
|
218
218
|
#
|
|
219
|
-
# <%=
|
|
219
|
+
# <%= stylesheet_tag "application" %>
|
|
220
220
|
#
|
|
221
221
|
# # <link href="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css"
|
|
222
222
|
# # type="text/css" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
|
|
223
223
|
#
|
|
224
224
|
# @example Subresource Integrity for 3rd Party Assets
|
|
225
225
|
#
|
|
226
|
-
# <%=
|
|
226
|
+
# <%= stylesheet_tag "https://example.com/assets/example.css", integrity: "sha384-oqVu...Y8wC" %>
|
|
227
227
|
#
|
|
228
228
|
# # <link href="https://example.com/assets/example.css"
|
|
229
229
|
# # type="text/css" rel="stylesheet" integrity="sha384-oqVu...Y8wC" crossorigin="anonymous"></script>
|
|
230
230
|
#
|
|
231
231
|
# @example Absolute URL
|
|
232
232
|
#
|
|
233
|
-
# <%=
|
|
233
|
+
# <%= stylesheet_tag "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" %>
|
|
234
234
|
#
|
|
235
235
|
# # <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
|
|
236
236
|
# # type="text/css" rel="stylesheet">
|
|
237
237
|
#
|
|
238
238
|
# @example Fingerprint Mode
|
|
239
239
|
#
|
|
240
|
-
# <%=
|
|
240
|
+
# <%= stylesheet_tag "application" %>
|
|
241
241
|
#
|
|
242
242
|
# # <link href="/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css" type="text/css" rel="stylesheet">
|
|
243
243
|
#
|
|
244
244
|
# @example CDN Mode
|
|
245
245
|
#
|
|
246
|
-
# <%=
|
|
246
|
+
# <%= stylesheet_tag "application" %>
|
|
247
247
|
#
|
|
248
248
|
# # <link href="https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.css"
|
|
249
249
|
# # type="text/css" rel="stylesheet">
|
|
@@ -297,37 +297,37 @@ module Hanami
|
|
|
297
297
|
#
|
|
298
298
|
# @example Basic Usage
|
|
299
299
|
#
|
|
300
|
-
# <%=
|
|
300
|
+
# <%= image_tag "logo.png" %>
|
|
301
301
|
#
|
|
302
302
|
# # <img src="/assets/logo.png" alt="Logo">
|
|
303
303
|
#
|
|
304
304
|
# @example Custom alt Attribute
|
|
305
305
|
#
|
|
306
|
-
# <%=
|
|
306
|
+
# <%= image_tag "logo.png", alt: "Application Logo" %>
|
|
307
307
|
#
|
|
308
308
|
# # <img src="/assets/logo.png" alt="Application Logo">
|
|
309
309
|
#
|
|
310
310
|
# @example Custom HTML Attributes
|
|
311
311
|
#
|
|
312
|
-
# <%=
|
|
312
|
+
# <%= image_tag "logo.png", id: "logo", class: "image" %>
|
|
313
313
|
#
|
|
314
314
|
# # <img src="/assets/logo.png" alt="Logo" id="logo" class="image">
|
|
315
315
|
#
|
|
316
316
|
# @example Absolute URL
|
|
317
317
|
#
|
|
318
|
-
# <%=
|
|
318
|
+
# <%= image_tag "https://example-cdn.com/images/logo.png" %>
|
|
319
319
|
#
|
|
320
320
|
# # <img src="https://example-cdn.com/images/logo.png" alt="Logo">
|
|
321
321
|
#
|
|
322
322
|
# @example Fingerprint Mode
|
|
323
323
|
#
|
|
324
|
-
# <%=
|
|
324
|
+
# <%= image_tag "logo.png" %>
|
|
325
325
|
#
|
|
326
326
|
# # <img src="/assets/logo-28a6b886de2372ee3922fcaf3f78f2d8.png" alt="Logo">
|
|
327
327
|
#
|
|
328
328
|
# @example CDN Mode
|
|
329
329
|
#
|
|
330
|
-
# <%=
|
|
330
|
+
# <%= image_tag "logo.png" %>
|
|
331
331
|
#
|
|
332
332
|
# # <img src="https://assets.bookshelf.org/assets/logo-28a6b886de2372ee3922fcaf3f78f2d8.png" alt="Logo">
|
|
333
333
|
def image_tag(source, options = {})
|
|
@@ -368,31 +368,31 @@ module Hanami
|
|
|
368
368
|
#
|
|
369
369
|
# @example Basic Usage
|
|
370
370
|
#
|
|
371
|
-
# <%=
|
|
371
|
+
# <%= favicon_tag %>
|
|
372
372
|
#
|
|
373
373
|
# # <link href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">
|
|
374
374
|
#
|
|
375
375
|
# @example Custom Path
|
|
376
376
|
#
|
|
377
|
-
# <%=
|
|
377
|
+
# <%= favicon_tag "fav.ico" %>
|
|
378
378
|
#
|
|
379
379
|
# # <link href="/assets/fav.ico" rel="shortcut icon" type="image/x-icon">
|
|
380
380
|
#
|
|
381
381
|
# @example Custom HTML Attributes
|
|
382
382
|
#
|
|
383
|
-
# <%=
|
|
383
|
+
# <%= favicon_tag "favicon.ico", id: "fav" %>
|
|
384
384
|
#
|
|
385
385
|
# # <link id: "fav" href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">
|
|
386
386
|
#
|
|
387
387
|
# @example Fingerprint Mode
|
|
388
388
|
#
|
|
389
|
-
# <%=
|
|
389
|
+
# <%= favicon_tag %>
|
|
390
390
|
#
|
|
391
391
|
# # <link href="/assets/favicon-28a6b886de2372ee3922fcaf3f78f2d8.ico" rel="shortcut icon" type="image/x-icon">
|
|
392
392
|
#
|
|
393
393
|
# @example CDN Mode
|
|
394
394
|
#
|
|
395
|
-
# <%=
|
|
395
|
+
# <%= favicon_tag %>
|
|
396
396
|
#
|
|
397
397
|
# # <link href="https://assets.bookshelf.org/assets/favicon-28a6b886de2372ee3922fcaf3f78f2d8.ico"
|
|
398
398
|
# rel="shortcut icon" type="image/x-icon">
|
|
@@ -442,19 +442,19 @@ module Hanami
|
|
|
442
442
|
#
|
|
443
443
|
# @example Basic Usage
|
|
444
444
|
#
|
|
445
|
-
# <%=
|
|
445
|
+
# <%= video_tag "movie.mp4" %>
|
|
446
446
|
#
|
|
447
447
|
# # <video src="/assets/movie.mp4"></video>
|
|
448
448
|
#
|
|
449
449
|
# @example Absolute URL
|
|
450
450
|
#
|
|
451
|
-
# <%=
|
|
451
|
+
# <%= video_tag "https://example-cdn.com/assets/movie.mp4" %>
|
|
452
452
|
#
|
|
453
453
|
# # <video src="https://example-cdn.com/assets/movie.mp4"></video>
|
|
454
454
|
#
|
|
455
455
|
# @example Custom HTML Attributes
|
|
456
456
|
#
|
|
457
|
-
# <%=
|
|
457
|
+
# <%= video_tag("movie.mp4", autoplay: true, controls: true) %>
|
|
458
458
|
#
|
|
459
459
|
# # <video src="/assets/movie.mp4" autoplay="autoplay" controls="controls"></video>
|
|
460
460
|
#
|
|
@@ -485,25 +485,25 @@ module Hanami
|
|
|
485
485
|
#
|
|
486
486
|
# @example Without Any Argument
|
|
487
487
|
#
|
|
488
|
-
# <%=
|
|
488
|
+
# <%= video_tag %>
|
|
489
489
|
#
|
|
490
490
|
# # ArgumentError
|
|
491
491
|
#
|
|
492
492
|
# @example Without src And Without Block
|
|
493
493
|
#
|
|
494
|
-
# <%=
|
|
494
|
+
# <%= video_tag(content: true) %>
|
|
495
495
|
#
|
|
496
496
|
# # ArgumentError
|
|
497
497
|
#
|
|
498
498
|
# @example Fingerprint Mode
|
|
499
499
|
#
|
|
500
|
-
# <%=
|
|
500
|
+
# <%= video_tag "movie.mp4" %>
|
|
501
501
|
#
|
|
502
502
|
# # <video src="/assets/movie-28a6b886de2372ee3922fcaf3f78f2d8.mp4"></video>
|
|
503
503
|
#
|
|
504
504
|
# @example CDN Mode
|
|
505
505
|
#
|
|
506
|
-
# <%=
|
|
506
|
+
# <%= video_tag "movie.mp4" %>
|
|
507
507
|
#
|
|
508
508
|
# # <video src="https://assets.bookshelf.org/assets/movie-28a6b886de2372ee3922fcaf3f78f2d8.mp4"></video>
|
|
509
509
|
def video_tag(source = nil, options = {}, &blk)
|
|
@@ -544,19 +544,19 @@ module Hanami
|
|
|
544
544
|
#
|
|
545
545
|
# @example Basic Usage
|
|
546
546
|
#
|
|
547
|
-
# <%=
|
|
547
|
+
# <%= audio_tag "song.ogg" %>
|
|
548
548
|
#
|
|
549
549
|
# # <audio src="/assets/song.ogg"></audio>
|
|
550
550
|
#
|
|
551
551
|
# @example Absolute URL
|
|
552
552
|
#
|
|
553
|
-
# <%=
|
|
553
|
+
# <%= audio_tag "https://example-cdn.com/assets/song.ogg" %>
|
|
554
554
|
#
|
|
555
555
|
# # <audio src="https://example-cdn.com/assets/song.ogg"></audio>
|
|
556
556
|
#
|
|
557
557
|
# @example Custom HTML Attributes
|
|
558
558
|
#
|
|
559
|
-
# <%=
|
|
559
|
+
# <%= audio_tag("song.ogg", autoplay: true, controls: true) %>
|
|
560
560
|
#
|
|
561
561
|
# # <audio src="/assets/song.ogg" autoplay="autoplay" controls="controls"></audio>
|
|
562
562
|
#
|
|
@@ -587,25 +587,25 @@ module Hanami
|
|
|
587
587
|
#
|
|
588
588
|
# @example Without Any Argument
|
|
589
589
|
#
|
|
590
|
-
# <%=
|
|
590
|
+
# <%= audio_tag %>
|
|
591
591
|
#
|
|
592
592
|
# # ArgumentError
|
|
593
593
|
#
|
|
594
594
|
# @example Without src And Without Block
|
|
595
595
|
#
|
|
596
|
-
# <%=
|
|
596
|
+
# <%= audio_tag(controls: true) %>
|
|
597
597
|
#
|
|
598
598
|
# # ArgumentError
|
|
599
599
|
#
|
|
600
600
|
# @example Fingerprint Mode
|
|
601
601
|
#
|
|
602
|
-
# <%=
|
|
602
|
+
# <%= audio_tag "song.ogg" %>
|
|
603
603
|
#
|
|
604
604
|
# # <audio src="/assets/song-28a6b886de2372ee3922fcaf3f78f2d8.ogg"></audio>
|
|
605
605
|
#
|
|
606
606
|
# @example CDN Mode
|
|
607
607
|
#
|
|
608
|
-
# <%=
|
|
608
|
+
# <%= audio_tag "song.ogg" %>
|
|
609
609
|
#
|
|
610
610
|
# # <audio src="https://assets.bookshelf.org/assets/song-28a6b886de2372ee3922fcaf3f78f2d8.ogg"></audio>
|
|
611
611
|
def audio_tag(source = nil, options = {}, &blk)
|
data/lib/hanami/version.rb
CHANGED
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.1.0.
|
|
4
|
+
version: 2.1.0.rc2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Luca Guidi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-11-
|
|
11
|
+
date: 2023-11-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -162,28 +162,28 @@ dependencies:
|
|
|
162
162
|
requirements:
|
|
163
163
|
- - "~>"
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: 2.1.
|
|
165
|
+
version: 2.1.rc
|
|
166
166
|
type: :runtime
|
|
167
167
|
prerelease: false
|
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
169
|
requirements:
|
|
170
170
|
- - "~>"
|
|
171
171
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: 2.1.
|
|
172
|
+
version: 2.1.rc
|
|
173
173
|
- !ruby/object:Gem::Dependency
|
|
174
174
|
name: hanami-utils
|
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
|
176
176
|
requirements:
|
|
177
177
|
- - "~>"
|
|
178
178
|
- !ruby/object:Gem::Version
|
|
179
|
-
version: 2.1.
|
|
179
|
+
version: 2.1.rc
|
|
180
180
|
type: :runtime
|
|
181
181
|
prerelease: false
|
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
|
183
183
|
requirements:
|
|
184
184
|
- - "~>"
|
|
185
185
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: 2.1.
|
|
186
|
+
version: 2.1.rc
|
|
187
187
|
- !ruby/object:Gem::Dependency
|
|
188
188
|
name: zeitwerk
|
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -450,7 +450,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
450
450
|
- !ruby/object:Gem::Version
|
|
451
451
|
version: 1.3.1
|
|
452
452
|
requirements: []
|
|
453
|
-
rubygems_version: 3.4.
|
|
453
|
+
rubygems_version: 3.4.21
|
|
454
454
|
signing_key:
|
|
455
455
|
specification_version: 4
|
|
456
456
|
summary: The web, with simplicity
|