Class: TelephoneValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
app/validators/telephone_validator.rb

Instance Method Summary collapse

Instance Method Details

#valid_eleven_digit?(input) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'app/validators/telephone_validator.rb', line 24

def valid_eleven_digit?(input)
  input.length == 11 && input[0] == "1" && valid_ten_digit?(input.slice(-10, 10))
end

#valid_seven_digit?(input) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'app/validators/telephone_validator.rb', line 16

def valid_seven_digit?(input)
  input.length == 7 && input[0] != "0" && input[0] != "1"
end

#valid_ten_digit?(input) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/validators/telephone_validator.rb', line 20

def valid_ten_digit?(input)
  input.length == 10 && input[0] != "0" && input[0] != "1" && valid_seven_digit?(input.slice(-7, 7))
end

#validate_by_region(region, formatted_value) ⇒ Object



10
11
12
13
14
# File 'app/validators/telephone_validator.rb', line 10

def validate_by_region(region, formatted_value)
  if region == :north_america
    valid_eleven_digit?(formatted_value) || valid_ten_digit?(formatted_value) || valid_seven_digit?(formatted_value)
  end
end

#validate_each(object, attribute, value) ⇒ Object



2
3
4
5
6
7
8
# File 'app/validators/telephone_validator.rb', line 2

def validate_each(object, attribute, value)
  formatted_value = value.gsub(/[\s\.\+\(\)-]*/, "")
  is_number = !(formatted_value =~ /^[0-9+\(\)#\.\s\/ext-]+$/).nil?
  unless is_number && validate_by_region(options[:region], formatted_value)
    object.errors[attribute] << (options[:message] || "is not formatted properly")
  end
end