Skip to content

Commit 1f7e241

Browse files
committed
Add class/2 for conditional checking
1 parent 545e0ae commit 1f7e241

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

lib/ex_css_modules/ex_css_modules.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,25 @@ defmodule ExCSSModules do
4646
|> class_attribute
4747
end
4848

49+
@doc """
50+
If `value` is truthy, read the class definitions and maps them to a class attribute.
51+
When `value` is falsy return nil.
52+
53+
## Examples
54+
iex> class(%{ "hello" => "world"}, "hello", true)
55+
{:safe, ~s(class="world")}
56+
57+
iex> class(%{ "hello" => "world"}, "hello", false)
58+
nil
59+
"""
60+
def class(definition, classes, value) do
61+
if value do
62+
definition
63+
|> class_name(classes)
64+
|> class_attribute
65+
end
66+
end
67+
4968
@doc """
5069
Returns the class name from the definition map if value is true.
5170

lib/ex_css_modules/view.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ defmodule ExCSSModules.View do
4040
def stylesheet, do: ExCSSModules.stylesheet(@stylesheet)
4141

4242
def class(key), do: stylesheet() |> ExCSSModules.class(key)
43+
def class(key, value), do: stylesheet() |> ExCSSModules.class(key, value)
4344

4445
def class_name(key) do
4546
ExCSSModules.class_name(stylesheet(), key)

test/ex_css_modules/ex_css_modules_test.exs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,32 @@ defmodule ExCSSModulesTest do
2020
end
2121

2222
describe "class/2" do
23-
test "returns a Phoenix.HTML :safe class attribute for an existing classname" do
23+
test "returns a class attribute for an existing classname" do
2424
assert ExCSSModules.class(
2525
%{"hello" => "world"},
2626
"hello"
27-
) == {:safe, "class=\"world\""}
27+
) == {:safe, ~s(class="world")}
2828
end
2929

30-
test "returns an empty Phoenix.HTML :safe class attribute for a non existing classname" do
30+
test "returns an empty class attribute for a non existing classname" do
3131
assert ExCSSModules.class(
3232
%{"hello" => "world"},
3333
"foo"
34-
) == {:safe, "class=\"\""}
34+
) == {:safe, ~s(class="")}
35+
end
36+
end
37+
38+
describe "class/3" do
39+
test "returns a class attribute for an existing classname when value is true" do
40+
assert ExCSSModules.class(
41+
%{"hello" => "world"},
42+
"hello",
43+
true
44+
) == {:safe, ~s(class="world")}
45+
end
46+
47+
test "returns nil for an existing classname when value is false" do
48+
assert ExCSSModules.class(%{"hello" => "world"}, "hello", false) == nil
3549
end
3650
end
3751

test/ex_css_modules/view_test.exs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,13 @@ defmodule ExCSSModules.ViewTest do
6666
ExCSSModules.class(@example_stylesheet, "title")
6767
end
6868
end
69+
70+
describe "class/2" do
71+
test "calls the class/3 method on ExCSSModules" do
72+
assert ViewModuleTest.class("title", true) ==
73+
ExCSSModules.class(@example_stylesheet, "title", true)
74+
assert ViewModuleTest.class("title", false) ==
75+
ExCSSModules.class(@example_stylesheet, "title", false)
76+
end
77+
end
6978
end

0 commit comments

Comments
 (0)