diff --git a/ruby/bob/README.md b/ruby/bob/README.md new file mode 100644 index 0000000..5da8c98 --- /dev/null +++ b/ruby/bob/README.md @@ -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. diff --git a/ruby/bob/bob.rb b/ruby/bob/bob.rb new file mode 100644 index 0000000..70ea19d --- /dev/null +++ b/ruby/bob/bob.rb @@ -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 diff --git a/ruby/bob/bob_test.rb b/ruby/bob/bob_test.rb new file mode 100644 index 0000000..7af315e --- /dev/null +++ b/ruby/bob/bob_test.rb @@ -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