Class: PhoneValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Includes:
Phonelib::Core
Defined in:
lib/validators/phone_validator.rb

Overview

Validator class for phone validations

Examples

Validates that attribute is a valid phone number. If empty value passed for attribute it fails.

class Phone < ActiveRecord::Base
  attr_accessible :number
  validates :number, phone: true
end

Validates that attribute is a possible phone number. If empty value passed for attribute it fails.

class Phone < ActiveRecord::Base
  attr_accessible :number
  validates :number, phone: { possible: true }
end

Validates that attribute is a valid phone number. Empty value is allowed to be passed.

class Phone < ActiveRecord::Base
  attr_accessible :number
  validates :number, phone: { allow_blank: true }
end

Validates that attribute is a valid phone number of specified type(s). It is also possible to check that attribute is a possible number of specified type(s). Symbol or array accepted.

class Phone < ActiveRecord::Base
  attr_accessible :number, :mobile
  validates :number, phone: { types: [:mobile, :fixed], allow_blank: true }
  validates :mobile, phone: { possible: true, types: :mobile  }
end

Constant Summary

Constants included from Phonelib::Core

Phonelib::Core::AREA_CODE_OPTIONAL, Phonelib::Core::CARRIER_SELECTION_CODES, Phonelib::Core::CARRIER_SERVICES, Phonelib::Core::CARRIER_SPECIFIC, Phonelib::Core::COUNTRY_CODE, Phonelib::Core::DEFAULT_NUMBER_FORMAT, Phonelib::Core::DIRECTORY_SERVICES, Phonelib::Core::DOUBLE_COUNTRY_PREFIX_FLAG, Phonelib::Core::EMERGENCY, Phonelib::Core::EXPANDED_EMERGENCY, Phonelib::Core::EXT_CARRIERS, Phonelib::Core::EXT_CARRIER_KEY, Phonelib::Core::EXT_GEO_NAMES, Phonelib::Core::EXT_GEO_NAME_KEY, Phonelib::Core::EXT_PREFIXES, Phonelib::Core::EXT_TIMEZONES, Phonelib::Core::EXT_TIMEZONE_KEY, Phonelib::Core::FILE_EXT_DATA, Phonelib::Core::FILE_MAIN_DATA, Phonelib::Core::FIXED_LINE, Phonelib::Core::FIXED_OR_MOBILE, Phonelib::Core::FORMATS, Phonelib::Core::GENERAL, Phonelib::Core::INTERNATIONAL_PREFIX, Phonelib::Core::LEADING_DIGITS, Phonelib::Core::MAIN_COUNTRY_FOR_CODE, Phonelib::Core::MOBILE, Phonelib::Core::NATIONAL_PREFIX, Phonelib::Core::NATIONAL_PREFIX_FOR_PARSING, Phonelib::Core::NATIONAL_PREFIX_RULE, Phonelib::Core::NO_INTERNATIONAL_DIALING, Phonelib::Core::PAGER, Phonelib::Core::PATTERN, Phonelib::Core::PERSONAL_NUMBER, Phonelib::Core::POSSIBLE_PATTERN, Phonelib::Core::PREMIUM_RATE, Phonelib::Core::SHARED_COST, Phonelib::Core::SHORT_CODE, Phonelib::Core::SHORT_CODES, Phonelib::Core::SMS_SERVICES, Phonelib::Core::STANDARD_RATE, Phonelib::Core::TOLL_FREE, Phonelib::Core::TYPES, Phonelib::Core::TYPES_DESC, Phonelib::Core::UAN, Phonelib::Core::VALID_PATTERN, Phonelib::Core::VOICEMAIL, Phonelib::Core::VOIP

Instance Method Summary collapse

Methods included from Phonelib::Core

#default_country, #default_country=, #extension_separate_symbols, #extension_separate_symbols=, #extension_separator, #extension_separator=, #impossible?, #invalid?, #invalid_for_country?, #parse, #parse_special, #parse_special=, #phone_data, #phone_ext_data, #phone_regexp_cache, #possible?, #valid?, #valid_for_country?

Instance Method Details

#validate_each(record, attribute, value) ⇒ Object

Validation method



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/validators/phone_validator.rb', line 45

def validate_each(record, attribute, value)
  return if options[:allow_blank] && value.blank?

  phone = parse(value)
  if options[:types]
    method = options[:possible] ? :possible_types : :types
    phone_types = phone.send(method)
    if (phone_types & [ Phonelib::Core::FIXED_OR_MOBILE ]).size > 0
      phone_types += [ Phonelib::Core::FIXED_LINE, Phonelib::Core::MOBILE ]
    end
    valid = (phone_types & types).size > 0
  else
    method = options[:possible] ? :possible? : :valid?
    valid = phone.send(method)
  end

  record.errors.add(attribute, options[:message] || :invalid) unless valid
end