Module: DomainValidatorJp

Defined in:
lib/domain_validator_jp.rb,
lib/domain_validator_jp/version.rb

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.fqdn?(domain) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
# File 'lib/domain_validator_jp.rb', line 26

def fqdn?(domain)
  splitted = domain.split('.')
  splitted.length >= 2 && splitted.all?{|label| !label.empty? }
end

.include_subdomain?(domain) ⇒ Boolean

common

Returns:

  • (Boolean)


39
40
41
# File 'lib/domain_validator_jp.rb', line 39

def include_subdomain?(domain)
  !parsed(domain).subdomain.nil?
end

.parsed(domain) ⇒ Object



31
32
33
34
35
# File 'lib/domain_validator_jp.rb', line 31

def parsed(domain)
  PublicSuffix.parse(domain)
rescue PublicSuffix::DomainNotAllowed
  PublicSuffix::Domain.new(domain)   # set as TLD
end

.sld_multibyte?(domain) ⇒ Boolean

only multibyte

Returns:

  • (Boolean)


61
62
63
# File 'lib/domain_validator_jp.rb', line 61

def sld_multibyte?(domain)
  parsed(domain).sld !~ /^[0-9A-Za-z\-]+$/
end

.utf8_to_sjis(str) ⇒ Object



88
89
90
# File 'lib/domain_validator_jp.rb', line 88

def utf8_to_sjis(str)
  str.encode('Windows-31J') rescue nil
end

.valid?(domain) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/domain_validator_jp.rb', line 6

def valid?(domain)
  return false unless fqdn?(domain)
  return false if include_subdomain?(domain)
  return false unless valid_public_suffix?(domain)
  return false unless valid_sld_not_dotted?(domain)
  return false unless valid_sld_not_start_with_hyphen?(domain)
  return false unless valid_sld_not_end_with_hyphen?(domain)

  if sld_multibyte?(domain)
    return false unless valid_length_sld_multibyte?(domain)
    return false unless valid_jisx0208?(domain)
  else
    return false unless valid_sld_chars?(domain)
    return false unless valid_length_domain?(domain)
    return false unless valid_length_sld?(domain)
  end

  true
end

.valid_jisx0208?(domain) ⇒ Boolean

Returns:

  • (Boolean)


83
84
85
86
# File 'lib/domain_validator_jp.rb', line 83

def valid_jisx0208?(domain)
  valid = /^#{utf8_to_sjis("[\-0-9A-Za-z・ヽヾゝゞ仝々〆〇ーぁ-んァ-ヶ亜-腕弌-熙]")}+$/
  valid.match(utf8_to_sjis(parsed(domain).sld)) if utf8_to_sjis(parsed(domain).sld)
end

.valid_length_domain?(domain) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/domain_validator_jp.rb', line 75

def valid_length_domain?(domain)
  domain.length <= 253
end

.valid_length_sld?(domain) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/domain_validator_jp.rb', line 79

def valid_length_sld?(domain)
  parsed(domain).sld.length <= 63
end

.valid_length_sld_multibyte?(domain) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/domain_validator_jp.rb', line 65

def valid_length_sld_multibyte?(domain)
  1 <= parsed(domain).sld.length && parsed(domain).sld.length <= 15
end

.valid_public_suffix?(domain) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/domain_validator_jp.rb', line 43

def valid_public_suffix?(domain)
  PublicSuffix.valid?(domain, default_rule: nil, ignore_private: true)
end

.valid_sld_chars?(domain) ⇒ Boolean

only multibyte

Returns:

  • (Boolean)


71
72
73
# File 'lib/domain_validator_jp.rb', line 71

def valid_sld_chars?(domain)
  parsed(domain).sld =~ /^[0-9A-Za-z\-]+$/
end

.valid_sld_not_dotted?(domain) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/domain_validator_jp.rb', line 47

def valid_sld_not_dotted?(domain)
  parsed(domain).sld !~ /\./
end

.valid_sld_not_end_with_hyphen?(domain) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/domain_validator_jp.rb', line 55

def valid_sld_not_end_with_hyphen?(domain)
  parsed(domain).sld !~ /\-$/
end

.valid_sld_not_start_with_hyphen?(domain) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/domain_validator_jp.rb', line 51

def valid_sld_not_start_with_hyphen?(domain)
  parsed(domain).sld !~ /^\-/
end