Skip to content

Commit 960f1ca

Browse files
authored
Add toggle_attribute Turbo Stream helper (#44)
* Add `toggle_attribute` helper * Fix implementation and tests
1 parent f852ce5 commit 960f1ca

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

lib/turbo_power/stream_helper.rb

+7
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ def toggle_css_class(targets = nil, classes = "", **attributes)
113113
custom_action_all :toggle_css_class, targets: targets, attributes: attributes.merge(classes: classes)
114114
end
115115

116+
def toggle_attribute(targets = nil, attribute = "", force = "false", **attributes)
117+
attribute = attributes[:attribute] || attribute
118+
force = attributes[:force] || force
119+
120+
custom_action_all :toggle_attribute, targets: targets, attributes: attributes.merge(attribute: attribute, force: force)
121+
end
122+
116123
def replace_css_class(targets = nil, from = "", to = "", **attributes)
117124
from = attributes[:from] || from
118125
to = attributes[:to] || to
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# frozen_string_literal: true
2+
3+
require "test_helper"
4+
5+
module TurboPower
6+
module StreamHelper
7+
class ToggleAttributeTest < StreamHelperTestCase
8+
test "toggle_attribute" do
9+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
10+
11+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", "disabled")
12+
end
13+
14+
test "toggle_attribute with targets and attribute as kwargs" do
15+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
16+
17+
assert_dom_equal stream, turbo_stream.toggle_attribute(targets: "#element", attribute: "disabled")
18+
end
19+
20+
test "toggle_attribute with target and attribute as kwargs" do
21+
stream = %(<turbo-stream target="element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
22+
23+
assert_dom_equal stream, turbo_stream.toggle_attribute(target: "element", attribute: "disabled")
24+
end
25+
26+
test "toggle_attribute with attribute and targets as kwargs" do
27+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
28+
29+
assert_dom_equal stream, turbo_stream.toggle_attribute(attribute: "disabled", targets: "#element")
30+
end
31+
32+
test "toggle_attribute with targets as positional arg and attribute as kwarg" do
33+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
34+
35+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled")
36+
end
37+
38+
test "toggle_attribute with targets/attribute as positional arg and kwarg" do
39+
stream = %(<turbo-stream targets="#better-input" action="toggle_attribute" attribute="other-disabled" force="false"><template></template></turbo-stream>)
40+
41+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", "disabled", targets: "#better-input", attribute: "other-disabled")
42+
end
43+
44+
test "toggle_attribute with additional arguments" do
45+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" something="else" force="false"><template></template></turbo-stream>)
46+
47+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled", something: "else")
48+
end
49+
50+
test "toggle_attribute with force as positional arg" do
51+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="true"><template></template></turbo-stream>)
52+
53+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", "disabled", "true")
54+
end
55+
56+
test "toggle_attribute with force as kwarg" do
57+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="true"><template></template></turbo-stream>)
58+
59+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled", force: "true")
60+
end
61+
62+
test "toggle_attribute with force as positional arg and kwarg" do
63+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="true"><template></template></turbo-stream>)
64+
65+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled", force: "true")
66+
end
67+
68+
test "toggle_attribute with force as boolean (true)" do
69+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="true"><template></template></turbo-stream>)
70+
71+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled", force: true)
72+
end
73+
74+
test "toggle_attribute with force as boolean (false)" do
75+
stream = %(<turbo-stream targets="#element" action="toggle_attribute" attribute="disabled" force="false"><template></template></turbo-stream>)
76+
77+
assert_dom_equal stream, turbo_stream.toggle_attribute("#element", attribute: "disabled", force: false)
78+
end
79+
end
80+
end
81+
end

0 commit comments

Comments
 (0)