Skip to content

Instantly share code, notes, and snippets.

@epoch
Last active June 11, 2019 14:29
Show Gist options
  • Select an option

  • Save epoch/059ea524cdd248db17d2 to your computer and use it in GitHub Desktop.

Select an option

Save epoch/059ea524cdd248db17d2 to your computer and use it in GitHub Desktop.
class Phone
def initialize(num)
@num = num
end
def number
if @num.gsub!(/[\s+)(-.]/,"")
return @num
elsif @num.length == 11 && @num[0] == "1"
new_num_arr = @num.chars
new_num_arr.shift
@num = new_num_arr.join
return @num
elsif @num.length == 11
return "0000000000"
# @num.gsub!(/[0-9]/, "0")
# return @num
elsif @num.length == 9
return "0000000000"
end
return @num
end
def area_code
@num.chars.first(3).join('')
end
def to_s
area_code = @num[0..2]
middle_nums = @num[3..5]
last_nums = @num[6..9]
"(#{area_code}) #{middle_nums}-#{last_nums}"
end
end
class Phone
def initialize(number)
@number = number
end
def number
validate( strip_non_numeric(@number) )
end
def validate(number)
if valid_length?(number)
number
elsif eleven_start_with_one?(number)
number[1..-1]
else
"0000000000"
end
end
def valid_length?(number)
number.length == 10
end
def eleven_start_with_one?(number)
number.length == 11 && number.start_with?('1')
end
def strip_non_numeric(number)
number.gsub(/[ .()-]/, '')
end
def area_code
@number[0..2]
end
def prefix
@number[3,3]
end
def line_number
@number[6,4]
end
def to_s
"(#{area_code}) #{prefix}-#{line_number}"
end
end
require 'minitest/autorun'
require 'minitest/pride'
require_relative './phone'
class PhoneTest < MiniTest::Test
def test_cleans_number
number = Phone.new("(123) 456-7890").number
assert_equal "1234567890", number
end
def test_cleans_number_with_dots
skip
number = Phone.new("123.456.7890").number
assert_equal "1234567890", number
end
def test_valid_when_11_digits_and_first_is_1
skip
number = Phone.new("11234567890").number
assert_equal "1234567890", number
end
def test_invalid_when_11_digits
skip
number = Phone.new("21234567890").number
assert_equal "0000000000", number
end
def test_invalid_when_9_digits
skip
number = Phone.new("123456789").number
assert_equal "0000000000", number
end
def test_area_code
skip
number = Phone.new("1234567890")
assert_equal "123", number.area_code
end
def test_pretty_print
skip
number = Phone.new("1234567890")
assert_equal "(123) 456-7890", number.to_s
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment