Module: DomainValidatorJp

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

Constant Summary collapse

VERSION =
"0.2.1"

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)


37
38
39
# File 'lib/domain_validator_jp.rb', line 37

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

.parsed(domain) ⇒ Object



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

def parsed(domain)
  PublicSuffix.parse(domain)
end

.sld_multibyte?(domain) ⇒ Boolean

only multibyte

Returns:

  • (Boolean)


59
60
61
# File 'lib/domain_validator_jp.rb', line 59

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

.utf8_to_sjis(str) ⇒ Object



86
87
88
# File 'lib/domain_validator_jp.rb', line 86

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)


81
82
83
84
# File 'lib/domain_validator_jp.rb', line 81

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)


73
74
75
# File 'lib/domain_validator_jp.rb', line 73

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

.valid_length_sld?(domain) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/domain_validator_jp.rb', line 77

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

.valid_length_sld_multibyte?(domain) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/domain_validator_jp.rb', line 63

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

.valid_public_suffix?(domain) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/domain_validator_jp.rb', line 41

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

.valid_sld_chars?(domain) ⇒ Boolean

only multibyte

Returns:

  • (Boolean)


69
70
71
# File 'lib/domain_validator_jp.rb', line 69

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

.valid_sld_not_dotted?(domain) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/domain_validator_jp.rb', line 45

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

.valid_sld_not_end_with_hyphen?(domain) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/domain_validator_jp.rb', line 53

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

.valid_sld_not_start_with_hyphen?(domain) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/domain_validator_jp.rb', line 49

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