From e70b8fdc094a7175731f3d865117f2f34f2c8481 Mon Sep 17 00:00:00 2001 From: architapatelis Date: Wed, 25 Oct 2017 13:46:51 -0700 Subject: [PATCH] two-fer: Implement exercise (#740) * Create README.md file using configlet generate command * Add exercise with topics to config.json * Add solution and test case generator * ran bin/generate command to generate tests --- config.json | 11 +++ exercises/two-fer/.meta/.version | 1 + .../two-fer/.meta/generator/two_fer_case.rb | 12 ++++ exercises/two-fer/.meta/solutions/two_fer.rb | 9 +++ exercises/two-fer/README.md | 69 +++++++++++++++++++ exercises/two-fer/two_fer_test.rb | 42 +++++++++++ 6 files changed, 144 insertions(+) create mode 100644 exercises/two-fer/.meta/.version create mode 100644 exercises/two-fer/.meta/generator/two_fer_case.rb create mode 100644 exercises/two-fer/.meta/solutions/two_fer.rb create mode 100644 exercises/two-fer/README.md create mode 100644 exercises/two-fer/two_fer_test.rb diff --git a/config.json b/config.json index 2caae00b53..ab9d7dc1cd 100644 --- a/config.json +++ b/config.json @@ -886,6 +886,17 @@ "Logic" ] }, + { + "uuid": "b02a4214-0f1a-9480-2132-2ea3d5073dbfbec0aa4", + "slug": "two-fer", + "core": false, + "unlocked_by": null, + "difficulty": 1, + "topics": [ + "Control-flow (conditionals)", + "Strings" + ] + }, { "uuid": "cae4e000-3aac-41f7-b727-f9cce12d058d", "slug": "octal", diff --git a/exercises/two-fer/.meta/.version b/exercises/two-fer/.meta/.version new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/exercises/two-fer/.meta/.version @@ -0,0 +1 @@ +1 diff --git a/exercises/two-fer/.meta/generator/two_fer_case.rb b/exercises/two-fer/.meta/generator/two_fer_case.rb new file mode 100644 index 0000000000..9ba2d546ec --- /dev/null +++ b/exercises/two-fer/.meta/generator/two_fer_case.rb @@ -0,0 +1,12 @@ +require 'generator/exercise_case' + +class TwoFerCase < Generator::ExerciseCase + + def workload + if input == nil + assert_equal {"TwoFer.two_fer"} + else + assert_equal { "TwoFer.two_fer(#{input.inspect})" } + end + end +end diff --git a/exercises/two-fer/.meta/solutions/two_fer.rb b/exercises/two-fer/.meta/solutions/two_fer.rb new file mode 100644 index 0000000000..b7a4aa3453 --- /dev/null +++ b/exercises/two-fer/.meta/solutions/two_fer.rb @@ -0,0 +1,9 @@ +module BookKeeping + VERSION = 1 +end + +class TwoFer + def self.two_fer(name = 'you') + "One for #{name}, one for me." + end +end diff --git a/exercises/two-fer/README.md b/exercises/two-fer/README.md new file mode 100644 index 0000000000..0d9a7bdfa4 --- /dev/null +++ b/exercises/two-fer/README.md @@ -0,0 +1,69 @@ +# Two Fer + +`Two-fer` or `2-fer` is short for two for one. One for you and one for me. + +```text +"One for X, one for me." +``` + +When X is a name or "you". + +If the given name is "Alice", the result should be "One for Alice, one for me." +If no name is given, the result should be "One for you, one for me." + +## Test-Driven Development + +As programmers mature, they eventually want to test their code. + +Here at Exercism we simulate [Test-Driven +Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where +you write your tests before writing any functionality. The simulation comes in +the form of a pre-written test suite, which will signal that you have solved +the problem. + +It will also provide you with a safety net to explore other solutions without +breaking the functionality. + +### A typical TDD workflow on Exercism: + +1. Run the test file and pick one test that's failing. +2. Write some code to fix the test you picked. +3. Re-run the tests to confirm the test is now passing. +4. Repeat from step 1. +5. Submit your solution (`exercism submit /path/to/file`) + +## Instructions + +Submissions are encouraged to be general, within reason. Having said that, it's +also important not to over-engineer a solution. + +It's important to remember that the goal is to make code as expressive and +readable as we can. + +## Running the tests + +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. + +In order to run the test, you can run the test file from the exercise directory. + +`ruby two_fer_test.rb` + +To include color from the command line: + +`ruby -r minitest/pride two_fer_test.rb` + +## Further information + +For more detailed information about the Ruby track, including how to get help if you're having trouble, please visit the exercism.io [Ruby language page](http://exercism.io/languages/ruby/about). + +## Source + +This is an exercise to introduce users to basic programming constructs, just after hello World. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer) + +## Submitting Incomplete Solutions + +It's possible to submit an incomplete solution so you can see how others have completed the exercise. diff --git a/exercises/two-fer/two_fer_test.rb b/exercises/two-fer/two_fer_test.rb new file mode 100644 index 0000000000..aea5b4f841 --- /dev/null +++ b/exercises/two-fer/two_fer_test.rb @@ -0,0 +1,42 @@ +require 'minitest/autorun' +require_relative 'two_fer' + +# Common test data version: 1.1.0 c080bdf +class TwoFerTest < Minitest::Test + def test_no_name_given + # skip + assert_equal "One for you, one for me.", TwoFer.two_fer + end + + def test_a_name_given + skip + assert_equal "One for Alice, one for me.", TwoFer.two_fer("Alice") + end + + def test_another_name_given + skip + assert_equal "One for Bob, one for me.", TwoFer.two_fer("Bob") + end + + # Problems in exercism evolve over time, as we find better ways to ask + # questions. + # The version number refers to the version of the problem you solved, + # not your solution. + # + # Define a constant named VERSION inside of the top level BookKeeping + # module, which may be placed near the end of your file. + # + # In your file, it will look like this: + # + # module BookKeeping + # VERSION = 1 # Where the version number matches the one in the test. + # end + # + # If you are curious, read more about constants on RubyDoc: + # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html + + def test_bookkeeping + skip + assert_equal 1, BookKeeping::VERSION + end +end