/
emailable.cr
47 lines (35 loc) · 1.07 KB
/
emailable.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Carbon::Emailable
private abstract def emailable : Carbon::Address | String
# Adapter's should use this to get the Carbon::Address
def carbon_address : Carbon::Address
ensure_carbon_address(emailable)
end
# Adapter's should use this to get the Carbon::Address when used for 'from'
def carbon_address_for_from : Carbon::Address
ensure_carbon_address(emailable_for_from)
end
private def emailable_for_from
emailable
end
private def ensure_carbon_address(value : Carbon::Address) : Carbon::Address
value
end
private def ensure_carbon_address(value : String)
{%
raise <<-ERROR
#{@type}#emailable returned String, but it must return a Carbon::Address
Try this...
▸ Carbon::Address.new("person@gmail.com")
ERROR
%}
end
private def ensure_carbon_address(value : T) forall T
{%
raise <<-ERROR
#{@type}#emailable returned #{T}, but it must return a Carbon::Address
Try this...
▸ Carbon::Address.new(name: "Name", address: "person@gmail.com")
ERROR
%}
end
end