Skip to content

Commit 30fadee

Browse files
authored
Fix typos and main Dialyzer warnings (#124)
Thank, I take care about mix credo and mix format
1 parent f9bf727 commit 30fadee

File tree

9 files changed

+66
-72
lines changed

9 files changed

+66
-72
lines changed

lib/mongo.ex

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,13 @@ defmodule Mongo do
7272
@type collection :: String.t()
7373
@opaque cursor :: Mongo.Cursor.t()
7474
@type result(t) :: :ok | {:ok, t} | {:error, Mongo.Error.t()}
75-
@type result!(t) :: nil | t | no_return
75+
@type result!(t) :: t
7676

7777
defmacrop bangify(result) do
7878
quote do
7979
case unquote(result) do
8080
{:ok, value} -> value
8181
{:error, error} -> raise error
82-
:ok -> nil
8382
end
8483
end
8584
end
@@ -178,7 +177,7 @@ defmodule Mongo do
178177
iex> Mongo.uuid("848e90e9-5750-4e0a-ab73-66-c6b328242")
179178
{:error, %ArgumentError{message: "non-alphabet digit found: \"-\" (byte 45)"}}
180179
"""
181-
@spec uuid(String.t()) :: {:ok, BSON.Binary.t()} | {:error, ArgumentError.t()}
180+
@spec uuid(any) :: {:ok, BSON.Binary.t()} | {:error, %ArgumentError{}}
182181
def uuid(string) when is_binary(string) and byte_size(string) == 36 do
183182
try do
184183
p1 = binary_part(string, 0, 8) |> Base.decode16!(case: :lower)
@@ -221,7 +220,7 @@ defmodule Mongo do
221220
@doc """
222221
Creates a new UUID.
223222
"""
224-
@spec uuid(String.t()) :: BSON.Binary.t()
223+
@spec uuid() :: BSON.Binary.t()
225224
def uuid() do
226225
%BSON.Binary{binary: uuid4(), subtype: :uuid}
227226
end
@@ -257,7 +256,7 @@ defmodule Mongo do
257256
returning the first notification after the token. This will allow users to watch collections that have been dropped and recreated
258257
or newly renamed collections without missing any notifications. (since 4.0.7)
259258
"""
260-
@spec watch_collection(GenServer.server(), collection | 1, [BSON.document()], fun, Keyword.it()) ::
259+
@spec watch_collection(GenServer.server(), collection | 1, [BSON.document()], fun | nil, Keyword.t()) ::
261260
cursor
262261
def watch_collection(topology_pid, coll, pipeline, on_resume_token \\ nil, opts \\ []) do
263262
stream_opts =
@@ -312,7 +311,7 @@ defmodule Mongo do
312311
returning the first notification after the token. This will allow users to watch collections that have been dropped and recreated
313312
or newly renamed collections without missing any notifications. (since 4.0.7)
314313
"""
315-
@spec watch_db(GenServer.server(), [BSON.document()], fun, Keyword.it()) :: cursor
314+
@spec watch_db(GenServer.server(), [BSON.document()], fun | nil, Keyword.t()) :: cursor
316315
def watch_db(topology_pid, pipeline, on_resume_token \\ nil, opts \\ []) do
317316
watch_collection(topology_pid, 1, pipeline, on_resume_token, opts)
318317
end
@@ -448,6 +447,8 @@ defmodule Mongo do
448447
_other ->
449448
result
450449
end
450+
else
451+
_ -> {:error, Mongo.Error.exception("Command processing error")}
451452
end
452453
end
453454

@@ -587,8 +588,11 @@ defmodule Mongo do
587588

588589
opts = Keyword.drop(opts, ~w(limit skip hint collation)a)
589590

590-
with {:ok, doc} <- issue_command(topology_pid, cmd, :read, opts),
591-
do: {:ok, trunc(doc["n"])}
591+
with {:ok, doc} <- issue_command(topology_pid, cmd, :read, opts) do
592+
{:ok, trunc(doc["n"])}
593+
else
594+
_ -> {:error, Mongo.Error.exception("Failed to count")}
595+
end
592596
end
593597

594598
@doc false
@@ -618,15 +622,14 @@ defmodule Mongo do
618622
|> filter_nils()
619623
|> Enum.map(&List.wrap/1)
620624

621-
documents =
622-
topology_pid
623-
|> Mongo.aggregate(coll, pipeline, opts)
624-
|> Enum.to_list()
625-
626-
case documents do
627-
[%{"n" => count}] -> {:ok, count}
628-
[] -> {:ok, 0}
629-
_ -> :error
625+
with %Mongo.Stream{} = cursor <- Mongo.aggregate(topology_pid, coll, pipeline, opts),
626+
documents <- Enum.to_list(cursor) do
627+
case documents do
628+
[%{"n" => count}] -> {:ok, count}
629+
[] -> {:ok, 0}
630+
end
631+
else
632+
_ -> {:error, Mongo.Error.exception("Failed to count")}
630633
end
631634
end
632635

@@ -809,7 +812,7 @@ defmodule Mongo do
809812

810813
@doc false
811814
@spec exec_command(GenServer.server(), BSON.document(), Keyword.t()) ::
812-
{:ok, BSON.document() | nil} | {:error, Mongo.Error.t()}
815+
{:ok, {any(), BSON.document()} | nil} | {:error, Mongo.Error.t()}
813816
def exec_command(conn, cmd, opts) do
814817
with {:ok, _cmd, response} <- DBConnection.execute(conn, %Query{action: :command}, [cmd], defaults(opts)) do
815818
check_for_error(response, cmd, opts)
@@ -1078,6 +1081,8 @@ defmodule Mongo do
10781081
true -> {:ok, %Mongo.InsertManyResult{inserted_ids: ids}}
10791082
end
10801083
end
1084+
else
1085+
_ -> {:error, Mongo.Error.exception("Failed to insert many")}
10811086
end
10821087
end
10831088

@@ -1306,8 +1311,10 @@ defmodule Mongo do
13061311
end
13071312
end
13081313

1309-
defp filter_upsert_ids(nil), do: []
1310-
defp filter_upsert_ids(upserted), do: Enum.map(upserted, fn doc -> doc["_id"] end)
1314+
1315+
@spec filter_upsert_ids(any) :: list
1316+
defp filter_upsert_ids([_|_] = upserted), do: Enum.map(upserted, fn doc -> doc["_id"] end)
1317+
defp filter_upsert_ids(_), do: []
13111318

13121319
@doc """
13131320
Similar to `update_many/5` but unwraps the result and raises on error.
@@ -1335,7 +1342,7 @@ defmodule Mongo do
13351342
@doc """
13361343
Convenient function that returns a cursor with the names of the indexes.
13371344
"""
1338-
@spec list_index_names(GenServer.server(), String.t(), Keyword.t()) :: Stream.t()
1345+
@spec list_index_names(GenServer.server(), String.t(), Keyword.t()) :: cursor
13391346
def list_index_names(topology_pid, coll, opts \\ []) do
13401347
list_indexes(topology_pid, coll, opts)
13411348
|> Stream.map(fn %{"name" => name} -> name end)
@@ -1386,7 +1393,7 @@ defmodule Mongo do
13861393
@doc """
13871394
Convenient function that drops the database `name`.
13881395
"""
1389-
@spec drop_database(GenServer.server(), String.t()) :: :ok | {:error, Mongo.Error.t()}
1396+
@spec drop_database(GenServer.server(), String.t() | nil) :: :ok | {:error, Mongo.Error.t()}
13901397
def drop_database(topology_pid, name \\ nil)
13911398

13921399
def drop_database(topology_pid, nil) do

lib/mongo/bulk_write.ex

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,9 @@ defmodule Mongo.BulkWrite do
346346
|> BulkWriteResult.reduce()
347347
end
348348

349-
defp filter_upsert_ids(nil), do: []
350-
defp filter_upsert_ids(upserted), do: Enum.map(upserted, fn doc -> doc["_id"] end)
349+
@spec filter_upsert_ids(any) :: list
350+
defp filter_upsert_ids([_|_] = upserted), do: Enum.map(upserted, fn doc -> doc["_id"] end)
351+
defp filter_upsert_ids(_), do: []
351352

352353
defp run_commands(session, {cmds, ids}, opts) do
353354
{Enum.map(cmds, fn cmd -> Mongo.exec_command_session(session, cmd, opts) end), ids}

lib/mongo/ordered_bulk.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ defmodule Mongo.OrderedBulk do
5656

5757
@type t :: %__MODULE__{
5858
coll: String.t(),
59-
ops: [BulkOps.bulk_op()]
59+
ops: [Mongo.BulkOps.bulk_op()]
6060
}
6161

6262
defstruct coll: nil, ops: []
@@ -90,7 +90,7 @@ defmodule Mongo.OrderedBulk do
9090
@doc """
9191
Appends a bulk operation to the ordered bulk.
9292
"""
93-
@spec push(BulkOps.bulk_op(), OrderedBulk.t()) :: OrderedBulk.t()
93+
@spec push(Mongo.BulkOps.bulk_op(), OrderedBulk.t()) :: OrderedBulk.t()
9494
def push(op, %OrderedBulk{ops: rest} = bulk) do
9595
%OrderedBulk{bulk | ops: [op | rest]}
9696
end
@@ -105,7 +105,7 @@ defmodule Mongo.OrderedBulk do
105105
%Mongo.OrderedBulk{coll: "bulk", ops: [insert: %{name: "Waldo"}]}
106106
```
107107
"""
108-
@spec insert_one(OrderedBulk.t(), BulkOps.bulk_op()) :: OrderedBulk.t()
108+
@spec insert_one(OrderedBulk.t(), BSON.document()) :: OrderedBulk.t()
109109
def insert_one(%OrderedBulk{} = bulk, doc) do
110110
get_insert_one(doc) |> push(bulk)
111111
end
@@ -120,7 +120,7 @@ defmodule Mongo.OrderedBulk do
120120
%Mongo.OrderedBulk{coll: "bulk", ops: [delete: {%{name: "Waldo"}, [limit: 1]}]}
121121
```
122122
"""
123-
@spec delete_one(OrderedBulk.t(), BulkOps.bulk_op()) :: OrderedBulk.t()
123+
@spec delete_one(OrderedBulk.t(), BSON.document()) :: OrderedBulk.t()
124124
def delete_one(%OrderedBulk{} = bulk, doc) do
125125
get_delete_one(doc) |> push(bulk)
126126
end
@@ -135,7 +135,7 @@ defmodule Mongo.OrderedBulk do
135135
%Mongo.OrderedBulk{coll: "bulk", ops: [delete: {%{name: "Waldo"}, [limit: 0]}]}
136136
```
137137
"""
138-
@spec delete_many(OrderedBulk.t(), BulkOps.bulk_op()) :: OrderedBulk.t()
138+
@spec delete_many(OrderedBulk.t(), BSON.document()) :: OrderedBulk.t()
139139
def delete_many(%OrderedBulk{} = bulk, doc) do
140140
get_delete_many(doc) |> push(bulk)
141141
end

lib/mongo/read_preference.ex

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,6 @@ defmodule Mongo.ReadPreference do
117117
transform(config)
118118
end
119119

120-
defp transform(%{:mode => :primary}) do
121-
%{:mode => :primary}
122-
end
123-
124120
defp transform(config) do
125121
mode =
126122
case config[:mode] do

lib/mongo/results.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ defmodule Mongo.BulkWriteResult do
8888
upserted_count: non_neg_integer,
8989
upserted_ids: list(BSON.ObjectId.t()),
9090
inserted_ids: list(BSON.ObjectId.t()),
91-
errors: list(Map.t())
91+
errors: list(map)
9292
}
9393

9494
alias Mongo.BulkWriteResult

lib/mongo/session.ex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ defmodule Mongo.Session do
223223
@doc """
224224
Merge the session / transaction data into the cmd. There is no need to call this function directly. It is called automatically.
225225
"""
226-
@spec bind_session(Session.t(), BSON.document()) :: :ok | {:error, term()}
227-
def bind_session(nil, cmd) do
228-
cmd
226+
@spec bind_session(Session.t(), BSON.document()) :: {:ok, pid, BSON.document()} | {:error, term()}
227+
def bind_session(nil, _cmd) do
228+
{:error, Mongo.Error.exception("No session")}
229229
end
230230

231231
def bind_session(pid, cmd) do
@@ -253,7 +253,7 @@ defmodule Mongo.Session do
253253
@doc """
254254
Advance the `operationTime` for causally consistent read commands
255255
"""
256-
@spec advance_operation_time(Session.t(), BSON.Timestamp.t()) :: none()
256+
@spec advance_operation_time(Session.t(), BSON.Timestamp.t()) :: any()
257257
def advance_operation_time(_pid, nil) do
258258
end
259259

@@ -264,7 +264,7 @@ defmodule Mongo.Session do
264264
@doc """
265265
Update the `recoveryToken` after each response from mongos
266266
"""
267-
@spec update_recovery_token(Session.t(), BSON.document()) :: none()
267+
@spec update_recovery_token(Session.t(), BSON.document()) :: any()
268268
def update_recovery_token(_pid, nil) do
269269
end
270270

@@ -384,7 +384,7 @@ defmodule Mongo.Session do
384384
@doc """
385385
Return the wire_version used in the session.
386386
"""
387-
@spec connection(Session.t()) :: pid
387+
@spec wire_version(Session.t()) :: integer
388388
def wire_version(pid) do
389389
call(pid, :wire_version)
390390
end
@@ -408,7 +408,7 @@ defmodule Mongo.Session do
408408
@doc """
409409
Check if the session is alive.
410410
"""
411-
@spec server_session(Session.t()) :: boolean()
411+
@spec alive?(Session.t()) :: boolean()
412412
def alive?(nil), do: false
413413
def alive?(pid), do: Process.alive?(pid)
414414

lib/mongo/unordered_bulk.ex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ defmodule Mongo.UnorderedBulk do
5555

5656
@type t :: %__MODULE__{
5757
coll: String.t(),
58-
inserts: [BulkOps.bulk_op()],
59-
updates: [BulkOps.bulk_op()],
60-
deletes: [BulkOps.bulk_op()]
58+
inserts: [Mongo.BulkOps.bulk_op()],
59+
updates: [Mongo.BulkOps.bulk_op()],
60+
deletes: [Mongo.BulkOps.bulk_op()]
6161
}
6262

6363
defstruct coll: nil, inserts: [], updates: [], deletes: []
@@ -99,7 +99,7 @@ defmodule Mongo.UnorderedBulk do
9999
Appends a bulk operation to the unordered bulk. One of the field (inserts, updates or deletes)
100100
will be updated.
101101
"""
102-
@spec push(BulkOps.bulk_op(), UnorderedBulk.t()) :: UnorderedBulk.t()
102+
@spec push(Mongo.BulkOps.bulk_op(), UnorderedBulk.t()) :: UnorderedBulk.t()
103103
def push({:insert, doc}, %UnorderedBulk{inserts: rest} = bulk) do
104104
%UnorderedBulk{bulk | inserts: [doc | rest]}
105105
end
@@ -127,7 +127,7 @@ defmodule Mongo.UnorderedBulk do
127127
}
128128
```
129129
"""
130-
@spec insert_one(UnorderedBulk.t(), BulkOps.bulk_op()) :: UnorderedBulk.t()
130+
@spec insert_one(UnorderedBulk.t(), BSON.document()) :: UnorderedBulk.t()
131131
def insert_one(%UnorderedBulk{} = bulk, doc) do
132132
get_insert_one(doc) |> push(bulk)
133133
end
@@ -147,7 +147,7 @@ defmodule Mongo.UnorderedBulk do
147147
}
148148
```
149149
"""
150-
@spec delete_one(UnorderedBulk.t(), BulkOps.bulk_op()) :: UnorderedBulk.t()
150+
@spec delete_one(UnorderedBulk.t(), BSON.document()) :: UnorderedBulk.t()
151151
def delete_one(%UnorderedBulk{} = bulk, doc) do
152152
get_delete_one(doc) |> push(bulk)
153153
end
@@ -167,7 +167,7 @@ defmodule Mongo.UnorderedBulk do
167167
}
168168
```
169169
"""
170-
@spec delete_many(UnorderedBulk.t(), BulkOps.bulk_op()) :: UnorderedBulk.t()
170+
@spec delete_many(UnorderedBulk.t(), BSON.document()) :: UnorderedBulk.t()
171171
def delete_many(%UnorderedBulk{} = bulk, doc) do
172172
get_delete_many(doc) |> push(bulk)
173173
end

lib/mongo/write_concern.ex

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule Mongo.WriteConcern do
33

44
import Keywords
55

6+
@spec write_concern(keyword) :: nil | map
67
def write_concern(opts) do
78
%{
89
w: Keyword.get(opts, :w),
@@ -13,29 +14,16 @@ defmodule Mongo.WriteConcern do
1314
|> filter_empty()
1415
end
1516

16-
def filter_empty(map) when is_map(map) and map == %{} do
17-
nil
18-
end
19-
20-
def filter_empty(map) when is_map(map) do
21-
map
22-
end
17+
@spec filter_empty(map) :: nil | map
18+
defp filter_empty(%{} = map) when map == %{}, do: nil
19+
defp filter_empty(%{} = map), do: map
2320

24-
def acknowledged?(nil) do
25-
true
26-
end
21+
@spec acknowledged?(nil | keyword | map) :: boolean
22+
def acknowledged?(nil), do: true
2723

28-
def acknowledged?(write_concern) when is_map(write_concern) do
29-
case Map.get(write_concern, :w) do
30-
0 -> false
31-
_ -> true
32-
end
33-
end
24+
def acknowledged?(%{} = write_concern), do:
25+
Map.get(write_concern, :w) != 0
3426

35-
def acknowledged?(write_concern) when is_list(write_concern) do
36-
case Keyword.get(write_concern, :w) do
37-
0 -> false
38-
_ -> true
39-
end
40-
end
27+
def acknowledged?(write_concern) when is_list(write_concern), do:
28+
Keyword.get(write_concern, :w) != 0
4129
end

lib/session/session_pool.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ defmodule Mongo.Session.SessionPool do
1111

1212
alias Mongo.Session.ServerSession
1313

14+
@type session_pool() :: %{:pool_size => any, :queue => [ServerSession.t()], :timeout => any, optional(any) => any}
15+
1416
def new(logical_session_timeout, opts \\ []) do
1517
pool_size = Keyword.get(opts, :session_pool, 1000)
1618

@@ -25,7 +27,7 @@ defmodule Mongo.Session.SessionPool do
2527
Return a server session. If the session timeout is not reached, then a cached server session is return for reuse.
2628
Otherwise a newly created server session is returned.
2729
"""
28-
@spec checkout(GenServer.server()) :: ServerSession.t()
30+
@spec checkout(session_pool()) :: {ServerSession.t(), session_pool()}
2931
@compile {:inline, checkout: 1}
3032
def checkout(%{queue: queue, timeout: timeout, pool_size: size} = pool) do
3133
{session, queue} = find_session(queue, timeout, size)
@@ -36,7 +38,7 @@ defmodule Mongo.Session.SessionPool do
3638
Checkin a used server session. It if is already expired, the server session is dropped. Otherwise the server session
3739
is cache for reuse, until it expires due of being cached all the time.
3840
"""
39-
@spec checkin(GenServer.server(), ServerSession.t()) :: none()
41+
@spec checkin(session_pool(), ServerSession.t()) :: session_pool()
4042
@compile {:inline, checkin: 2}
4143
def checkin(%{queue: queue, timeout: timeout} = pool, session) do
4244
case ServerSession.about_to_expire?(session, timeout) do

0 commit comments

Comments
 (0)