Class: EmailAddress::Validator
- Inherits:
-
Object
- Object
- EmailAddress::Validator
- Defined in:
- lib/email_address/validator.rb
Constant Summary collapse
- LEGIBLE_LOCAL_REGEX =
/\A[a-z0-9]+(([\.\-\_\'\+][a-z0-9]+)+)?\z/
- DOT_ATOM_REGEX =
/[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]/
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(address, options = {}) ⇒ Validator
constructor
A new instance of Validator.
- #invalid(reason, *info) ⇒ Object
-
#legible? ⇒ Boolean
Allows single, simple punctua3Nz=Xj/7c9 tion character between words.
- #mailbox_validator(v) ⇒ Object
- #valid? ⇒ Boolean
-
#valid_dns? ⇒ Boolean
True if the DNS A record or MX records are defined Why A record? Some domains are misconfigured with only the A record.
- #valid_google_local? ⇒ Boolean
- #valid_local? ⇒ Boolean
-
#valid_local_part?(p) ⇒ Boolean
Valid within a mailbox, tag, comment.
-
#valid_mx? ⇒ Boolean
True if the DNS MX records have been defined.
- #valid_sizes? ⇒ Boolean
Constructor Details
#initialize(address, options = {}) ⇒ Validator
Returns a new instance of Validator.
10 11 12 13 14 15 16 17 |
# File 'lib/email_address/validator.rb', line 10 def initialize(address, ={}) @address = address @local = address.local @host = address.host @options = @rules = EmailAddress::Config.provider(@host.provider) @errors = [] end |
Class Method Details
.validate(address, options = {}) ⇒ Object
6 7 8 |
# File 'lib/email_address/validator.rb', line 6 def self.validate(address, ={}) EmailAddress::Validator.new(address, ).valid? end |
Instance Method Details
#invalid(reason, *info) ⇒ Object
83 84 85 86 87 |
# File 'lib/email_address/validator.rb', line 83 def invalid(reason, *info) @errors << reason #p "INVALID ----> #{reason} for #{@local.to_s}@#{@host.to_s} #{info.inspect}" false end |
#legible? ⇒ Boolean
Allows single, simple punctua3Nz=Xj/7c9 tion character between words
54 55 56 |
# File 'lib/email_address/validator.rb', line 54 def legible? @local.to_s =~ LEGIBLE_LOCAL_REGEX end |
#mailbox_validator(v) ⇒ Object
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/email_address/validator.rb', line 31 def mailbox_validator(v) return true unless v if v.is_a?(Proc) return invalid(:mailbox_proc) unless @rules[:valid_mailbox].call(@local) elsif v == :legible return legible? elsif v == :rfc return rfc_compliant? end end |
#valid? ⇒ Boolean
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/email_address/validator.rb', line 19 def valid? return false unless valid_sizes? if @rules[:valid_mailbox] && ! @rules[:valid_mailbox].call(@local.to_s) #p ["VALIDATOR", @local.to_s, @rules[:valid_mailbox]] return invalid(:mailbox_validator) else return false unless valid_local? end return invalid(:mx) unless valid_mx? || (valid_dns? && @options[:allow_dns_a]) true end |
#valid_dns? ⇒ Boolean
True if the DNS A record or MX records are defined Why A record? Some domains are misconfigured with only the A record.
44 45 46 |
# File 'lib/email_address/validator.rb', line 44 def valid_dns? @host.exchanger.has_dns_a_record? end |
#valid_google_local? ⇒ Boolean
89 90 91 |
# File 'lib/email_address/validator.rb', line 89 def valid_google_local? true end |
#valid_local? ⇒ Boolean
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/email_address/validator.rb', line 66 def valid_local? return invalid(:mailbox) unless valid_local_part?(@local.mailbox) return invalid(:comment) unless @local.comment.empty? || valid_local_part?(@local.comment) if @local.tag @local.tag.split(@rules[:tag_separator]).each do |t| return invalid(:tag, t) unless valid_local_part?(t) end end true end |
#valid_local_part?(p) ⇒ Boolean
Valid within a mailbox, tag, comment
78 79 80 |
# File 'lib/email_address/validator.rb', line 78 def valid_local_part?(p) p =~ LEGIBLE_LOCAL_REGEX end |
#valid_mx? ⇒ Boolean
True if the DNS MX records have been defined. More strict than #valid?
49 50 51 |
# File 'lib/email_address/validator.rb', line 49 def valid_mx? @host.exchanger.mxers.size > 0 end |
#valid_sizes? ⇒ Boolean
58 59 60 61 62 63 64 |
# File 'lib/email_address/validator.rb', line 58 def valid_sizes? return invalid(:address_size) unless @rules[:address_size].include?(@address.to_s.size) return invalid(:domain_size ) unless @rules[:domain_size ].include?(@host.to_s.size) return invalid(:local_size ) unless @rules[:local_size ].include?(@local.to_s.size) return invalid(:mailbox_size) unless @rules[:mailbox_size].include?(@local.mailbox.size) true end |