hanami 2.1.0.beta2.1 → 2.1.0.rc1
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 +25 -0
- data/hanami.gemspec +1 -1
- data/lib/hanami/config/actions.rb +14 -0
- data/lib/hanami/extensions/action/slice_configured_action.rb +5 -5
- data/lib/hanami/extensions/action.rb +4 -4
- data/lib/hanami/extensions/view/context.rb +0 -11
- data/lib/hanami/extensions/view/part.rb +51 -2
- data/lib/hanami/extensions/view/slice_configured_part.rb +72 -0
- data/lib/hanami/extensions/view/slice_configured_view.rb +2 -2
- data/lib/hanami/helpers/assets_helper.rb +6 -38
- data/lib/hanami/routes.rb +33 -2
- data/lib/hanami/slice.rb +12 -2
- data/lib/hanami/slice_registrar.rb +48 -23
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami/web/rack_logger.rb +70 -2
- data/lib/hanami/web/welcome.html.erb +203 -0
- data/lib/hanami/web/welcome.rb +46 -0
- data/spec/integration/assets/assets_spec.rb +14 -3
- data/spec/integration/logging/request_logging_spec.rb +65 -7
- data/spec/integration/rack_app/method_override_spec.rb +97 -0
- data/spec/integration/slices_spec.rb +275 -5
- data/spec/integration/view/context/assets_spec.rb +0 -8
- data/spec/integration/view/context/inflector_spec.rb +0 -8
- data/spec/integration/view/context/settings_spec.rb +0 -8
- data/spec/integration/view/helpers/part_helpers_spec.rb +2 -2
- data/spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb +10 -10
- data/spec/integration/view/parts/default_rendering_spec.rb +138 -0
- data/spec/integration/web/welcome_view_spec.rb +84 -0
- data/spec/support/app_integration.rb +22 -4
- data/spec/unit/hanami/helpers/assets_helper/{audio_spec.rb → audio_tag_spec.rb} +10 -14
- data/spec/unit/hanami/helpers/assets_helper/{favicon_spec.rb → favicon_tag_spec.rb} +7 -11
- data/spec/unit/hanami/helpers/assets_helper/{image_spec.rb → image_tag_spec.rb} +8 -12
- data/spec/unit/hanami/helpers/assets_helper/{javascript_spec.rb → javascript_tag_spec.rb} +14 -18
- data/spec/unit/hanami/helpers/assets_helper/{stylesheet_spec.rb → stylesheet_tag_spec.rb} +12 -16
- data/spec/unit/hanami/helpers/assets_helper/{video_spec.rb → video_tag_spec.rb} +11 -11
- data/spec/unit/hanami/version_spec.rb +1 -1
- metadata +23 -14
@@ -39,15 +39,14 @@ module RSpec
|
|
39
39
|
|
40
40
|
def compile_assets!
|
41
41
|
link_node_modules
|
42
|
+
generate_assets_config
|
42
43
|
|
43
44
|
require "hanami/cli/command"
|
44
45
|
require "hanami/cli/commands/app/command"
|
45
46
|
require "hanami/cli/commands/app/assets/compile"
|
46
|
-
|
47
|
+
assets_compile = Hanami::CLI::Commands::App::Assets::Compile.new(config: Hanami.app.config.assets)
|
47
48
|
|
48
|
-
with_directory(Hanami.app.root)
|
49
|
-
compiler.call
|
50
|
-
end
|
49
|
+
with_directory(Hanami.app.root) { assets_compile.call }
|
51
50
|
end
|
52
51
|
|
53
52
|
def link_node_modules
|
@@ -58,6 +57,25 @@ module RSpec
|
|
58
57
|
FileUtils.ln_s(node_modules_path, root)
|
59
58
|
rescue Errno::EEXIST # rubocop:disable Lint/SuppressedException
|
60
59
|
end
|
60
|
+
|
61
|
+
def generate_assets_config
|
62
|
+
root = Hanami.app.root
|
63
|
+
|
64
|
+
with_directory(root) do
|
65
|
+
write("config/assets.mjs", <<~JS) unless root.join("config", "assets.mjs").exist?
|
66
|
+
import * as assets from "hanami-assets";
|
67
|
+
await assets.run();
|
68
|
+
JS
|
69
|
+
|
70
|
+
write("package.json", <<~JSON) unless root.join("package.json").exist?
|
71
|
+
{
|
72
|
+
"scripts": {
|
73
|
+
"assets": "node config/assets.mjs"
|
74
|
+
}
|
75
|
+
}
|
76
|
+
JSON
|
77
|
+
end
|
78
|
+
end
|
61
79
|
end
|
62
80
|
end
|
63
81
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
subject.
|
17
|
+
def audio_tag(...)
|
18
|
+
subject.audio_tag(...)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:context) { TestApp::Views::Context.new }
|
@@ -53,26 +53,22 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "returns an instance of HtmlBuilder" do
|
56
|
-
actual =
|
56
|
+
actual = audio_tag("song.ogg")
|
57
57
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "renders <audio> tag" do
|
61
|
-
actual =
|
61
|
+
actual = audio_tag("song.ogg").to_s
|
62
62
|
expect(actual).to eq(%(<audio src="/assets/song.ogg"></audio>))
|
63
63
|
end
|
64
64
|
|
65
|
-
it "is aliased as #audio_tag" do
|
66
|
-
expect(subject.audio_tag("song.ogg")).to eq(audio("song.ogg"))
|
67
|
-
end
|
68
|
-
|
69
65
|
it "renders with html attributes" do
|
70
|
-
actual =
|
66
|
+
actual = audio_tag("song.ogg", autoplay: true, controls: true).to_s
|
71
67
|
expect(actual).to eq(%(<audio autoplay="autoplay" controls="controls" src="/assets/song.ogg"></audio>))
|
72
68
|
end
|
73
69
|
|
74
70
|
it "renders with fallback content" do
|
75
|
-
actual =
|
71
|
+
actual = audio_tag("song.ogg") do
|
76
72
|
"Your browser does not support the audio tag"
|
77
73
|
end.to_s
|
78
74
|
|
@@ -80,7 +76,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
80
76
|
end
|
81
77
|
|
82
78
|
it "renders with tracks" do
|
83
|
-
actual =
|
79
|
+
actual = audio_tag("song.ogg") do
|
84
80
|
tag.track kind: "captions", src: subject.asset_url("song.pt-BR.vtt"), srclang: "pt-BR", label: "Portuguese"
|
85
81
|
end.to_s
|
86
82
|
|
@@ -99,7 +95,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
99
95
|
|
100
96
|
it "raises an exception when no arguments" do
|
101
97
|
expect do
|
102
|
-
|
98
|
+
audio_tag
|
103
99
|
end.to raise_error(
|
104
100
|
ArgumentError,
|
105
101
|
"You should provide a source via `src` option or with a `source` HTML tag"
|
@@ -108,7 +104,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
108
104
|
|
109
105
|
it "raises an exception when no src and no block" do
|
110
106
|
expect do
|
111
|
-
|
107
|
+
audio_tag(controls: true)
|
112
108
|
end.to raise_error(
|
113
109
|
ArgumentError,
|
114
110
|
"You should provide a source via `src` option or with a `source` HTML tag"
|
@@ -123,7 +119,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#audio", :app_integration do
|
|
123
119
|
end
|
124
120
|
|
125
121
|
it "returns absolute url for src attribute" do
|
126
|
-
actual =
|
122
|
+
actual = audio_tag("song.ogg").to_s
|
127
123
|
expect(actual).to eq(%(<audio src="#{base_url}/assets/song.ogg"></audio>))
|
128
124
|
end
|
129
125
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#favicon", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
obj.instance_eval {
|
17
|
+
def favicon_tag(...)
|
18
|
+
obj.instance_eval { favicon_tag(...) }
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:root) { make_tmp_directory }
|
@@ -53,26 +53,22 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#favicon", :app_integration do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "returns an instance of SafeString" do
|
56
|
-
actual =
|
56
|
+
actual = favicon_tag
|
57
57
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
58
58
|
end
|
59
59
|
|
60
|
-
it "is aliased as #favicon_link_tag" do
|
61
|
-
expect(subject.favicon_link_tag).to eq(favicon)
|
62
|
-
end
|
63
|
-
|
64
60
|
it "renders <link> tag" do
|
65
|
-
actual =
|
61
|
+
actual = favicon_tag.to_s
|
66
62
|
expect(actual).to eq(%(<link href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">))
|
67
63
|
end
|
68
64
|
|
69
65
|
it "renders with HTML attributes" do
|
70
|
-
actual =
|
66
|
+
actual = favicon_tag("favicon.png", rel: "icon", type: "image/png").to_s
|
71
67
|
expect(actual).to eq(%(<link href="/assets/favicon.png" rel="icon" type="image/png">))
|
72
68
|
end
|
73
69
|
|
74
70
|
it "ignores href passed as an option" do
|
75
|
-
actual =
|
71
|
+
actual = favicon_tag("favicon.png", href: "wrong").to_s
|
76
72
|
expect(actual).to eq(%(<link href="/assets/favicon.png" rel="shortcut icon" type="image/x-icon">))
|
77
73
|
end
|
78
74
|
|
@@ -84,7 +80,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#favicon", :app_integration do
|
|
84
80
|
end
|
85
81
|
|
86
82
|
it "returns absolute url for href attribute" do
|
87
|
-
actual =
|
83
|
+
actual = favicon_tag.to_s
|
88
84
|
expect(actual).to eq(%(<link href="#{base_url}/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">))
|
89
85
|
end
|
90
86
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#image", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
subject.
|
17
|
+
def image_tag(...)
|
18
|
+
subject.image_tag(...)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:root) { make_tmp_directory }
|
@@ -53,31 +53,27 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#image", :app_integration do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "returns an instance of HtmlBuilder" do
|
56
|
-
actual =
|
56
|
+
actual = image_tag("application.jpg")
|
57
57
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "renders an <img> tag" do
|
61
|
-
actual =
|
61
|
+
actual = image_tag("application.jpg").to_s
|
62
62
|
expect(actual).to eq(%(<img src="/assets/application.jpg" alt="Application">))
|
63
63
|
end
|
64
64
|
|
65
|
-
it "is aliased as #image_tag" do
|
66
|
-
expect(subject.image_tag("application.jpg")).to eq image("application.jpg")
|
67
|
-
end
|
68
|
-
|
69
65
|
it "custom alt" do
|
70
|
-
actual =
|
66
|
+
actual = image_tag("application.jpg", alt: "My Alt").to_s
|
71
67
|
expect(actual).to eq(%(<img src="/assets/application.jpg" alt="My Alt">))
|
72
68
|
end
|
73
69
|
|
74
70
|
it "custom data attribute" do
|
75
|
-
actual =
|
71
|
+
actual = image_tag("application.jpg", "data-user-id" => 5).to_s
|
76
72
|
expect(actual).to eq(%(<img src="/assets/application.jpg" alt="Application" data-user-id="5">))
|
77
73
|
end
|
78
74
|
|
79
75
|
it "ignores src passed as an option" do
|
80
|
-
actual =
|
76
|
+
actual = image_tag("application.jpg", src: "wrong").to_s
|
81
77
|
expect(actual).to eq(%(<img src="/assets/application.jpg" alt="Application">))
|
82
78
|
end
|
83
79
|
|
@@ -89,7 +85,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#image", :app_integration do
|
|
89
85
|
end
|
90
86
|
|
91
87
|
it "returns absolute url for src attribute" do
|
92
|
-
actual =
|
88
|
+
actual = image_tag("application.jpg").to_s
|
93
89
|
expect(actual).to eq(%(<img src="#{base_url}/assets/application.jpg" alt="Application">))
|
94
90
|
end
|
95
91
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#javascript", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
subject.
|
17
|
+
def javascript_tag(...)
|
18
|
+
subject.javascript_tag(...)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:context) { TestApp::Views::Context.new }
|
@@ -65,56 +65,52 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#javascript", :app_integration do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "returns an instance of SafeString" do
|
68
|
-
actual =
|
68
|
+
actual = javascript_tag("feature-a")
|
69
69
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
70
70
|
end
|
71
71
|
|
72
|
-
it "is aliased as #js" do
|
73
|
-
expect(subject.js("feature-a")).to eq javascript("feature-a")
|
74
|
-
end
|
75
|
-
|
76
72
|
it "is aliased as #javascript_tag" do
|
77
|
-
expect(subject.javascript_tag("feature-a")).to eq
|
73
|
+
expect(subject.javascript_tag("feature-a")).to eq javascript_tag("feature-a")
|
78
74
|
end
|
79
75
|
|
80
76
|
it "renders <script> tag" do
|
81
|
-
actual =
|
77
|
+
actual = javascript_tag("feature-a")
|
82
78
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript"></script>))
|
83
79
|
end
|
84
80
|
|
85
81
|
xit "renders <script> tag without appending ext after query string" do
|
86
|
-
actual =
|
82
|
+
actual = javascript_tag("feature-x?callback=init")
|
87
83
|
expect(actual).to eq(%(<script src="/assets/feature-x?callback=init" type="text/javascript"></script>))
|
88
84
|
end
|
89
85
|
|
90
86
|
it "renders <script> tag with a defer attribute" do
|
91
|
-
actual =
|
87
|
+
actual = javascript_tag("feature-a", defer: true)
|
92
88
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript" defer="defer"></script>))
|
93
89
|
end
|
94
90
|
|
95
91
|
it "renders <script> tag with an integrity attribute" do
|
96
|
-
actual =
|
92
|
+
actual = javascript_tag("feature-a", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC")
|
97
93
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>))
|
98
94
|
end
|
99
95
|
|
100
96
|
it "renders <script> tag with a crossorigin attribute" do
|
101
|
-
actual =
|
97
|
+
actual = javascript_tag("feature-a", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC", crossorigin: "use-credentials")
|
102
98
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="use-credentials"></script>))
|
103
99
|
end
|
104
100
|
|
105
101
|
it "ignores src passed as an option" do
|
106
|
-
actual =
|
102
|
+
actual = javascript_tag("feature-a", src: "wrong")
|
107
103
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript"></script>))
|
108
104
|
end
|
109
105
|
|
110
106
|
describe "async option" do
|
111
107
|
it "renders <script> tag with an async=true if async option is true" do
|
112
|
-
actual =
|
108
|
+
actual = javascript_tag("feature-a", async: true)
|
113
109
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript" async="async"></script>))
|
114
110
|
end
|
115
111
|
|
116
112
|
it "renders <script> tag without an async=true if async option is false" do
|
117
|
-
actual =
|
113
|
+
actual = javascript_tag("feature-a", async: false)
|
118
114
|
expect(actual).to eq(%(<script src="/assets/feature-a.js" type="text/javascript"></script>))
|
119
115
|
end
|
120
116
|
end
|
@@ -127,7 +123,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#javascript", :app_integration do
|
|
127
123
|
before { compile_assets! }
|
128
124
|
|
129
125
|
it "includes subresource_integrity and crossorigin attributes" do
|
130
|
-
actual =
|
126
|
+
actual = javascript_tag("app")
|
131
127
|
expect(actual).to match(%r{<script src="/assets/app-[A-Z0-9]{8}.js" type="text/javascript" integrity="sha384-[A-Za-z0-9+/]{64}" crossorigin="anonymous"></script>})
|
132
128
|
end
|
133
129
|
end
|
@@ -140,7 +136,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#javascript", :app_integration do
|
|
140
136
|
end
|
141
137
|
|
142
138
|
it "returns absolute url for src attribute" do
|
143
|
-
actual =
|
139
|
+
actual = javascript_tag("feature-a")
|
144
140
|
expect(actual).to eq(%(<script src="#{base_url}/assets/feature-a.js" type="text/javascript"></script>))
|
145
141
|
end
|
146
142
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#stylesheet", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
subject.
|
17
|
+
def stylesheet_tag(...)
|
18
|
+
subject.stylesheet_tag(...)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:context) { TestApp::Views::Context.new }
|
@@ -65,40 +65,36 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#stylesheet", :app_integration do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "returns an instance of SafeString" do
|
68
|
-
actual =
|
68
|
+
actual = stylesheet_tag("main")
|
69
69
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
70
70
|
end
|
71
71
|
|
72
|
-
it "is aliased as #
|
73
|
-
expect(subject.
|
74
|
-
end
|
75
|
-
|
76
|
-
it "is aliased as #stylesheet_link_tag" do
|
77
|
-
expect(subject.stylesheet_link_tag("main")).to eq stylesheet("main")
|
72
|
+
it "is aliased as #stylesheet_tag" do
|
73
|
+
expect(subject.stylesheet_tag("main")).to eq stylesheet_tag("main")
|
78
74
|
end
|
79
75
|
|
80
76
|
it "renders <link> tag" do
|
81
|
-
actual =
|
77
|
+
actual = stylesheet_tag("main")
|
82
78
|
expect(actual).to eq(%(<link href="/assets/main.css" type="text/css" rel="stylesheet">))
|
83
79
|
end
|
84
80
|
|
85
81
|
xit "renders <link> tag without appending ext after query string" do
|
86
|
-
actual =
|
82
|
+
actual = stylesheet_tag("fonts?font=Helvetica")
|
87
83
|
expect(actual).to eq(%(<link href="/assets/fonts?font=Helvetica" type="text/css" rel="stylesheet">))
|
88
84
|
end
|
89
85
|
|
90
86
|
it "renders <link> tag with an integrity attribute" do
|
91
|
-
actual =
|
87
|
+
actual = stylesheet_tag("main", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC")
|
92
88
|
expect(actual).to eq(%(<link href="/assets/main.css" type="text/css" rel="stylesheet" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous">))
|
93
89
|
end
|
94
90
|
|
95
91
|
it "renders <link> tag with a crossorigin attribute" do
|
96
|
-
actual =
|
92
|
+
actual = stylesheet_tag("main", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC", crossorigin: "use-credentials")
|
97
93
|
expect(actual).to eq(%(<link href="/assets/main.css" type="text/css" rel="stylesheet" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="use-credentials">))
|
98
94
|
end
|
99
95
|
|
100
96
|
it "ignores href passed as an option" do
|
101
|
-
actual =
|
97
|
+
actual = stylesheet_tag("main", href: "wrong")
|
102
98
|
expect(actual).to eq(%(<link href="/assets/main.css" type="text/css" rel="stylesheet">))
|
103
99
|
end
|
104
100
|
|
@@ -110,7 +106,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#stylesheet", :app_integration do
|
|
110
106
|
before { compile_assets! }
|
111
107
|
|
112
108
|
it "includes subresource_integrity and crossorigin attributes" do
|
113
|
-
actual =
|
109
|
+
actual = stylesheet_tag("app")
|
114
110
|
expect(actual).to match(%r{<link href="/assets/app-[A-Z0-9]{8}.css" type="text/css" rel="stylesheet" integrity="sha384-[A-Za-z0-9+/]{64}" crossorigin="anonymous">})
|
115
111
|
end
|
116
112
|
end
|
@@ -123,7 +119,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#stylesheet", :app_integration do
|
|
123
119
|
end
|
124
120
|
|
125
121
|
it "returns absolute url for href attribute" do
|
126
|
-
actual =
|
122
|
+
actual = stylesheet_tag("main")
|
127
123
|
expect(actual).to eq(%(<link href="#{base_url}/assets/main.css" type="text/css" rel="stylesheet">))
|
128
124
|
end
|
129
125
|
end
|
@@ -14,8 +14,8 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
14
14
|
}.new(context)
|
15
15
|
}
|
16
16
|
|
17
|
-
def
|
18
|
-
subject.
|
17
|
+
def video_tag(...)
|
18
|
+
subject.video_tag(...)
|
19
19
|
end
|
20
20
|
|
21
21
|
let(:context) { TestApp::Views::Context.new }
|
@@ -53,26 +53,26 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "returns an instance of HtmlBuilder" do
|
56
|
-
actual =
|
56
|
+
actual = video_tag("movie.mp4")
|
57
57
|
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "renders <video> tag" do
|
61
|
-
actual =
|
61
|
+
actual = video_tag("movie.mp4").to_s
|
62
62
|
expect(actual).to eq(%(<video src="/assets/movie.mp4"></video>))
|
63
63
|
end
|
64
64
|
|
65
65
|
it "is aliased as #video_tag" do
|
66
|
-
expect(
|
66
|
+
expect(video_tag("movie.mp4")).to eq(subject.video_tag("movie.mp4"))
|
67
67
|
end
|
68
68
|
|
69
69
|
it "renders with html attributes" do
|
70
|
-
actual =
|
70
|
+
actual = video_tag("movie.mp4", autoplay: true, controls: true).to_s
|
71
71
|
expect(actual).to eq(%(<video autoplay="autoplay" controls="controls" src="/assets/movie.mp4"></video>))
|
72
72
|
end
|
73
73
|
|
74
74
|
it "renders with fallback content" do
|
75
|
-
actual =
|
75
|
+
actual = video_tag("movie.mp4") do
|
76
76
|
"Your browser does not support the video tag"
|
77
77
|
end.to_s
|
78
78
|
|
@@ -80,7 +80,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
it "renders with tracks" do
|
83
|
-
actual =
|
83
|
+
actual = video_tag("movie.mp4") do
|
84
84
|
tag.track kind: "captions", src: subject.asset_url("movie.en.vtt"), srclang: "en", label: "English"
|
85
85
|
end.to_s
|
86
86
|
|
@@ -99,7 +99,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
99
99
|
|
100
100
|
it "raises an exception when no arguments" do
|
101
101
|
expect do
|
102
|
-
|
102
|
+
video_tag
|
103
103
|
end.to raise_error(
|
104
104
|
ArgumentError,
|
105
105
|
"You should provide a source via `src` option or with a `source` HTML tag"
|
@@ -108,7 +108,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
108
108
|
|
109
109
|
it "raises an exception when no src and no block" do
|
110
110
|
expect do
|
111
|
-
|
111
|
+
video_tag(content: true)
|
112
112
|
end.to raise_error(
|
113
113
|
ArgumentError,
|
114
114
|
"You should provide a source via `src` option or with a `source` HTML tag"
|
@@ -123,7 +123,7 @@ RSpec.describe Hanami::Helpers::AssetsHelper, "#video", :app_integration do
|
|
123
123
|
end
|
124
124
|
|
125
125
|
it "returns absolute url for src attribute" do
|
126
|
-
actual =
|
126
|
+
actual = video_tag("movie.mp4").to_s
|
127
127
|
expect(actual).to eq(%(<video src="#{base_url}/assets/movie.mp4"></video>))
|
128
128
|
end
|
129
129
|
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.1.0.
|
4
|
+
version: 2.1.0.rc1
|
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
|
+
date: 2023-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -279,6 +279,7 @@ files:
|
|
279
279
|
- lib/hanami/extensions/view/scope.rb
|
280
280
|
- lib/hanami/extensions/view/slice_configured_context.rb
|
281
281
|
- lib/hanami/extensions/view/slice_configured_helpers.rb
|
282
|
+
- lib/hanami/extensions/view/slice_configured_part.rb
|
282
283
|
- lib/hanami/extensions/view/slice_configured_view.rb
|
283
284
|
- lib/hanami/extensions/view/standard_helpers.rb
|
284
285
|
- lib/hanami/helpers/assets_helper.rb
|
@@ -311,6 +312,8 @@ files:
|
|
311
312
|
- lib/hanami/slice_registrar.rb
|
312
313
|
- lib/hanami/version.rb
|
313
314
|
- lib/hanami/web/rack_logger.rb
|
315
|
+
- lib/hanami/web/welcome.html.erb
|
316
|
+
- lib/hanami/web/welcome.rb
|
314
317
|
- spec/integration/action/cookies_spec.rb
|
315
318
|
- spec/integration/action/csrf_protection_spec.rb
|
316
319
|
- spec/integration/action/format_config_spec.rb
|
@@ -341,6 +344,7 @@ files:
|
|
341
344
|
- spec/integration/logging/notifications_spec.rb
|
342
345
|
- spec/integration/logging/request_logging_spec.rb
|
343
346
|
- spec/integration/rack_app/body_parser_spec.rb
|
347
|
+
- spec/integration/rack_app/method_override_spec.rb
|
344
348
|
- spec/integration/rack_app/middleware_spec.rb
|
345
349
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
346
350
|
- spec/integration/rack_app/rack_app_spec.rb
|
@@ -376,10 +380,12 @@ files:
|
|
376
380
|
- spec/integration/view/helpers/scope_helpers_spec.rb
|
377
381
|
- spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb
|
378
382
|
- spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb
|
383
|
+
- spec/integration/view/parts/default_rendering_spec.rb
|
379
384
|
- spec/integration/view/slice_configuration_spec.rb
|
380
385
|
- spec/integration/view/views_spec.rb
|
381
386
|
- spec/integration/web/render_detailed_errors_spec.rb
|
382
387
|
- spec/integration/web/render_errors_spec.rb
|
388
|
+
- spec/integration/web/welcome_view_spec.rb
|
383
389
|
- spec/spec_helper.rb
|
384
390
|
- spec/support/app_integration.rb
|
385
391
|
- spec/support/coverage.rb
|
@@ -406,12 +412,12 @@ files:
|
|
406
412
|
- spec/unit/hanami/env_spec.rb
|
407
413
|
- spec/unit/hanami/extensions/view/context_spec.rb
|
408
414
|
- spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb
|
409
|
-
- spec/unit/hanami/helpers/assets_helper/
|
410
|
-
- spec/unit/hanami/helpers/assets_helper/
|
411
|
-
- spec/unit/hanami/helpers/assets_helper/
|
412
|
-
- spec/unit/hanami/helpers/assets_helper/
|
413
|
-
- spec/unit/hanami/helpers/assets_helper/
|
414
|
-
- spec/unit/hanami/helpers/assets_helper/
|
415
|
+
- spec/unit/hanami/helpers/assets_helper/audio_tag_spec.rb
|
416
|
+
- spec/unit/hanami/helpers/assets_helper/favicon_tag_spec.rb
|
417
|
+
- spec/unit/hanami/helpers/assets_helper/image_tag_spec.rb
|
418
|
+
- spec/unit/hanami/helpers/assets_helper/javascript_tag_spec.rb
|
419
|
+
- spec/unit/hanami/helpers/assets_helper/stylesheet_tag_spec.rb
|
420
|
+
- spec/unit/hanami/helpers/assets_helper/video_tag_spec.rb
|
415
421
|
- spec/unit/hanami/helpers/form_helper_spec.rb
|
416
422
|
- spec/unit/hanami/port_spec.rb
|
417
423
|
- spec/unit/hanami/router/errors/not_allowed_error_spec.rb
|
@@ -479,6 +485,7 @@ test_files:
|
|
479
485
|
- spec/integration/logging/notifications_spec.rb
|
480
486
|
- spec/integration/logging/request_logging_spec.rb
|
481
487
|
- spec/integration/rack_app/body_parser_spec.rb
|
488
|
+
- spec/integration/rack_app/method_override_spec.rb
|
482
489
|
- spec/integration/rack_app/middleware_spec.rb
|
483
490
|
- spec/integration/rack_app/non_booted_rack_app_spec.rb
|
484
491
|
- spec/integration/rack_app/rack_app_spec.rb
|
@@ -514,10 +521,12 @@ test_files:
|
|
514
521
|
- spec/integration/view/helpers/scope_helpers_spec.rb
|
515
522
|
- spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb
|
516
523
|
- spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb
|
524
|
+
- spec/integration/view/parts/default_rendering_spec.rb
|
517
525
|
- spec/integration/view/slice_configuration_spec.rb
|
518
526
|
- spec/integration/view/views_spec.rb
|
519
527
|
- spec/integration/web/render_detailed_errors_spec.rb
|
520
528
|
- spec/integration/web/render_errors_spec.rb
|
529
|
+
- spec/integration/web/welcome_view_spec.rb
|
521
530
|
- spec/spec_helper.rb
|
522
531
|
- spec/support/app_integration.rb
|
523
532
|
- spec/support/coverage.rb
|
@@ -544,12 +553,12 @@ test_files:
|
|
544
553
|
- spec/unit/hanami/env_spec.rb
|
545
554
|
- spec/unit/hanami/extensions/view/context_spec.rb
|
546
555
|
- spec/unit/hanami/helpers/assets_helper/asset_url_spec.rb
|
547
|
-
- spec/unit/hanami/helpers/assets_helper/
|
548
|
-
- spec/unit/hanami/helpers/assets_helper/
|
549
|
-
- spec/unit/hanami/helpers/assets_helper/
|
550
|
-
- spec/unit/hanami/helpers/assets_helper/
|
551
|
-
- spec/unit/hanami/helpers/assets_helper/
|
552
|
-
- spec/unit/hanami/helpers/assets_helper/
|
556
|
+
- spec/unit/hanami/helpers/assets_helper/audio_tag_spec.rb
|
557
|
+
- spec/unit/hanami/helpers/assets_helper/favicon_tag_spec.rb
|
558
|
+
- spec/unit/hanami/helpers/assets_helper/image_tag_spec.rb
|
559
|
+
- spec/unit/hanami/helpers/assets_helper/javascript_tag_spec.rb
|
560
|
+
- spec/unit/hanami/helpers/assets_helper/stylesheet_tag_spec.rb
|
561
|
+
- spec/unit/hanami/helpers/assets_helper/video_tag_spec.rb
|
553
562
|
- spec/unit/hanami/helpers/form_helper_spec.rb
|
554
563
|
- spec/unit/hanami/port_spec.rb
|
555
564
|
- spec/unit/hanami/router/errors/not_allowed_error_spec.rb
|