ruby - bob

This commit is contained in:
James Walker 2018-09-19 11:01:30 -04:00
parent 0489fdc1af
commit e31b976368
Signed by: walkah
GPG Key ID: 3C127179D6086E93
3 changed files with 217 additions and 0 deletions

44
ruby/bob/README.md Normal file
View File

@ -0,0 +1,44 @@
# Bob
Bob is a lackadaisical teenager. In conversation, his responses are very limited.
Bob answers 'Sure.' if you ask him a question.
He answers 'Whoa, chill out!' if you yell at him.
He answers 'Calm down, I know what I'm doing!' if you yell a question at him.
He says 'Fine. Be that way!' if you address him without actually saying
anything.
He answers 'Whatever.' to anything else.
* * * *
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 bob_test.rb
To include color from the command line:
ruby -r minitest/pride bob_test.rb
## Source
Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

18
ruby/bob/bob.rb Normal file
View File

@ -0,0 +1,18 @@
class Bob
def self.hey(remark)
remark.gsub!(/[[:space:]]+/, '')
if remark == ''
'Fine. Be that way!'
elsif remark.upcase == remark and remark =~ /[A-Za-z]+/
if remark[-1] == '?'
"Calm down, I know what I'm doing!"
else
'Whoa, chill out!'
end
elsif remark[-1] == '?'
'Sure.'
else
'Whatever.'
end
end
end

155
ruby/bob/bob_test.rb Normal file
View File

@ -0,0 +1,155 @@
require 'minitest/autorun'
require_relative 'bob'
# Common test data version: 1.3.0 a64ef34
class BobTest < Minitest::Test
def test_stating_something
# skip
remark = "Tom-ay-to, tom-aaaah-to."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Tom-ay-to, tom-aaaah-to.", and..}
end
def test_shouting
# skip
remark = "WATCH OUT!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "WATCH OUT!", and..}
end
def test_shouting_gibberish
# skip
remark = "FCECDFCAAB"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "FCECDFCAAB", and..}
end
def test_asking_a_question
# skip
remark = "Does this cryogenic chamber make me look fat?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Does this cryogenic chamber make me look fat?", and..}
end
def test_asking_a_numeric_question
# skip
remark = "You are, what, like 15?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "You are, what, like 15?", and..}
end
def test_asking_gibberish
# skip
remark = "fffbbcbeab?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "fffbbcbeab?", and..}
end
def test_talking_forcefully
# skip
remark = "Let's go make out behind the gym!"
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Let's go make out behind the gym!", and..}
end
def test_using_acronyms_in_regular_speech
# skip
remark = "It's OK if you don't want to go to the DMV."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "It's OK if you don't want to go to the DMV.", and..}
end
def test_forceful_question
# skip
remark = "WHAT THE HELL WERE YOU THINKING?"
assert_equal "Calm down, I know what I'm doing!", Bob.hey(remark), %q{Bob hears "WHAT THE HELL WERE YOU THINKING?", and..}
end
def test_shouting_numbers
# skip
remark = "1, 2, 3 GO!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "1, 2, 3 GO!", and..}
end
def test_no_letters
# skip
remark = "1, 2, 3"
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "1, 2, 3", and..}
end
def test_question_with_no_letters
# skip
remark = "4?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "4?", and..}
end
def test_shouting_with_special_characters
# skip
remark = "ZOMG THE %^*@\#$(*^ ZOMBIES ARE COMING!!11!!1!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "ZOMG THE %^*@\#$(*^ ZOMBIES ARE COMING!!11!!1!", and..}
end
def test_shouting_with_no_exclamation_mark
# skip
remark = "I HATE THE DMV"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "I HATE THE DMV", and..}
end
def test_statement_containing_question_mark
# skip
remark = "Ending with ? means a question."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Ending with ? means a question.", and..}
end
def test_non_letters_with_question
# skip
remark = ":) ?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears ":) ?", and..}
end
def test_prattling_on
# skip
remark = "Wait! Hang on. Are you going to be OK?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Wait! Hang on. Are you going to be OK?", and..}
end
def test_silence
# skip
remark = ""
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "", and..}
end
def test_prolonged_silence
# skip
remark = " "
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears " ", and..}
end
def test_alternate_silence
# skip
remark = "\t\t\t\t\t\t\t\t\t\t"
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "\t\t\t\t\t\t\t\t\t\t", and..}
end
def test_multiple_line_question
# skip
remark = "\nDoes this cryogenic chamber make me look fat?\nno"
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "\nDoes this cryogenic chamber make me look fat?\nno", and..}
end
def test_starting_with_whitespace
# skip
remark = " hmmmmmmm..."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears " hmmmmmmm...", and..}
end
def test_ending_with_whitespace
# skip
remark = "Okay if like my spacebar quite a bit? "
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Okay if like my spacebar quite a bit? ", and..}
end
def test_other_whitespace
# skip
remark = "\n\r \t"
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "\n\r \t", and..}
end
def test_non_question_ending_with_whitespace
# skip
remark = "This is a statement ending with whitespace "
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "This is a statement ending with whitespace ", and..}
end
end