trackler 2.1.0.1 → 2.1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/elixir/config.json +17 -0
  4. data/tracks/elixir/exercises/matrix/example.exs +63 -0
  5. data/tracks/elixir/exercises/matrix/matrix.exs +48 -0
  6. data/tracks/elixir/exercises/matrix/matrix_test.exs +58 -0
  7. data/tracks/elixir/exercises/twelve-days/example.exs +53 -0
  8. data/tracks/elixir/exercises/twelve-days/twelve_days.exs +25 -0
  9. data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +86 -0
  10. data/tracks/go/exercises/change/.meta/gen.go +1 -3
  11. data/tracks/go/exercises/change/cases_test.go +1 -0
  12. data/tracks/go/exercises/forth/example.go +1 -1
  13. data/tracks/go/exercises/raindrops/.meta/gen.go +1 -3
  14. data/tracks/go/exercises/raindrops/cases_test.go +5 -1
  15. data/tracks/go/exercises/raindrops/example.go +1 -1
  16. data/tracks/go/exercises/raindrops/raindrops.go +1 -1
  17. data/tracks/go/exercises/raindrops/raindrops_test.go +1 -1
  18. data/tracks/java/config.json +5 -5
  19. data/tracks/java/exercises/isogram/src/example/java/IsogramChecker.java +23 -27
  20. data/tracks/java/exercises/isogram/src/test/java/IsogramCheckerTest.java +77 -0
  21. data/tracks/javascript/config.json +9 -0
  22. data/tracks/javascript/exercises/proverb/example.js +36 -0
  23. data/tracks/javascript/exercises/proverb/proverb.spec.js +78 -0
  24. data/tracks/ruby/README.md +0 -33
  25. data/tracks/ruby/exercises/acronym/.meta/.version +1 -1
  26. data/tracks/ruby/exercises/acronym/acronym_test.rb +14 -9
  27. data/tracks/ruby/exercises/acronym/example.rb +1 -1
  28. data/tracks/ruby/exercises/acronym/example.tt +7 -4
  29. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -1
  30. data/tracks/ruby/exercises/all-your-base/example.tt +4 -3
  31. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +2 -1
  32. data/tracks/ruby/exercises/alphametics/example.tt +2 -1
  33. data/tracks/ruby/exercises/anagram/anagram_test.rb +35 -20
  34. data/tracks/ruby/exercises/anagram/example.rb +1 -1
  35. data/tracks/ruby/exercises/anagram/example.tt +5 -2
  36. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -0
  37. data/tracks/ruby/exercises/beer-song/example.tt +6 -4
  38. data/tracks/ruby/exercises/binary/binary_test.rb +3 -2
  39. data/tracks/ruby/exercises/binary/example.tt +5 -2
  40. data/tracks/ruby/exercises/bowling/bowling_test.rb +39 -40
  41. data/tracks/ruby/exercises/bowling/example.tt +2 -2
  42. data/tracks/ruby/exercises/bracket-push/.meta/.version +1 -1
  43. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +7 -3
  44. data/tracks/ruby/exercises/bracket-push/example.rb +1 -1
  45. data/tracks/ruby/exercises/bracket-push/example.tt +5 -2
  46. data/tracks/ruby/exercises/clock/clock_test.rb +40 -41
  47. data/tracks/ruby/exercises/clock/example.tt +5 -2
  48. data/tracks/ruby/exercises/connect/.meta/.version +1 -1
  49. data/tracks/ruby/exercises/connect/connect_test.rb +20 -3
  50. data/tracks/ruby/exercises/connect/example.rb +1 -1
  51. data/tracks/ruby/exercises/connect/example.tt +3 -1
  52. data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
  53. data/tracks/ruby/exercises/custom-set/example.tt +5 -2
  54. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +6 -5
  55. data/tracks/ruby/exercises/difference-of-squares/example.tt +8 -4
  56. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -1
  57. data/tracks/ruby/exercises/dominoes/example.tt +1 -1
  58. data/tracks/ruby/exercises/gigasecond/.meta/.version +1 -1
  59. data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
  60. data/tracks/ruby/exercises/gigasecond/example.tt +7 -5
  61. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +11 -16
  62. data/tracks/ruby/exercises/grains/example.tt +5 -3
  63. data/tracks/ruby/exercises/grains/grains_test.rb +2 -1
  64. data/tracks/ruby/exercises/hello-world/example.tt +1 -1
  65. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  66. data/tracks/ruby/exercises/isogram/.meta/.version +1 -1
  67. data/tracks/ruby/exercises/isogram/example.rb +1 -1
  68. data/tracks/ruby/exercises/isogram/example.tt +6 -4
  69. data/tracks/ruby/exercises/isogram/isogram_test.rb +18 -10
  70. data/tracks/ruby/exercises/largest-series-product/.meta/.version +1 -1
  71. data/tracks/ruby/exercises/largest-series-product/example.rb +1 -1
  72. data/tracks/ruby/exercises/largest-series-product/example.tt +7 -5
  73. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +11 -21
  74. data/tracks/ruby/exercises/leap/.meta/.version +1 -1
  75. data/tracks/ruby/exercises/leap/example.rb +1 -1
  76. data/tracks/ruby/exercises/leap/example.tt +6 -4
  77. data/tracks/ruby/exercises/leap/leap_test.rb +11 -25
  78. data/tracks/ruby/exercises/nth-prime/example.tt +7 -5
  79. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +2 -3
  80. data/tracks/ruby/exercises/pangram/example.tt +5 -3
  81. data/tracks/ruby/exercises/pangram/pangram_test.rb +2 -1
  82. data/tracks/ruby/exercises/queen-attack/example.tt +2 -2
  83. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +14 -15
  84. data/tracks/ruby/exercises/raindrops/example.tt +7 -4
  85. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +38 -38
  86. data/tracks/ruby/exercises/rna-transcription/example.tt +6 -3
  87. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -5
  88. data/tracks/ruby/exercises/roman-numerals/example.tt +7 -4
  89. data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +5 -5
  90. data/tracks/ruby/exercises/run-length-encoding/.meta/.version +1 -1
  91. data/tracks/ruby/exercises/run-length-encoding/example.rb +1 -1
  92. data/tracks/ruby/exercises/run-length-encoding/example.tt +6 -3
  93. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +70 -28
  94. data/tracks/ruby/exercises/say/example.tt +7 -5
  95. data/tracks/ruby/exercises/say/say_test.rb +3 -2
  96. data/tracks/ruby/exercises/sieve/example.tt +4 -1
  97. data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -3
  98. data/tracks/ruby/exercises/tournament/example.tt +4 -1
  99. data/tracks/ruby/exercises/tournament/tournament_test.rb +1 -2
  100. data/tracks/ruby/exercises/transpose/example.tt +5 -2
  101. data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
  102. data/tracks/ruby/exercises/triangle/example.tt +5 -3
  103. data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -3
  104. data/tracks/ruby/exercises/two-bucket/example.tt +7 -4
  105. data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +9 -9
  106. data/tracks/ruby/exercises/word-count/example.tt +6 -4
  107. data/tracks/ruby/exercises/word-count/word_count_test.rb +2 -3
  108. data/tracks/ruby/exercises/wordy/example.tt +5 -3
  109. data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -1
  110. data/tracks/ruby/lib/acronym_cases.rb +3 -15
  111. data/tracks/ruby/lib/all_your_base_cases.rb +22 -54
  112. data/tracks/ruby/lib/alphametics_cases.rb +12 -27
  113. data/tracks/ruby/lib/anagram_cases.rb +7 -15
  114. data/tracks/ruby/lib/beer_song_cases.rb +7 -24
  115. data/tracks/ruby/lib/binary_cases.rb +5 -18
  116. data/tracks/ruby/lib/bowling_cases.rb +24 -24
  117. data/tracks/ruby/lib/bracket_push_cases.rb +6 -21
  118. data/tracks/ruby/lib/clock_cases.rb +6 -25
  119. data/tracks/ruby/lib/connect_cases.rb +2 -20
  120. data/tracks/ruby/lib/custom_set_cases.rb +14 -35
  121. data/tracks/ruby/lib/difference_of_squares_cases.rb +5 -26
  122. data/tracks/ruby/lib/dominoes_cases.rb +2 -11
  123. data/tracks/ruby/lib/generator/case_values.rb +25 -0
  124. data/tracks/ruby/lib/generator/exercise_cases.rb +11 -0
  125. data/tracks/ruby/lib/generator/files/track_files.rb +7 -2
  126. data/tracks/ruby/lib/generator/template_values.rb +12 -7
  127. data/tracks/ruby/lib/gigasecond_cases.rb +4 -18
  128. data/tracks/ruby/lib/grains_cases.rb +11 -38
  129. data/tracks/ruby/lib/hamming_cases.rb +0 -6
  130. data/tracks/ruby/lib/hello_world_cases.rb +2 -14
  131. data/tracks/ruby/lib/isogram_cases.rb +8 -16
  132. data/tracks/ruby/lib/largest_series_product_cases.rb +10 -16
  133. data/tracks/ruby/lib/leap_cases.rb +3 -16
  134. data/tracks/ruby/lib/luhn_cases.rb +0 -6
  135. data/tracks/ruby/lib/nth_prime_cases.rb +11 -13
  136. data/tracks/ruby/lib/ocr_numbers_cases.rb +0 -5
  137. data/tracks/ruby/lib/pangram_cases.rb +2 -19
  138. data/tracks/ruby/lib/pig_latin_cases.rb +0 -5
  139. data/tracks/ruby/lib/queen_attack_cases.rb +14 -37
  140. data/tracks/ruby/lib/raindrops_cases.rb +3 -15
  141. data/tracks/ruby/lib/rna_transcription_cases.rb +2 -14
  142. data/tracks/ruby/lib/roman_numerals_cases.rb +7 -10
  143. data/tracks/ruby/lib/run_length_encoding_cases.rb +4 -25
  144. data/tracks/ruby/lib/say_cases.rb +3 -14
  145. data/tracks/ruby/lib/sieve_cases.rb +1 -15
  146. data/tracks/ruby/lib/tournament_cases.rb +1 -14
  147. data/tracks/ruby/lib/transpose_cases.rb +1 -14
  148. data/tracks/ruby/lib/triangle_cases.rb +8 -27
  149. data/tracks/ruby/lib/two_bucket_cases.rb +7 -17
  150. data/tracks/ruby/lib/word_count_cases.rb +1 -13
  151. data/tracks/ruby/lib/wordy_cases.rb +4 -27
  152. data/tracks/ruby/test/fixtures/metadata/exercises/complex/canonical-data.json +45 -0
  153. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +7 -0
  154. data/tracks/ruby/test/generator/case_values_test.rb +30 -0
  155. data/tracks/ruby/test/generator/files/track_files_test.rb +2 -3
  156. data/tracks/ruby/test/generator/template_values_test.rb +44 -3
  157. data/tracks/ruby/test/wordy_cases_test.rb +4 -65
  158. metadata +14 -4
  159. data/tracks/java/exercises/isogram/src/test/java/IsogramTest.java +0 -80
  160. data/tracks/ruby/test/grains_cases_test.rb +0 -103
@@ -1,53 +1,26 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class GrainsCase < OpenStruct
4
- def test_name
5
- 'test_%s' % description.downcase.tr_s(' ', '_')
6
- end
3
+ class GrainsCase < ExerciseCase
7
4
 
8
5
  def workload
9
- fail NotImplementedError
10
- end
11
-
12
- def skipped
13
- index.zero? ? '# skip' : 'skip'
6
+ send("#{property}_workload")
14
7
  end
15
8
 
16
9
  private
17
10
 
18
- def underscore_format(number)
19
- number.to_s.reverse.gsub(/...(?=.)/, '\&_').reverse
11
+ def square_workload
12
+ if raises_error?
13
+ "assert_raises(ArgumentError) { Grains.square(#{input}) }"
14
+ else
15
+ "assert_equal #{underscore_format(expected)}, Grains.square(#{input})"
16
+ end
20
17
  end
21
- end
22
18
 
23
- class GrainsCase::SquareMethod < GrainsCase
24
- def workload
25
- return error_assertion if expected < 0
26
-
27
- "assert_equal #{underscore_format(expected)}, Grains.square(#{input})"
28
- end
29
-
30
- private
31
-
32
- def error_assertion
33
- "assert_raises(ArgumentError) { Grains.square(#{input}) }"
34
- end
35
- end
36
-
37
- class GrainsCase::TotalMethod < GrainsCase
38
- def workload
19
+ def total_workload
39
20
  "assert_equal #{underscore_format(expected)}, Grains.total"
40
21
  end
41
- end
42
-
43
- GrainsCases = proc do |data|
44
- data = JSON.parse(data)
45
22
 
46
- cases = data['square']['cases'].map.with_index do |row, i|
47
- GrainsCase::SquareMethod.new(row.merge('index' => i))
23
+ def underscore_format(number)
24
+ number.to_s.reverse.gsub(/...(?=.)/, '\&_').reverse
48
25
  end
49
-
50
- cases << GrainsCase::TotalMethod.new(
51
- data['total'].merge('index' => cases.size)
52
- )
53
26
  end
@@ -13,9 +13,3 @@ class HammingCase < ExerciseCase
13
13
  "Hamming.compute('#{strand1}', '#{strand2}')"
14
14
  end
15
15
  end
16
-
17
- HammingCases = proc do |data|
18
- JSON.parse(data)['cases'].map.with_index do |row, i|
19
- HammingCase.new(row.merge('index' => i))
20
- end
21
- end
@@ -1,21 +1,9 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class HelloWorldCase < OpenStruct
4
- def test_name
5
- 'test_%s' % property.gsub(/[ -]/, '_')
6
- end
3
+ class HelloWorldCase < ExerciseCase
7
4
 
8
5
  def workload
9
- "assert_equal #{expected.inspect}, HelloWorld.hello"
6
+ assert_equal { "HelloWorld.hello" }
10
7
  end
11
8
 
12
- def skipped
13
- index.zero? ? '# skip' : 'skip'
14
- end
15
- end
16
-
17
- HelloWorldCases = proc do |data|
18
- JSON.parse(data)['cases'].map.with_index do |row, i|
19
- HelloWorldCase.new(row.merge('index' => i))
20
- end
21
9
  end
@@ -1,22 +1,14 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class IsogramCase < OpenStruct
3
+ class IsogramCase < ExerciseCase
4
4
 
5
- def name
6
- format('test_%s', description.downcase.gsub(/[ -]/, '_'))
5
+ def workload
6
+ indent_lines(
7
+ [
8
+ "string = #{input.inspect}",
9
+ "#{assert} Isogram.is_isogram?(string)"
10
+ ], 4
11
+ )
7
12
  end
8
13
 
9
- def assertion
10
- expected ? 'assert' : 'refute'
11
- end
12
-
13
- def skip
14
- index.zero? ? '# skip' : 'skip'
15
- end
16
- end
17
-
18
- IsogramCases = proc do |data|
19
- JSON.parse(data)['cases'].map.with_index do |row, i|
20
- IsogramCase.new(row.merge('index' => i))
21
- end
22
14
  end
@@ -1,25 +1,19 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class LargestSeriesProductCase < OpenStruct
4
- def name
5
- 'test_%s' % description.tr('()', '').tr(' -', '_').downcase
6
- end
3
+ class LargestSeriesProductCase < ExerciseCase
7
4
 
8
- def do
9
- "Series.new('#{digits}').largest_product(#{span})"
5
+ def workload
6
+ if raises_error?
7
+ assert_raises(ArgumentError) { test_case }
8
+ else
9
+ assert_equal { test_case }
10
+ end
10
11
  end
11
12
 
12
- def raises_error?
13
- expected.to_i == -1
14
- end
13
+ private
15
14
 
16
- def skipped?
17
- index > 0
15
+ def test_case
16
+ "Series.new('#{digits}').largest_product(#{span})"
18
17
  end
19
- end
20
18
 
21
- LargestSeriesProductCases = proc do |data|
22
- JSON.parse(data)['cases'].map.with_index do |row, i|
23
- LargestSeriesProductCase.new(row.merge('index' => i))
24
- end
25
19
  end
@@ -1,25 +1,12 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class LeapCase < OpenStruct
4
- def name
5
- 'test_%s' % description.downcase.gsub(/[ -]/, '_')
6
- end
7
-
8
- def do
9
- "Year.leap?(#{input})"
10
- end
3
+ class LeapCase < ExerciseCase
11
4
 
12
- def skip
13
- index.zero? ? '# skip' : 'skip'
5
+ def workload
6
+ "#{assert} Year.leap?(#{input.inspect})"
14
7
  end
15
8
 
16
9
  def failure_message
17
10
  "Expected '#{expected}', #{input} is #{expected ? '' : 'not '}a leap year."
18
11
  end
19
12
  end
20
-
21
- LeapCases = proc do |data|
22
- JSON.parse(data)['cases'].map.with_index do |row, i|
23
- LeapCase.new(row.merge('index' => i))
24
- end
25
- end
@@ -3,9 +3,3 @@ class LuhnCase < ExerciseCase
3
3
  "#{assert} Luhn.valid?(#{input.inspect})"
4
4
  end
5
5
  end
6
-
7
- LuhnCases = proc do |data|
8
- JSON.parse(data)['cases'].map.with_index do |row, i|
9
- LuhnCase.new(row.merge('index' => i))
10
- end
11
- end
@@ -1,11 +1,18 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class NthPrimeCase < OpenStruct
4
- def name
5
- 'test_%s' % description.downcase.gsub(/[ -]/, '_')
3
+ class NthPrimeCase < ExerciseCase
4
+
5
+ def workload
6
+ if raises_error?
7
+ assert_raises(ArgumentError) { test_case }
8
+ else
9
+ assert_equal { test_case }
10
+ end
6
11
  end
7
12
 
8
- def actual
13
+ private
14
+
15
+ def test_case
9
16
  "Prime.nth(#{input})"
10
17
  end
11
18
 
@@ -13,13 +20,4 @@ class NthPrimeCase < OpenStruct
13
20
  expected == false
14
21
  end
15
22
 
16
- def skipped?
17
- index > 0
18
- end
19
- end
20
-
21
- NthPrimeCases = proc do |data|
22
- JSON.parse(data)['cases'].map.with_index do |row, i|
23
- NthPrimeCase.new(row.merge('index' => i))
24
- end
25
23
  end
@@ -13,8 +13,3 @@ class OcrNumbersCase < ExerciseCase
13
13
  %Q(OcrNumbers.convert(#{(input.join("\n")).inspect}))
14
14
  end
15
15
  end
16
-
17
- OcrNumbersCases = proc do |data|
18
- JSON.parse(data)['cases'].flat_map {|section| section['cases'] }.
19
- map.with_index {|test, index| OcrNumbersCase.new(test.merge('index' => index)) }
20
- end
@@ -1,15 +1,11 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class PangramCase < OpenStruct
4
- def name
5
- 'test_%s' % description.downcase.tr_s(" -'", '_').sub(/_$/, '')
6
- end
7
-
3
+ class PangramCase < ExerciseCase
8
4
  def workload
9
5
  [
10
6
  "phrase = '#{input}'",
11
7
  " result = Pangram.pangram?(phrase)",
12
- " #{assertion} result, \"#{message}\""
8
+ " #{assert} result, \"#{message}\""
13
9
  ].join("\n")
14
10
  end
15
11
 
@@ -21,17 +17,4 @@ class PangramCase < OpenStruct
21
17
  expected ? 'IS' : 'is NOT'
22
18
  end
23
19
 
24
- def assertion
25
- expected ? 'assert' : 'refute'
26
- end
27
-
28
- def skipped?
29
- index.zero? ? '# skip' : 'skip'
30
- end
31
- end
32
-
33
- PangramCases = proc do |data|
34
- JSON.parse(data)['cases'].map.with_index do |row, i|
35
- PangramCase.new(row.merge('index' => i))
36
- end
37
20
  end
@@ -3,8 +3,3 @@ class PigLatinCase < ExerciseCase
3
3
  assert_equal { "PigLatin.translate(#{input.inspect})" }
4
4
  end
5
5
  end
6
-
7
- PigLatinCases = proc do |data|
8
- JSON.parse(data)['cases'].flat_map {|section| section['cases'] }. # extract all the cases into a single array
9
- map.with_index { |test, index| PigLatinCase.new(test.merge('index' => index)) }
10
- end
@@ -1,56 +1,33 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class QueenCase < OpenStruct
4
- def test_name
5
- "test_#{description.gsub(/[ ]/, '_')}"
6
- end
3
+ class QueenAttackCase < ExerciseCase
7
4
 
8
- def skipped
9
- index.zero? ? '# skip' : 'skip'
5
+ def workload
6
+ property == 'create' ? create_workload : attack_workload
10
7
  end
11
8
 
12
- def parse_position queen
13
- queen['position'].delete('() ').split(',').map{|i| i.to_i}
14
- end
15
- end
9
+ private
16
10
 
17
- class QueenAttackCase < QueenCase
18
- def workload
19
- """queens = Queens.new white: #{parse_position white_queen}, black: #{parse_position black_queen}
20
- #{assertion} queens.attack?"""
11
+ def attack_workload
12
+ """queens = Queens.new(white: #{parse_position white_queen}, black: #{parse_position black_queen})
13
+ #{assert} queens.attack?"""
21
14
  end
22
15
 
23
- def assertion
24
- expected ? 'assert' : 'refute'
16
+ def parse_position queen
17
+ queen['position'].delete('() ').split(',').map{|i| i.to_i}
25
18
  end
26
- end
27
19
 
28
- class QueenCreateCase < QueenCase
29
- def workload
30
- expected == -1 ? exception : input
20
+ def create_workload
21
+ raises_error? ? exception : "#{assert} #{test_case}"
31
22
  end
32
23
 
33
- def input
34
- "Queens.new white: #{parse_position queen}"
24
+ def test_case
25
+ "Queens.new(white: #{parse_position queen})"
35
26
  end
36
27
 
37
28
  def exception
38
29
  """assert_raises ArgumentError do
39
- #{input}
30
+ #{test_case}
40
31
  end"""
41
32
  end
42
33
  end
43
-
44
- TYPES = [
45
- ['create', QueenCreateCase],
46
- ['can_attack', QueenAttackCase]
47
- ]
48
-
49
- QueenAttackCases = proc do |data|
50
- json = JSON.parse data
51
- TYPES.flat_map.with_index do |(type, caseClass), i|
52
- json[type]['cases'].map.with_index do |row, j|
53
- caseClass.new row.merge('index' => i+j)
54
- end
55
- end
56
- end
@@ -1,21 +1,9 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class RaindropsCase < OpenStruct
4
- def name
5
- 'test_%s' % number
6
- end
3
+ class RaindropsCase < ExerciseCase
7
4
 
8
- def do
9
- "Raindrops.convert(#{number})"
5
+ def workload
6
+ assert_equal { "Raindrops.convert(#{number})" }
10
7
  end
11
8
 
12
- def skipped?
13
- index > 0
14
- end
15
- end
16
-
17
- RaindropsCases = proc do |data|
18
- JSON.parse(data)['cases'].map.with_index do |row, i|
19
- RaindropsCase.new(row.merge('index' => i))
20
- end
21
9
  end
@@ -1,21 +1,9 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class RnaTranscriptionCase < OpenStruct
4
- def test_name
5
- 'test_%s' % description.gsub(/[ -]/, '_')
6
- end
3
+ class RnaTranscriptionCase < ExerciseCase
7
4
 
8
5
  def workload
9
- "Complement.of_dna('#{dna}')"
6
+ "assert_equal '#{expected}', Complement.of_dna('#{dna}')"
10
7
  end
11
8
 
12
- def skipped
13
- index.zero? ? '# skip' : 'skip'
14
- end
15
- end
16
-
17
- RnaTranscriptionCases = proc do |data|
18
- JSON.parse(data)['cases'].map.with_index do |row, i|
19
- RnaTranscriptionCase.new(row.merge('index' => i))
20
- end
21
9
  end
@@ -1,21 +1,18 @@
1
1
  require 'exercise_cases'
2
2
 
3
- class RomanNumeralsCase < OpenStruct
3
+ class RomanNumeralsCase < ExerciseCase
4
4
  def name
5
5
  'test_%s' % number.to_s
6
6
  end
7
7
 
8
- def do
9
- '%s.to_roman' % number.to_s
8
+ def workload
9
+ "assert_equal '#{expected}', #{actual}"
10
10
  end
11
11
 
12
- def skipped?
13
- index > 0
14
- end
15
- end
12
+ private
16
13
 
17
- RomanNumeralsCases = proc do |data|
18
- JSON.parse(data)['cases'].map.with_index do |row, i|
19
- RomanNumeralsCase.new(row.merge('index' => i))
14
+ def actual
15
+ '%s.to_roman' % number.to_s
20
16
  end
17
+
21
18
  end