Commit 7d13d3b 1 parent 988b68b commit 7d13d3b Copy full SHA for 7d13d3b
File tree 3 files changed +38
-7
lines changed
3 files changed +38
-7
lines changed Original file line number Diff line number Diff line change
1
+ defmodule Beanie.Helpers do
2
+ @ doc """
3
+ Computes the relative complements of two lists - the elements that
4
+ are in the first list and not in the second set, and vice versa,
5
+ returned as the first and second elements of a tuple, respectively.
6
+ """
7
+ @ spec relative_complements ( [ term ] , [ term ] ) :: { [ term ] , [ term ] }
8
+ def relative_complements ( list1 , list2 )
9
+ when is_list ( list1 ) and is_list ( list2 ) do
10
+ set1 = MapSet . new ( list1 )
11
+ set2 = MapSet . new ( list2 )
12
+
13
+ {
14
+ set1 |> MapSet . difference ( set2 ) |> MapSet . to_list ,
15
+ set2 |> MapSet . difference ( set1 ) |> MapSet . to_list
16
+ }
17
+ end
18
+ end
Original file line number Diff line number Diff line change @@ -3,13 +3,11 @@ defmodule Beanie.Repository.Query do
3
3
alias Beanie.Repo
4
4
5
5
alias Beanie.Repository
6
+ alias Beanie.Helpers
6
7
alias Beanie.Tag
7
8
8
9
def update_list ( names ) do
9
- names = MapSet . new ( names )
10
- existing_names = MapSet . new ( all_names )
11
- new_names = MapSet . difference ( names , existing_names )
12
- deleted_names = MapSet . difference ( existing_names , names ) |> MapSet . to_list
10
+ { new_names , deleted_names } = Helpers . relative_complements ( names , all_names )
13
11
14
12
new_names
15
13
|> Enum . each ( fn ( name ) ->
@@ -28,9 +26,9 @@ defmodule Beanie.Repository.Query do
28
26
29
27
def update_tag_list ( repository , tags ) do
30
28
tag_names = Enum . map ( tags , fn ( tag ) -> tag . name end ) |> MapSet . new
31
- existing_names = MapSet . new ( all_tag_names ( repository ) )
32
- new_names = MapSet . difference ( tag_names , existing_names )
33
- deleted_names = MapSet . difference ( existing_names , tag_names ) |> MapSet . to_list
29
+
30
+ { new_names , deleted_names } =
31
+ Helpers . relative_complements ( tag_names , all_tag_names ( repository ) )
34
32
35
33
new_names
36
34
|> Enum . map ( fn ( new_name ) ->
Original file line number Diff line number Diff line change
1
+ defmodule Beanie.HelpersTest do
2
+ use ExUnit.Case
3
+
4
+ alias Beanie.Helpers
5
+
6
+ test "relative complements" do
7
+ list1 = [ 1 , 2 , 3 ]
8
+ list2 = [ 2 , 4 , 5 ]
9
+
10
+ in1_not2 = [ 1 , 3 ]
11
+ in2_not1 = [ 4 , 5 ]
12
+
13
+ assert { in1_not2 , in2_not1 } == Helpers . relative_complements ( list1 , list2 )
14
+ end
15
+ end
You can’t perform that action at this time.
0 commit comments