Skip to content

Commit 9b671bb

Browse files
author
woylie
committed
rewrite error module
1 parent aa85958 commit 9b671bb

2 files changed

Lines changed: 76 additions & 6 deletions

File tree

lib/tds/error.ex

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,55 @@
11
defmodule Tds.Error do
2+
@moduledoc """
3+
Defines the `Tds.Error` struct.
4+
5+
The struct has to fields:
6+
7+
* `:message`: expected to be a string
8+
* `:mssql`: expected to be a keyword list with the fields `line_number`,
9+
`number` and `msg_text`
10+
11+
## Usage
12+
13+
iex> raise Tds.Error
14+
** (Tds.Error) An error occured.
15+
16+
iex> raise Tds.Error, "some error"
17+
** (Tds.Error) some error
18+
19+
iex> raise Tds.Error, "some error"
20+
** (Tds.Error) some error
21+
22+
iex> raise Tds.Error, line_number: 10, number: 8, msg_text: "some error"
23+
** (Tds.Error) Line 10 (8): some error
24+
"""
25+
226
defexception [:message, :mssql]
327

4-
def message(e) do
5-
msg =
6-
if kw = e.mssql do
7-
"#{kw[:line_number]} (#{kw[:number]}): #{kw[:msg_text]}"
8-
end
28+
@spec exception(String.t() | keyword) :: %__MODULE__{}
29+
def exception(message) when is_binary(message) do
30+
%__MODULE__{message: message}
31+
end
32+
33+
def exception(line_number: line_number, number: number, msg_text: msg) do
34+
%__MODULE__{
35+
mssql: %{
36+
line_number: line_number,
37+
number: number,
38+
msg_text: msg
39+
}
40+
}
41+
end
42+
43+
def exception(_) do
44+
%__MODULE__{message: "An error occured."}
45+
end
46+
47+
@spec message(%__MODULE__{}) :: String.t()
48+
def message(%__MODULE__{mssql: mssql}) when is_map(mssql) do
49+
"Line #{mssql[:line_number]} (#{mssql[:number]}): #{mssql[:msg_text]}"
50+
end
951

10-
msg || e.message
52+
def message(%__MODULE__{message: message}) when is_binary(message) do
53+
message
1154
end
1255
end

test/error_test.exs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
defmodule ErrorTest do
2+
use ExUnit.Case, async: true
3+
4+
test "raises a Tds.Error with a string message" do
5+
assert_raise Tds.Error, "Some wild error.", fn ->
6+
raise Tds.Error, "Some wild error."
7+
end
8+
end
9+
10+
test "raises a Tds.Error with Mssql infos" do
11+
assert_raise Tds.Error, "Line 4 (8): something bad", fn ->
12+
raise Tds.Error, line_number: 4, number: 8, msg_text: "something bad"
13+
end
14+
end
15+
16+
test "raises a Tds.Error with a default message as a fallback" do
17+
# no arguments
18+
assert_raise Tds.Error, "An error occured.", fn ->
19+
raise Tds.Error
20+
end
21+
22+
# weird arguments
23+
assert_raise Tds.Error, "An error occured.", fn ->
24+
raise Tds.Error, profession: "crocodile hunter"
25+
end
26+
end
27+
end

0 commit comments

Comments
 (0)