-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathemail.rb
49 lines (36 loc) · 1.19 KB
/
email.rb
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
48
49
# frozen_string_literal: true
require_relative './email/parser'
module KDL
module Types
class Email < Value::Custom
attr_reader :local, :domain
def initialize(value, local:, domain:, **kwargs)
super(value, **kwargs)
@local = local
@domain = domain
end
def self.call(value, type = 'email')
return nil unless value.is_a? ::KDL::Value::String
local, domain = Parser.new(value.value).parse
new(value.value, type: type, local: local, domain: domain)
end
end
MAPPING['email'] = Email
class IDNEmail < Email
attr_reader :unicode_domain
def initialize(value, unicode_domain:, **kwargs)
super(value, **kwargs)
@unicode_domain = unicode_domain
end
def self.call(value, type = 'email')
return nil unless value.is_a? ::KDL::Value::String
local, domain, unicode_domain = Email::Parser.new(value.value, idn: true).parse
new("#{local}@#{domain}", type: type, local: local, domain: domain, unicode_domain: unicode_domain)
end
def unicode_value
"#{local}@#{unicode_domain}"
end
end
MAPPING['idn-email'] = IDNEmail
end
end