Skip to content

Commit 06fe73f

Browse files
Allow assign to take a map
Co-authored-by: John Cotton <[email protected]>
1 parent 3b38c12 commit 06fe73f

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

lib/scenic/scene.ex

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,15 @@ defmodule Scenic.Scene do
391391
end
392392

393393
@doc """
394-
Convenience function to assign a list of values into a scene struct.
394+
Convenience function to assign a list or map of values into a scene struct.
395395
"""
396-
@spec assign(scene :: Scene.t(), key_list :: Keyword.t()) :: Scene.t()
397-
def assign(%Scene{} = scene, key_list) when is_list(key_list) do
398-
Enum.reduce(key_list, scene, fn {k, v}, acc -> assign(acc, k, v) end)
396+
@spec assign(scene :: Scene.t(), assigns :: Keyword.t() | map()) :: Scene.t()
397+
def assign(%Scene{} = scene, assigns) when is_list(assigns) do
398+
Enum.reduce(assigns, scene, fn {k, v}, acc -> assign(acc, k, v) end)
399+
end
400+
401+
def assign(%Scene{} = scene, assigns) when is_map(assigns) do
402+
%Scene{scene | assigns: Map.merge(scene.assigns, assigns)}
399403
end
400404

401405
@doc """

test/scenic/scene_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,19 @@ defmodule Scenic.SceneTest do
195195
assert scene.assigns == %{one: 1, two: 2, three: "three"}
196196
end
197197

198+
test "assign assigns multiple values in a map", %{scene: scene} do
199+
assert scene.assigns == %{}
200+
201+
scene =
202+
Scene.assign(scene, %{
203+
one: 1,
204+
two: 2,
205+
three: "three"
206+
})
207+
208+
assert scene.assigns == %{one: 1, two: 2, three: "three"}
209+
end
210+
198211
test "get gets a value from assigns - works like map", %{scene: scene} do
199212
scene =
200213
Scene.assign(scene,

0 commit comments

Comments
 (0)