Sha256: 5f4eb74544905ff8bc17f7d06357ddf8ffc89202111377b4fc1effa595f0a474

Contents?: true

Size: 944 Bytes

Versions: 3

Compression:

Stored size: 944 Bytes

Contents

module Volt
  class EmailValidator
    DEFAULT_REGEX = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i
    ERROR_MESSAGE = 'must be an email address'

    def self.validate(model, old_model, field_name, options)
      new(model, field_name, options).errors
    end

    def initialize(model, field_name, options)
      @value = model.read_attribute field_name

      case options
      when Hash, true, false
        configure options
      else
        fail 'arguments can only be a Boolean or a Hash'
      end
    end

    def valid?
      return false unless @value.is_a? String

      !!@value.match(@custom_regex || DEFAULT_REGEX)
    end

    def errors
      valid? ? {} : { email: [ @custom_message || ERROR_MESSAGE ] }
    end

    private

    def configure(options)
      return unless options.is_a? Hash

      @custom_message = options.fetch(:error_message) { nil }
      @custom_regex = options.fetch(:with) { nil }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
volt-0.8.27.beta2 lib/volt/models/validators/email_validator.rb
volt-0.8.27.beta1 lib/volt/models/validators/email_validator.rb
volt-0.8.26.beta1 lib/volt/models/validators/email_validator.rb