trackler 2.1.0.7 → 2.1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceOfSquaresCalculatorTest.java +9 -9
  4. data/tracks/java/exercises/gigasecond/src/test/java/GigasecondTest.java +4 -4
  5. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +10 -10
  6. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +12 -12
  7. data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +4 -4
  8. data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +11 -11
  9. data/tracks/java/exercises/space-age/src/test/java/SpaceAgeTest.java +8 -8
  10. data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +1 -1
  11. data/tracks/perl6/.travis.yml +1 -1
  12. data/tracks/perl6/exercises/bob/example.yaml +19 -0
  13. data/tracks/perl6/exercises/clock/clock.t +17 -10
  14. data/tracks/perl6/exercises/clock/example.yaml +7 -5
  15. data/tracks/perl6/exercises/grade-school/example.yaml +23 -0
  16. data/tracks/perl6/exercises/leap/example.yaml +6 -0
  17. data/tracks/perl6/exercises/phone-number/Example.pm +2 -2
  18. data/tracks/perl6/exercises/phone-number/PhoneNumber.pm6 +1 -1
  19. data/tracks/perl6/exercises/phone-number/example.yaml +12 -0
  20. data/tracks/perl6/exercises/phone-number/phone-number.t +100 -85
  21. data/tracks/perl6/exercises/space-age/Example.pm +13 -15
  22. data/tracks/ruby/README.md +22 -10
  23. data/tracks/ruby/{HINTS.md → exercises/accumulate/HINTS.md} +0 -0
  24. data/tracks/ruby/exercises/accumulate/accumulate_test.rb +0 -1
  25. data/tracks/ruby/exercises/acronym/.meta/generator/acronym_cases.rb +1 -1
  26. data/tracks/ruby/exercises/acronym/acronym_test.rb +1 -2
  27. data/tracks/ruby/exercises/all-your-base/.meta/generator/all_your_base_cases.rb +1 -1
  28. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -2
  29. data/tracks/ruby/exercises/allergies/allergies_test.rb +0 -1
  30. data/tracks/ruby/exercises/alphametics/.meta/generator/alphametics_cases.rb +1 -1
  31. data/tracks/ruby/exercises/alphametics/.meta/generator/test_template.erb +1 -2
  32. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +1 -2
  33. data/tracks/ruby/exercises/anagram/.meta/generator/anagram_cases.rb +1 -1
  34. data/tracks/ruby/exercises/anagram/anagram_test.rb +1 -2
  35. data/tracks/ruby/exercises/atbash-cipher/atbash_cipher_test.rb +0 -1
  36. data/tracks/ruby/exercises/beer-song/.meta/generator/beer_song_cases.rb +1 -1
  37. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -2
  38. data/tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb +0 -1
  39. data/tracks/ruby/exercises/binary-search/binary_search_test.rb +0 -1
  40. data/tracks/ruby/exercises/binary/.meta/generator/binary_cases.rb +1 -1
  41. data/tracks/ruby/exercises/binary/binary_test.rb +1 -2
  42. data/tracks/ruby/exercises/bob/bob_test.rb +0 -1
  43. data/tracks/ruby/exercises/bowling/.meta/generator/bowling_cases.rb +1 -1
  44. data/tracks/ruby/exercises/bowling/.meta/generator/test_template.erb +1 -2
  45. data/tracks/ruby/exercises/bowling/bowling_test.rb +1 -2
  46. data/tracks/ruby/exercises/bracket-push/.meta/generator/bracket_push_cases.rb +1 -1
  47. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +1 -2
  48. data/tracks/ruby/exercises/circular-buffer/circular_buffer_test.rb +0 -1
  49. data/tracks/ruby/exercises/clock/.meta/generator/clock_cases.rb +1 -1
  50. data/tracks/ruby/exercises/clock/clock_test.rb +1 -2
  51. data/tracks/ruby/exercises/connect/.meta/generator/connect_cases.rb +1 -1
  52. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +1 -2
  53. data/tracks/ruby/exercises/connect/connect_test.rb +1 -2
  54. data/tracks/ruby/exercises/crypto-square/crypto_square_test.rb +0 -1
  55. data/tracks/ruby/exercises/custom-set/.meta/generator/custom_set_cases.rb +1 -1
  56. data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
  57. data/tracks/ruby/exercises/diamond/diamond_test.rb +0 -1
  58. data/tracks/ruby/exercises/difference-of-squares/.meta/generator/difference_of_squares_cases.rb +1 -1
  59. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +1 -2
  60. data/tracks/ruby/exercises/dominoes/.meta/generator/dominoes_cases.rb +1 -1
  61. data/tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb +1 -2
  62. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -2
  63. data/tracks/ruby/exercises/etl/.meta/generator/etl_cases.rb +1 -1
  64. data/tracks/ruby/exercises/etl/etl_test.rb +1 -2
  65. data/tracks/ruby/exercises/flatten-array/flatten_array_test.rb +0 -1
  66. data/tracks/ruby/exercises/food-chain/food_chain_test.rb +0 -1
  67. data/tracks/ruby/exercises/gigasecond/.meta/generator/gigasecond_cases.rb +1 -1
  68. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +1 -2
  69. data/tracks/ruby/exercises/grade-school/grade_school_test.rb +0 -1
  70. data/tracks/ruby/exercises/grains/.meta/generator/grains_cases.rb +1 -1
  71. data/tracks/ruby/exercises/grains/grains_test.rb +1 -2
  72. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_cases.rb +1 -1
  73. data/tracks/ruby/exercises/hamming/hamming_test.rb +1 -2
  74. data/tracks/ruby/exercises/hello-world/.meta/generator/hello_world_cases.rb +1 -1
  75. data/tracks/ruby/exercises/hello-world/.meta/generator/test_template.erb +1 -1
  76. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  77. data/tracks/ruby/exercises/hexadecimal/hexadecimal_test.rb +0 -1
  78. data/tracks/ruby/exercises/house/house_test.rb +0 -1
  79. data/tracks/ruby/exercises/isogram/.meta/generator/isogram_cases.rb +1 -1
  80. data/tracks/ruby/exercises/isogram/isogram_test.rb +1 -2
  81. data/tracks/ruby/exercises/kindergarten-garden/kindergarten_garden_test.rb +0 -1
  82. data/tracks/ruby/exercises/largest-series-product/.meta/generator/largest_series_product_cases.rb +1 -1
  83. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +1 -2
  84. data/tracks/ruby/exercises/leap/.meta/generator/leap_cases.rb +1 -1
  85. data/tracks/ruby/exercises/leap/.meta/generator/test_template.erb +1 -2
  86. data/tracks/ruby/exercises/leap/leap_test.rb +1 -2
  87. data/tracks/ruby/exercises/linked-list/linked_list_test.rb +0 -1
  88. data/tracks/ruby/exercises/list-ops/list_ops_test.rb +0 -1
  89. data/tracks/ruby/exercises/luhn/.meta/generator/luhn_cases.rb +1 -1
  90. data/tracks/ruby/exercises/luhn/luhn_test.rb +1 -2
  91. data/tracks/ruby/exercises/matrix/matrix_test.rb +0 -1
  92. data/tracks/ruby/exercises/meetup/meetup_test.rb +0 -1
  93. data/tracks/ruby/exercises/minesweeper/minesweeper_test.rb +0 -1
  94. data/tracks/ruby/exercises/nth-prime/.meta/generator/nth_prime_cases.rb +1 -1
  95. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +1 -2
  96. data/tracks/ruby/exercises/nucleotide-count/nucleotide_count_test.rb +0 -1
  97. data/tracks/ruby/exercises/ocr-numbers/.meta/generator/ocr_numbers_cases.rb +1 -1
  98. data/tracks/ruby/exercises/ocr-numbers/ocr_numbers_test.rb +1 -2
  99. data/tracks/ruby/exercises/octal/octal_test.rb +0 -1
  100. data/tracks/ruby/exercises/palindrome-products/palindrome_products_test.rb +0 -1
  101. data/tracks/ruby/exercises/pangram/.meta/generator/pangram_cases.rb +1 -1
  102. data/tracks/ruby/exercises/pangram/pangram_test.rb +1 -2
  103. data/tracks/ruby/exercises/pascals-triangle/pascals_triangle_test.rb +0 -1
  104. data/tracks/ruby/exercises/perfect-numbers/perfect_numbers_test.rb +0 -1
  105. data/tracks/ruby/exercises/phone-number/.meta/.version +1 -0
  106. data/tracks/ruby/exercises/phone-number/.meta/generator/phone_number_cases.rb +7 -0
  107. data/tracks/ruby/exercises/phone-number/example.rb +21 -37
  108. data/tracks/ruby/exercises/phone-number/phone_number_test.rb +47 -43
  109. data/tracks/ruby/exercises/pig-latin/.meta/generator/pig_latin_cases.rb +1 -1
  110. data/tracks/ruby/exercises/pig-latin/pig_latin_test.rb +1 -2
  111. data/tracks/ruby/exercises/point-mutations/point_mutations_test.rb +0 -1
  112. data/tracks/ruby/exercises/poker/poker_test.rb +0 -1
  113. data/tracks/ruby/exercises/prime-factors/prime_factors_test.rb +0 -1
  114. data/tracks/ruby/exercises/protein-translation/protein_translation_test.rb +0 -1
  115. data/tracks/ruby/exercises/proverb/proverb_test.rb +0 -1
  116. data/tracks/ruby/exercises/pythagorean-triplet/pythagorean_triplet_test.rb +0 -1
  117. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_cases.rb +1 -1
  118. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +1 -2
  119. data/tracks/ruby/exercises/rail-fence-cipher/rail_fence_cipher_test.rb +0 -1
  120. data/tracks/ruby/exercises/raindrops/.meta/generator/raindrops_cases.rb +1 -1
  121. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +1 -2
  122. data/tracks/ruby/exercises/rna-transcription/.meta/generator/rna_transcription_cases.rb +1 -1
  123. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +1 -2
  124. data/tracks/ruby/exercises/robot-name/robot_name_test.rb +0 -1
  125. data/tracks/ruby/exercises/robot-simulator/robot_simulator_test.rb +0 -1
  126. data/tracks/ruby/exercises/roman-numerals/.meta/generator/roman_numerals_cases.rb +1 -1
  127. data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +1 -2
  128. data/tracks/ruby/exercises/run-length-encoding/.meta/generator/run_length_encoding_cases.rb +5 -1
  129. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +14 -15
  130. data/tracks/ruby/exercises/saddle-points/saddle_points_test.rb +0 -1
  131. data/tracks/ruby/exercises/say/.meta/generator/say_cases.rb +1 -1
  132. data/tracks/ruby/exercises/say/say_test.rb +1 -2
  133. data/tracks/ruby/exercises/scale-generator/scale_generator_test.rb +0 -1
  134. data/tracks/ruby/exercises/scrabble-score/scrabble_score_test.rb +0 -1
  135. data/tracks/ruby/exercises/secret-handshake/secret_handshake_test.rb +0 -1
  136. data/tracks/ruby/exercises/series/series_test.rb +0 -1
  137. data/tracks/ruby/exercises/sieve/.meta/generator/sieve_cases.rb +1 -1
  138. data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -2
  139. data/tracks/ruby/exercises/simple-cipher/simple_cipher_test.rb +0 -1
  140. data/tracks/ruby/exercises/space-age/space_age_test.rb +0 -1
  141. data/tracks/ruby/exercises/strain/strain_test.rb +0 -1
  142. data/tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb +0 -1
  143. data/tracks/ruby/exercises/tournament/.meta/.version +1 -1
  144. data/tracks/ruby/exercises/tournament/.meta/generator/tournament_cases.rb +1 -1
  145. data/tracks/ruby/exercises/tournament/example.rb +4 -2
  146. data/tracks/ruby/exercises/tournament/tournament_test.rb +20 -3
  147. data/tracks/ruby/exercises/transpose/.meta/generator/transpose_cases.rb +1 -1
  148. data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
  149. data/tracks/ruby/exercises/triangle/.meta/generator/triangle_cases.rb +1 -1
  150. data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -2
  151. data/tracks/ruby/exercises/trinary/trinary_test.rb +0 -1
  152. data/tracks/ruby/exercises/twelve-days/twelve_days_test.rb +0 -1
  153. data/tracks/ruby/exercises/two-bucket/.meta/.version +1 -1
  154. data/tracks/ruby/exercises/two-bucket/.meta/generator/two_bucket_cases.rb +1 -1
  155. data/tracks/ruby/exercises/two-bucket/example.rb +1 -1
  156. data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +18 -3
  157. data/tracks/ruby/exercises/word-count/.meta/generator/word_count_cases.rb +1 -1
  158. data/tracks/ruby/exercises/word-count/word_count_test.rb +1 -2
  159. data/tracks/ruby/exercises/wordy/.meta/generator/wordy_cases.rb +1 -1
  160. data/tracks/ruby/exercises/wordy/wordy_test.rb +1 -2
  161. data/tracks/ruby/lib/generator/{exercise_cases.rb → exercise_case.rb} +0 -0
  162. data/tracks/ruby/lib/generator/exercise_case/assertion.rb +2 -1
  163. data/tracks/ruby/lib/generator/files/track_files.rb +15 -10
  164. data/tracks/ruby/lib/generator/template_values.rb +4 -2
  165. data/tracks/ruby/lib/generator/test_template.erb +1 -2
  166. data/tracks/ruby/lib/tasks/exercise.rb +9 -1
  167. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/test_template.erb +0 -1
  168. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/{example.rb → .meta/solutions/alpha.rb} +0 -0
  169. data/tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/beta_cases.rb +1 -1
  170. data/tracks/ruby/test/fixtures/xruby/exercises/beta/example.tt +0 -1
  171. data/tracks/ruby/test/fixtures/xruby/lib/generator/test_template.erb +0 -1
  172. data/tracks/ruby/test/generator/exercise_case/assertion_test.rb +6 -0
  173. data/tracks/ruby/test/generator/{exercise_cases_test.rb → exercise_case_test.rb} +0 -0
  174. data/tracks/ruby/test/generator/files/track_files_test.rb +14 -18
  175. data/tracks/ruby/test/generator/template_values_test.rb +2 -0
  176. data/tracks/ruby/test/tasks/exercise_test.rb +6 -0
  177. data/tracks/ruby/test/tasks/exercise_tests_runner_legacy_test.rb +64 -0
  178. data/tracks/ruby/test/tasks/exercise_tests_runner_test.rb +2 -2
  179. metadata +13 -6
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'etl'
5
4
 
6
- # Common test data version: ca9ed58
5
+ # Common test data version: 1.0.0 ca9ed58
7
6
  class EtlTest < Minitest::Test
8
7
  def test_a_single_letter
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'flatten_array'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
 
5
4
  require_relative 'food_chain'
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
  require 'time'
3
3
 
4
4
  class GigasecondCase < Generator::ExerciseCase
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'gigasecond'
5
4
 
6
- # Common test data version: 61e7d70
5
+ # Common test data version: 1.0.0 61e7d70
7
6
  class GigasecondTest < Minitest::Test
8
7
  def test_date_only_specification_of_time
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'grade_school'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class GrainsCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'grains'
5
4
 
6
- # Common test data version: 2e0e77e
5
+ # Common test data version: 1.0.0 2e0e77e
7
6
  class GrainsTest < Minitest::Test
8
7
  def test_1
9
8
  # skip
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class HammingCase < Generator::ExerciseCase
4
4
  def workload
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'hamming'
5
4
 
6
- # Common test data version: bb56dc7
5
+ # Common test data version: 1.0.0 bb56dc7
7
6
  class HammingTest < Minitest::Test
8
7
  def test_identical_strands
9
8
  # skip
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class HelloWorldCase < Generator::ExerciseCase
4
4
 
@@ -12,7 +12,7 @@ rescue LoadError => e
12
12
  exit 1
13
13
  end
14
14
 
15
- # Common test data version: <%= abbreviated_commit_hash %>
15
+ # Common test data version: <%= canonical_data_version %> <%= abbreviated_commit_hash %>
16
16
  class HelloWorldTest < Minitest::Test
17
17
  <% test_cases.each do |test_case| %>
18
18
  def <%= test_case.name %>
@@ -12,7 +12,7 @@ rescue LoadError => e
12
12
  exit 1
13
13
  end
14
14
 
15
- # Common test data version: 4b9ae53
15
+ # Common test data version: 1.0.0 4b9ae53
16
16
  class HelloWorldTest < Minitest::Test
17
17
  def test_say_hi
18
18
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'hexadecimal'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'house'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class IsogramCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'isogram'
5
4
 
6
- # Common test data version: 857c40d
5
+ # Common test data version: 1.1.0 857c40d
7
6
  class IsogramTest < Minitest::Test
8
7
  def test_empty_string
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'kindergarten_garden'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class LargestSeriesProductCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'largest_series_product'
5
4
 
6
- # Common test data version: e79b832
5
+ # Common test data version: 1.0.0 e79b832
7
6
  class LargestSeriesProductTest < Minitest::Test
8
7
  def test_finds_the_largest_product_if_span_equals_length
9
8
  # skip
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class LeapCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'leap'
5
4
 
6
- # Common test data version: <%= abbreviated_commit_hash %>
5
+ # Common test data version: <%= canonical_data_version %> <%= abbreviated_commit_hash %>
7
6
  class Date
8
7
  def leap?
9
8
  raise RuntimeError, "Implement this yourself instead of using Ruby's implementation."
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'leap'
5
4
 
6
- # Common test data version: cc65ebe
5
+ # Common test data version: 1.0.0 cc65ebe
7
6
  class Date
8
7
  def leap?
9
8
  raise RuntimeError, "Implement this yourself instead of using Ruby's implementation."
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'linked_list'
5
4
 
@@ -1,4 +1,3 @@
1
- gem 'minitest', '>= 5.0.0'
2
1
  require 'minitest/autorun'
3
2
  require_relative 'list_ops'
4
3
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class LuhnCase < Generator::ExerciseCase
4
4
  def workload
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'luhn'
5
4
 
6
- # Common test data version: c826372
5
+ # Common test data version: 1.0.0 c826372
7
6
  class LuhnTest < Minitest::Test
8
7
  def test_single_digit_strings_can_not_be_valid
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'matrix'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require 'date'
5
4
  require_relative 'meetup'
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'minesweeper'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class NthPrimeCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'nth_prime'
5
4
 
6
- # Common test data version: 016d65b
5
+ # Common test data version: 1.0.0 016d65b
7
6
  class NthPrimeTest < Minitest::Test
8
7
  def test_first_prime
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'nucleotide_count'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class OcrNumbersCase < Generator::ExerciseCase
4
4
  def workload
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'ocr_numbers'
5
4
 
6
- # Common test data version: 80782b6
5
+ # Common test data version: 1.0.0 80782b6
7
6
  class OcrNumbersTest < Minitest::Test
8
7
  def test_recognizes_0
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'octal'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'palindrome_products'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class PangramCase < Generator::ExerciseCase
4
4
  def workload
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'pangram'
5
4
 
6
- # Common test data version: f375051
5
+ # Common test data version: 1.0.0 f375051
7
6
  class PangramTest < Minitest::Test
8
7
  def test_sentence_empty
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'pascals_triangle'
5
4
 
@@ -1,4 +1,3 @@
1
- gem 'minitest', '>= 5.0.0'
2
1
  require 'minitest/autorun'
3
2
  require_relative 'perfect_numbers'
4
3
 
@@ -0,0 +1,7 @@
1
+ require 'generator/exercise_case'
2
+
3
+ class PhoneNumberCase < Generator::ExerciseCase
4
+ def workload
5
+ assert_equal { "PhoneNumber.clean(#{phrase.inspect})" }
6
+ end
7
+ end
@@ -1,45 +1,29 @@
1
- class PhoneNumber
2
- attr_reader :number
3
- def initialize(number)
4
- @number = clean(number)
5
- end
6
-
7
- def area_code
8
- number[0..2]
9
- end
10
-
11
- # technically, the central office (exchange) code
12
- def exchange_code
13
- number[3..5]
14
- end
1
+ module PhoneNumber
2
+ NANP_PROTOCOL = %r{
3
+ \A
4
+ (?<international_code>1?)
5
+ (?<area_code>[2-9]{1}[0-9]{2})
6
+ (?<exchange_code>[2-9]{1}[0-9]{2})
7
+ (?<subscriber>[0-9]{4})
8
+ \z
9
+ }x
15
10
 
16
- def subscriber_number
17
- number[6..9]
11
+ def self.clean(number)
12
+ sanitized = digits_only(number)
13
+ sections = nanp_parse(sanitized)
14
+ format '%<area_code>s%<exchange_code>s%<subscriber>s', sections if sections
18
15
  end
19
16
 
20
- def to_s
21
- "(#{area_code}) #{exchange_code}-#{subscriber_number}"
17
+ def self.digits_only(number)
18
+ number.gsub(/\D/, '')
22
19
  end
23
20
 
24
- private
25
-
26
- def clean(number)
27
- return '0' * 10 if number.match(/[a-zA-Z]/)
28
- number = number.gsub(/[^0-9]/, '')
29
- normalize(number)
30
- end
31
-
32
- def normalize(number)
33
- if valid?(number)
34
- number[/(\d{10})\z/, 1]
35
- else
36
- '0' * 10
37
- end
21
+ def self.nanp_parse(number)
22
+ matches = number.match(NANP_PROTOCOL)
23
+ matches.names.map(&:to_sym).zip(matches.captures).to_h if matches
38
24
  end
25
+ end
39
26
 
40
- def valid?(number)
41
- return true if number.length == 10
42
- return true if number.length == 11 && number.start_with?('1')
43
- false
44
- end
27
+ module BookKeeping
28
+ VERSION = 1
45
29
  end
@@ -1,89 +1,93 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'phone_number'
5
4
 
5
+ # Common test data version: 51d2475
6
6
  class PhoneNumberTest < Minitest::Test
7
- def test_cleans_number
8
- number = PhoneNumber.new('(123) 456-7890').number
9
- assert_equal '1234567890', number
7
+ def test_cleans_the_number
8
+ # skip
9
+ assert_equal "2234567890", PhoneNumber.clean("(223) 456-7890")
10
10
  end
11
11
 
12
- def test_cleans_a_different_number
12
+ def test_cleans_numbers_with_dots
13
13
  skip
14
- number = PhoneNumber.new('(987) 654-3210').number
15
- assert_equal '9876543210', number
14
+ assert_equal "2234567890", PhoneNumber.clean("223.456.7890")
16
15
  end
17
16
 
18
- def test_cleans_number_with_dots
17
+ def test_cleans_numbers_with_multiple_spaces
19
18
  skip
20
- number = PhoneNumber.new('456.123.7890').number
21
- assert_equal '4561237890', number
19
+ assert_equal "2234567890", PhoneNumber.clean("223 456 7890 ")
22
20
  end
23
21
 
24
- def test_invalid_with_letters_in_place_of_numbers
22
+ def test_invalid_when_9_digits
25
23
  skip
26
- number = PhoneNumber.new('123-abc-1234').number
27
- assert_equal '0000000000', number
24
+ assert_nil PhoneNumber.clean("123456789")
28
25
  end
29
26
 
30
- def test_invalid_when_9_digits
27
+ def test_invalid_when_11_digits_does_not_start_with_a_1
31
28
  skip
32
- number = PhoneNumber.new('123456789').number
33
- assert_equal '0000000000', number
29
+ assert_nil PhoneNumber.clean("22234567890")
34
30
  end
35
31
 
36
- def test_valid_when_11_digits_and_first_is_1
32
+ def test_valid_when_11_digits_and_starting_with_1
37
33
  skip
38
- number = PhoneNumber.new('19876543210').number
39
- assert_equal '9876543210', number
34
+ assert_equal "2234567890", PhoneNumber.clean("12234567890")
40
35
  end
41
36
 
42
- def test_valid_when_10_digits_and_area_code_starts_with_1
37
+ def test_valid_when_11_digits_and_starting_with_1_even_with_punctuation
43
38
  skip
44
- number = PhoneNumber.new('1234567890').number
45
- assert_equal '1234567890', number
39
+ assert_equal "2234567890", PhoneNumber.clean("+1 (223) 456-7890")
46
40
  end
47
41
 
48
- def test_invalid_when_11_digits
42
+ def test_invalid_when_more_than_11_digits
49
43
  skip
50
- number = PhoneNumber.new('21234567890').number
51
- assert_equal '0000000000', number
44
+ assert_nil PhoneNumber.clean("321234567890")
52
45
  end
53
46
 
54
- def test_invalid_when_12_digits_and_first_is_1
47
+ def test_invalid_with_letters
55
48
  skip
56
- number = PhoneNumber.new('112345678901').number
57
- assert_equal '0000000000', number
49
+ assert_nil PhoneNumber.clean("123-abc-7890")
58
50
  end
59
51
 
60
- def test_invalid_when_10_digits_with_extra_letters
52
+ def test_invalid_with_punctuations
61
53
  skip
62
- number = PhoneNumber.new('1a2a3a4a5a6a7a8a9a0a').number
63
- assert_equal '0000000000', number
54
+ assert_nil PhoneNumber.clean("123-@:!-7890")
64
55
  end
65
56
 
66
- def test_area_code
57
+ def test_invalid_with_right_number_of_digits_but_letters_mixed_in
67
58
  skip
68
- number = PhoneNumber.new('1234567890')
69
- assert_equal '123', number.area_code
59
+ assert_nil PhoneNumber.clean("1a2b3c4d5e6f7g8h9i0j")
70
60
  end
71
61
 
72
- def test_different_area_code
62
+ def test_invalid_if_area_code_does_not_start_with_2_9
73
63
  skip
74
- number = PhoneNumber.new('9876543210')
75
- assert_equal '987', number.area_code
64
+ assert_nil PhoneNumber.clean("(123) 456-7890")
76
65
  end
77
66
 
78
- def test_pretty_print
67
+ def test_invalid_if_exchange_code_does_not_start_with_2_9
79
68
  skip
80
- number = PhoneNumber.new('5551234567')
81
- assert_equal '(555) 123-4567', number.to_s
69
+ assert_nil PhoneNumber.clean("(223) 056-7890")
82
70
  end
83
71
 
84
- def test_pretty_print_with_full_us_phone_number
72
+ # Problems in exercism evolve over time, as we find better ways to ask
73
+ # questions.
74
+ # The version number refers to the version of the problem you solved,
75
+ # not your solution.
76
+ #
77
+ # Define a constant named VERSION inside of the top level BookKeeping
78
+ # module, which may be placed near the end of your file.
79
+ #
80
+ # In your file, it will look like this:
81
+ #
82
+ # module BookKeeping
83
+ # VERSION = 1 # Where the version number matches the one in the test.
84
+ # end
85
+ #
86
+ # If you are curious, read more about constants on RubyDoc:
87
+ # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
88
+
89
+ def test_bookkeeping
85
90
  skip
86
- number = PhoneNumber.new('11234567890')
87
- assert_equal '(123) 456-7890', number.to_s
91
+ assert_equal 1, BookKeeping::VERSION
88
92
  end
89
93
  end