Sha256: 7157e70f6b5cef369565f35ad933287299b702e4215327f7b897f87394bf3920

Contents?: true

Size: 1.83 KB

Versions: 19

Compression:

Stored size: 1.83 KB

Contents

# 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
#

class PhoneValidator < ActiveModel::EachValidator
  # Include all core methods
  include Phonelib::Core

  # Validation method
  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
      valid = (phone.send(method) & types).size > 0
    else
      method = options[:possible] ? :possible? : :valid?
      valid = phone.send(method)
    end

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

  private

  def types
    types = options[:types].is_a?(Array) ? options[:types] : [options[:types]]
    types.map &:to_sym
  end

end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
phonelib-0.5.2 lib/validators/phone_validator.rb
phonelib-0.5.1 lib/validators/phone_validator.rb
phonelib-0.5.0 lib/validators/phone_validator.rb
phonelib-0.4.9 lib/validators/phone_validator.rb
phonelib-0.4.8 lib/validators/phone_validator.rb
phonelib-0.4.7 lib/validators/phone_validator.rb
phonelib-0.4.6 lib/validators/phone_validator.rb
phonelib-0.4.5 lib/validators/phone_validator.rb
phonelib-0.4.4 lib/validators/phone_validator.rb
phonelib-0.4.3 lib/validators/phone_validator.rb
phonelib-0.4.2 lib/validators/phone_validator.rb
phonelib-0.4.1 lib/validators/phone_validator.rb
phonelib-0.4.0 lib/validators/phone_validator.rb
phonelib-0.3.6 lib/validators/phone_validator.rb
phonelib-0.3.5 lib/validators/phone_validator.rb
phonelib-0.3.4 lib/validators/phone_validator.rb
phonelib-0.3.3 lib/validators/phone_validator.rb
phonelib-0.3.2 lib/validators/phone_validator.rb
phonelib-0.3.1 lib/validators/phone_validator.rb