ruby - bob
This commit is contained in:
parent
0489fdc1af
commit
e31b976368
44
ruby/bob/README.md
Normal file
44
ruby/bob/README.md
Normal 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
18
ruby/bob/bob.rb
Normal 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
155
ruby/bob/bob_test.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user