ruby - phone-number

This commit is contained in:
James Walker 2018-09-21 11:49:59 -05:00
parent 0e9c386087
commit b2c0073bb3
Signed by: walkah
GPG Key ID: 3C127179D6086E93
3 changed files with 153 additions and 0 deletions

View File

@ -0,0 +1,59 @@
# Phone Number
Clean up user-entered phone numbers so that they can be sent SMS messages.
The **North American Numbering Plan (NANP)** is a telephone numbering system used by many countries in North America like the United States, Canada or Bermuda. All NANP-countries share the same international country code: `1`.
NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
The format is usually represented as
```text
(NXX)-NXX-XXXX
```
where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
Your task is to clean up differently formatted telephone numbers by removing punctuation and the country code (1) if present.
For example, the inputs
- `+1 (613)-995-0253`
- `613-995-0253`
- `1 613 995 0253`
- `613.995.0253`
should all produce the output
`6139950253`
**Note:** As this exercise only deals with telephone numbers used in NANP-countries, only 1 is considered a valid country code.
* * * *
For installation and learning resources, refer to the
[exercism help page](http://exercism.io/languages/ruby).
For running the tests provided, you will need the Minitest gem. Open a
terminal window and run the following command to install minitest:
gem install minitest
If you would like color output, you can `require 'minitest/pride'` in
the test file, or note the alternative instruction, below, for running
the test file.
Run the tests from the exercise directory using the following command:
ruby phone_number_test.rb
To include color from the command line:
ruby -r minitest/pride phone_number_test.rb
## Source
Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

View File

@ -0,0 +1,19 @@
class PhoneNumber
def self.clean(number)
number.gsub!(/[^0-9]/, '')
if number.length < 10 or number.length > 11
nil
elsif number.length == 11
if number[0] == "1"
number.slice(1, number.length)
else
nil
end
elsif ["0", "1"].include?(number[0]) or ["0", "1"].include?(number[3])
nil
else
number
end
end
end

View File

@ -0,0 +1,75 @@
require 'minitest/autorun'
require_relative 'phone_number'
# Common test data version: 1.4.0 0783171
class PhoneNumberTest < Minitest::Test
def test_cleans_the_number
# skip
assert_equal "2234567890", PhoneNumber.clean("(223) 456-7890")
end
def test_cleans_numbers_with_dots
# skip
assert_equal "2234567890", PhoneNumber.clean("223.456.7890")
end
def test_cleans_numbers_with_multiple_spaces
# skip
assert_equal "2234567890", PhoneNumber.clean("223 456 7890 ")
end
def test_invalid_when_9_digits
# skip
assert_nil PhoneNumber.clean("123456789")
end
def test_invalid_when_11_digits_does_not_start_with_a_1
# skip
assert_nil PhoneNumber.clean("22234567890")
end
def test_valid_when_11_digits_and_starting_with_1
# skip
assert_equal "2234567890", PhoneNumber.clean("12234567890")
end
def test_valid_when_11_digits_and_starting_with_1_even_with_punctuation
# skip
assert_equal "2234567890", PhoneNumber.clean("+1 (223) 456-7890")
end
def test_invalid_when_more_than_11_digits
# skip
assert_nil PhoneNumber.clean("321234567890")
end
def test_invalid_with_letters
# skip
assert_nil PhoneNumber.clean("123-abc-7890")
end
def test_invalid_with_punctuations
# skip
assert_nil PhoneNumber.clean("123-@:!-7890")
end
def test_invalid_if_area_code_starts_with_0
# skip
assert_nil PhoneNumber.clean("(023) 456-7890")
end
def test_invalid_if_area_code_starts_with_1
# skip
assert_nil PhoneNumber.clean("(123) 456-7890")
end
def test_invalid_if_exchange_code_starts_with_0
# skip
assert_nil PhoneNumber.clean("(223) 056-7890")
end
def test_invalid_if_exchange_code_starts_with_1
# skip
assert_nil PhoneNumber.clean("(223) 156-7890")
end
end