hanami 2.1.0.rc2 → 2.1.0.rc3
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 +15 -1
- data/hanami.gemspec +1 -1
- data/lib/hanami/app.rb +0 -5
- data/lib/hanami/config.rb +1 -5
- data/lib/hanami/extensions/view/context.rb +12 -3
- data/lib/hanami/helpers/assets_helper.rb +30 -29
- data/lib/hanami/helpers/form_helper/form_builder.rb +54 -54
- data/lib/hanami/helpers/form_helper/values.rb +8 -8
- data/lib/hanami/helpers/form_helper.rb +9 -9
- data/lib/hanami/providers/assets.rb +4 -1
- data/lib/hanami/rake_tasks.rb +1 -9
- data/lib/hanami/slice.rb +10 -0
- data/lib/hanami/version.rb +1 -1
- data/spec/integration/assets/assets_spec.rb +67 -24
- data/spec/integration/assets/cross_slice_assets_helpers_spec.rb +130 -0
- data/spec/integration/view/context/assets_spec.rb +57 -31
- data/spec/support/app_integration.rb +12 -6
- data/spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb +11 -0
- data/spec/unit/hanami/version_spec.rb +1 -1
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f126bd2f756323d71dfe0eedd34a45f998882fd1ef2e0afcc8d05c27de224e3a
|
4
|
+
data.tar.gz: c9b360c13dbb7ce88e935df753a4d9ec4234f02bc625c403664fb44617ff6261
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef015d93dfbd94b0f0617cc0966f1d081e06859b2559de39c3b180dc9afc9d0e9034d53dc66117ea7305e80afd8f643a4204246dcba202da8f3c49b59c108426
|
7
|
+
data.tar.gz: bced4c311fbcf6ee66e3036cb70fd9f9edc7cb897f6ff26eca660b30a94629297ec5abc3dfb5c849d04f682f66d45e0c2aa55b46829b9ce7b5edeef80a3e9247
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,21 @@
|
|
2
2
|
|
3
3
|
The web, with simplicity.
|
4
4
|
|
5
|
-
##
|
5
|
+
## v2.1.0.rc3 - 2024-02-16
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- [Tim Riley] Return `nil` when setting content via `#content_for` on the app's view context. This
|
10
|
+
allows it to be used with tempalte output tags (such as ERB's `<%=`) that capture a block for the
|
11
|
+
given content. (#1369)
|
12
|
+
|
13
|
+
## Fixed
|
14
|
+
|
15
|
+
- [Tim Riley] Ensure assets Rake task for Heroku works (#1368)
|
16
|
+
|
17
|
+
## v2.1.0.rc2 - 2023-11-08
|
18
|
+
|
19
|
+
### Changed
|
6
20
|
|
7
21
|
- [Tim Riley] Enable `config.render_detailed_errors` in development mode only by default. (#1365)
|
8
22
|
- [Tim Riley] Remove current_path from context (#1362)
|
data/hanami.gemspec
CHANGED
@@ -38,7 +38,7 @@ 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", "
|
41
|
+
spec.add_dependency "hanami-cli", "= 2.1.0.rc3"
|
42
42
|
spec.add_dependency "hanami-utils", "~> 2.1.rc"
|
43
43
|
spec.add_dependency "zeitwerk", "~> 2.6"
|
44
44
|
|
data/lib/hanami/app.rb
CHANGED
@@ -161,11 +161,6 @@ module Hanami
|
|
161
161
|
require_relative "providers/rack"
|
162
162
|
register_provider(:rack, source: Hanami::Providers::Rack, namespace: true)
|
163
163
|
end
|
164
|
-
|
165
|
-
if Hanami.bundled?("hanami-assets")
|
166
|
-
require_relative "providers/assets"
|
167
|
-
register_provider(:assets, source: Providers::Assets.for_slice(self))
|
168
|
-
end
|
169
164
|
end
|
170
165
|
|
171
166
|
def prepare_autoloader
|
data/lib/hanami/config.rb
CHANGED
@@ -99,7 +99,6 @@ module Hanami
|
|
99
99
|
rack.monitor
|
100
100
|
routes
|
101
101
|
settings
|
102
|
-
assets
|
103
102
|
]
|
104
103
|
|
105
104
|
# @!attribute [rw] no_auto_register_paths
|
@@ -309,10 +308,7 @@ module Hanami
|
|
309
308
|
|
310
309
|
@assets = load_dependent_config("hanami-assets") {
|
311
310
|
require_relative "config/assets"
|
312
|
-
|
313
|
-
Hanami::Config::Assets.new(
|
314
|
-
manifest_path: root.join("public", "assets.json")
|
315
|
-
)
|
311
|
+
Hanami::Config::Assets.new
|
316
312
|
}
|
317
313
|
|
318
314
|
yield self if block_given?
|
@@ -143,7 +143,14 @@ module Hanami
|
|
143
143
|
# @since 2.1.0
|
144
144
|
def assets
|
145
145
|
unless @assets
|
146
|
-
|
146
|
+
msg =
|
147
|
+
if Hanami.bundled?("hanami-assets")
|
148
|
+
"Have you put files into your assets directory?"
|
149
|
+
else
|
150
|
+
"The hanami-assets gem is required to access assets."
|
151
|
+
end
|
152
|
+
|
153
|
+
raise Hanami::ComponentLoadError, "Assets not available. #{msg}"
|
147
154
|
end
|
148
155
|
|
149
156
|
@assets
|
@@ -159,7 +166,7 @@ module Hanami
|
|
159
166
|
# @since 2.1.0
|
160
167
|
def request
|
161
168
|
unless @request
|
162
|
-
raise Hanami::ComponentLoadError, "
|
169
|
+
raise Hanami::ComponentLoadError, "Request not available. Only views rendered from Hanami::Action instances have a request."
|
163
170
|
end
|
164
171
|
|
165
172
|
@request
|
@@ -194,7 +201,7 @@ module Hanami
|
|
194
201
|
# content_for(:page_title, "Hello world")
|
195
202
|
#
|
196
203
|
# @example In a template
|
197
|
-
#
|
204
|
+
# <%= content_for :page_title do %>
|
198
205
|
# <h1>Hello world</h1>
|
199
206
|
# <% end %>
|
200
207
|
#
|
@@ -211,8 +218,10 @@ module Hanami
|
|
211
218
|
def content_for(key, value = nil)
|
212
219
|
if block_given?
|
213
220
|
@content_for[key] = yield
|
221
|
+
nil
|
214
222
|
elsif value
|
215
223
|
@content_for[key] = value
|
224
|
+
nil
|
216
225
|
else
|
217
226
|
@content_for[key]
|
218
227
|
end
|
@@ -11,47 +11,47 @@ module Hanami
|
|
11
11
|
#
|
12
12
|
# Inject these helpers in a view
|
13
13
|
#
|
14
|
-
# @since
|
14
|
+
# @since 2.1.0
|
15
15
|
#
|
16
16
|
# @see http://www.rubydoc.info/gems/hanami-helpers/Hanami/Helpers/HtmlHelper
|
17
17
|
module AssetsHelper
|
18
|
-
# @since
|
18
|
+
# @since 2.1.0
|
19
19
|
# @api private
|
20
20
|
NEW_LINE_SEPARATOR = "\n"
|
21
21
|
|
22
|
-
# @since
|
22
|
+
# @since 2.1.0
|
23
23
|
# @api private
|
24
24
|
WILDCARD_EXT = ".*"
|
25
25
|
|
26
|
-
# @since
|
26
|
+
# @since 2.1.0
|
27
27
|
# @api private
|
28
28
|
JAVASCRIPT_EXT = ".js"
|
29
29
|
|
30
|
-
# @since
|
30
|
+
# @since 2.1.0
|
31
31
|
# @api private
|
32
32
|
STYLESHEET_EXT = ".css"
|
33
33
|
|
34
|
-
# @since
|
34
|
+
# @since 2.1.0
|
35
35
|
# @api private
|
36
36
|
JAVASCRIPT_MIME_TYPE = "text/javascript"
|
37
37
|
|
38
|
-
# @since
|
38
|
+
# @since 2.1.0
|
39
39
|
# @api private
|
40
40
|
STYLESHEET_MIME_TYPE = "text/css"
|
41
41
|
|
42
|
-
# @since
|
42
|
+
# @since 2.1.0
|
43
43
|
# @api private
|
44
44
|
FAVICON_MIME_TYPE = "image/x-icon"
|
45
45
|
|
46
|
-
# @since
|
46
|
+
# @since 2.1.0
|
47
47
|
# @api private
|
48
48
|
STYLESHEET_REL = "stylesheet"
|
49
49
|
|
50
|
-
# @since
|
50
|
+
# @since 2.1.0
|
51
51
|
# @api private
|
52
52
|
FAVICON_REL = "shortcut icon"
|
53
53
|
|
54
|
-
# @since
|
54
|
+
# @since 2.1.0
|
55
55
|
# @api private
|
56
56
|
DEFAULT_FAVICON = "favicon.ico"
|
57
57
|
|
@@ -85,7 +85,7 @@ module Hanami
|
|
85
85
|
# name of the algorithm, then a hyphen, then the hash value of the file.
|
86
86
|
# If more than one algorithm is used, they"ll be separated by a space.
|
87
87
|
#
|
88
|
-
# @param
|
88
|
+
# @param source_paths [Array<String, #url>] one or more assets by name or absolute URL
|
89
89
|
#
|
90
90
|
# @return [Hanami::View::HTML::SafeString] the markup
|
91
91
|
#
|
@@ -93,7 +93,7 @@ module Hanami
|
|
93
93
|
# `subresource_integrity` modes are on and the javascript file is missing
|
94
94
|
# from the manifest
|
95
95
|
#
|
96
|
-
# @since
|
96
|
+
# @since 2.1.0
|
97
97
|
#
|
98
98
|
# @see Hanami::Assets::Helpers#path
|
99
99
|
#
|
@@ -189,7 +189,7 @@ module Hanami
|
|
189
189
|
# name of the algorithm, then a hyphen, then the hashed value of the file.
|
190
190
|
# If more than one algorithm is used, they"ll be separated by a space.
|
191
191
|
#
|
192
|
-
# @param
|
192
|
+
# @param source_paths [Array<String, #url>] one or more assets by name or absolute URL
|
193
193
|
#
|
194
194
|
# @return [Hanami::View::HTML::SafeString] the markup
|
195
195
|
#
|
@@ -197,7 +197,7 @@ module Hanami
|
|
197
197
|
# `subresource_integrity` modes are on and the stylesheet file is missing
|
198
198
|
# from the manifest
|
199
199
|
#
|
200
|
-
# @since
|
200
|
+
# @since 2.1.0
|
201
201
|
#
|
202
202
|
# @see Hanami::Assets::Helpers#path
|
203
203
|
#
|
@@ -282,7 +282,7 @@ module Hanami
|
|
282
282
|
# If the "CDN mode" is on, the `src` is an absolute URL of the
|
283
283
|
# application CDN.
|
284
284
|
#
|
285
|
-
# @param source [String] asset name or
|
285
|
+
# @param source [String, #url] asset name, absolute URL, or asset object
|
286
286
|
# @param options [Hash] HTML 5 attributes
|
287
287
|
#
|
288
288
|
# @return [Hanami::View::HTML::SafeString] the markup
|
@@ -291,7 +291,7 @@ module Hanami
|
|
291
291
|
# `subresource_integrity` modes are on and the image file is missing
|
292
292
|
# from the manifest
|
293
293
|
#
|
294
|
-
# @since
|
294
|
+
# @since 2.1.0
|
295
295
|
#
|
296
296
|
# @see Hanami::Assets::Helpers#path
|
297
297
|
#
|
@@ -353,7 +353,7 @@ module Hanami
|
|
353
353
|
# If the "CDN mode" is on, the `href` is an absolute URL of the
|
354
354
|
# application CDN.
|
355
355
|
#
|
356
|
-
# @param source [String] asset name
|
356
|
+
# @param source [String, #url] asset name or asset object
|
357
357
|
# @param options [Hash] HTML 5 attributes
|
358
358
|
#
|
359
359
|
# @return [Hanami::View::HTML::SafeString] the markup
|
@@ -362,7 +362,7 @@ module Hanami
|
|
362
362
|
# `subresource_integrity` modes are on and the favicon is file missing
|
363
363
|
# from the manifest
|
364
364
|
#
|
365
|
-
# @since
|
365
|
+
# @since 2.1.0
|
366
366
|
#
|
367
367
|
# @see Hanami::Assets::Helpers#path
|
368
368
|
#
|
@@ -424,7 +424,7 @@ module Hanami
|
|
424
424
|
# If the "CDN mode" is on, the `src` is an absolute URL of the
|
425
425
|
# application CDN.
|
426
426
|
#
|
427
|
-
# @param source [String] asset name or
|
427
|
+
# @param source [String, #url] asset name, absolute URL or asset object
|
428
428
|
# @param options [Hash] HTML 5 attributes
|
429
429
|
#
|
430
430
|
# @return [Hanami::View::HTML::SafeString] the markup
|
@@ -436,7 +436,7 @@ module Hanami
|
|
436
436
|
# @raise [ArgumentError] if source isn"t specified both as argument or
|
437
437
|
# tag inside the given block
|
438
438
|
#
|
439
|
-
# @since
|
439
|
+
# @since 2.1.0
|
440
440
|
#
|
441
441
|
# @see Hanami::Assets::Helpers#path
|
442
442
|
#
|
@@ -526,7 +526,7 @@ module Hanami
|
|
526
526
|
# If the "CDN mode" is on, the `src` is an absolute URL of the
|
527
527
|
# application CDN.
|
528
528
|
#
|
529
|
-
# @param source [String] asset name or
|
529
|
+
# @param source [String, #url] asset name, absolute URL or asset object
|
530
530
|
# @param options [Hash] HTML 5 attributes
|
531
531
|
#
|
532
532
|
# @return [Hanami::View::HTML::SafeString] the markup
|
@@ -538,7 +538,7 @@ module Hanami
|
|
538
538
|
# @raise [ArgumentError] if source isn"t specified both as argument or
|
539
539
|
# tag inside the given block
|
540
540
|
#
|
541
|
-
# @since
|
541
|
+
# @since 2.1.0
|
542
542
|
#
|
543
543
|
# @see Hanami::Assets::Helpers#path
|
544
544
|
#
|
@@ -626,7 +626,7 @@ module Hanami
|
|
626
626
|
#
|
627
627
|
# If CDN mode is on, it returns the absolute URL of the asset.
|
628
628
|
#
|
629
|
-
# @param
|
629
|
+
# @param source_path [String, #url] the asset name or asset object
|
630
630
|
#
|
631
631
|
# @return [String] the asset path
|
632
632
|
#
|
@@ -634,7 +634,7 @@ module Hanami
|
|
634
634
|
# `subresource_integrity` modes are on and the asset is missing
|
635
635
|
# from the manifest
|
636
636
|
#
|
637
|
-
# @since
|
637
|
+
# @since 2.1.0
|
638
638
|
#
|
639
639
|
# @example Basic Usage
|
640
640
|
#
|
@@ -666,6 +666,7 @@ module Hanami
|
|
666
666
|
#
|
667
667
|
# # "https://assets.bookshelf.org/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js"
|
668
668
|
def asset_url(source_path)
|
669
|
+
return source_path.url if source_path.respond_to?(:url)
|
669
670
|
return source_path if _absolute_url?(source_path)
|
670
671
|
|
671
672
|
_context.assets[source_path].url
|
@@ -673,7 +674,7 @@ module Hanami
|
|
673
674
|
|
674
675
|
private
|
675
676
|
|
676
|
-
# @since
|
677
|
+
# @since 2.1.0
|
677
678
|
# @api private
|
678
679
|
def _safe_tags(*source_paths, &blk)
|
679
680
|
::Hanami::View::HTML::SafeString.new(
|
@@ -684,7 +685,7 @@ module Hanami
|
|
684
685
|
# @since 2.1.0
|
685
686
|
# @api private
|
686
687
|
def _typed_path(source, ext)
|
687
|
-
source = "#{source}#{ext}" if _append_extension?(source, ext)
|
688
|
+
source = "#{source}#{ext}" if source.is_a?(String) && _append_extension?(source, ext)
|
688
689
|
asset_url(source)
|
689
690
|
end
|
690
691
|
|
@@ -696,7 +697,7 @@ module Hanami
|
|
696
697
|
_context.assets[source_path].sri
|
697
698
|
end
|
698
699
|
|
699
|
-
# @since
|
700
|
+
# @since 2.1.0
|
700
701
|
# @api private
|
701
702
|
def _absolute_url?(source)
|
702
703
|
ABSOLUTE_URL_MATCHER.match(source)
|
@@ -710,7 +711,7 @@ module Hanami
|
|
710
711
|
_context.assets.crossorigin?(source)
|
711
712
|
end
|
712
713
|
|
713
|
-
# @since
|
714
|
+
# @since 2.1.0
|
714
715
|
# @api private
|
715
716
|
def _source_options(src, options, &blk)
|
716
717
|
options ||= {}
|