Last active
June 11, 2019 14:29
-
-
Save epoch/059ea524cdd248db17d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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