trackler 2.1.0.2 → 2.1.0.3

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/phone-number/canonical-data.json +28 -10
  3. data/common/exercises/phone-number/description.md +19 -13
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/go/exercises/bob/.meta/gen.go +1 -3
  6. data/tracks/go/exercises/bob/bob.go +1 -1
  7. data/tracks/go/exercises/bob/bob_test.go +1 -1
  8. data/tracks/go/exercises/bob/cases_test.go +8 -12
  9. data/tracks/go/exercises/bob/example.go +1 -1
  10. data/tracks/go/exercises/largest-series-product/.meta/gen.go +1 -3
  11. data/tracks/go/exercises/largest-series-product/cases_test.go +3 -4
  12. data/tracks/go/exercises/largest-series-product/example.go +1 -1
  13. data/tracks/go/exercises/largest-series-product/largest_series_product_test.go +1 -1
  14. data/tracks/java/exercises/accumulate/src/test/java/AccumulateTest.java +4 -4
  15. data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +7 -7
  16. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +19 -19
  17. data/tracks/java/exercises/allergies/src/test/java/AllergiesTest.java +18 -18
  18. data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +15 -15
  19. data/tracks/lisp/docs/INSTALLATION.md +7 -13
  20. data/tracks/python/exercises/bracket-push/bracket_push_test.py +4 -1
  21. data/tracks/python/exercises/isogram/isogram_test.py +5 -1
  22. data/tracks/ruby/README.md +14 -40
  23. data/tracks/ruby/exercises/binary/binary_test.rb +0 -1
  24. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +1 -1
  25. data/tracks/ruby/exercises/grains/grains_test.rb +2 -0
  26. data/tracks/ruby/exercises/isogram/isogram_test.rb +0 -1
  27. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +2 -1
  28. data/tracks/ruby/exercises/luhn/luhn_test.rb +2 -0
  29. data/tracks/ruby/exercises/pangram/pangram_test.rb +0 -1
  30. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +1 -1
  31. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +1 -1
  32. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +0 -1
  33. data/tracks/ruby/exercises/say/say_test.rb +2 -0
  34. data/tracks/ruby/exercises/word-count/word_count_test.rb +1 -1
  35. data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -0
  36. data/tracks/ruby/lib/acronym_cases.rb +1 -1
  37. data/tracks/ruby/lib/all_your_base_cases.rb +1 -1
  38. data/tracks/ruby/lib/alphametics_cases.rb +1 -1
  39. data/tracks/ruby/lib/anagram_cases.rb +1 -1
  40. data/tracks/ruby/lib/beer_song_cases.rb +1 -1
  41. data/tracks/ruby/lib/binary_cases.rb +1 -1
  42. data/tracks/ruby/lib/bowling_cases.rb +1 -1
  43. data/tracks/ruby/lib/bracket_push_cases.rb +1 -1
  44. data/tracks/ruby/lib/clock_cases.rb +1 -1
  45. data/tracks/ruby/lib/connect_cases.rb +1 -1
  46. data/tracks/ruby/lib/custom_set_cases.rb +1 -1
  47. data/tracks/ruby/lib/difference_of_squares_cases.rb +1 -1
  48. data/tracks/ruby/lib/dominoes_cases.rb +1 -1
  49. data/tracks/ruby/lib/generator/files/generator_cases.rb +29 -0
  50. data/tracks/ruby/lib/generator/files/track_files.rb +11 -27
  51. data/tracks/ruby/lib/generator/template_values.rb +8 -2
  52. data/tracks/ruby/{exercises/anagram/example.tt → lib/generator/test_template.erb} +2 -2
  53. data/tracks/ruby/lib/gigasecond_cases.rb +1 -0
  54. data/tracks/ruby/lib/grains_cases.rb +1 -1
  55. data/tracks/ruby/lib/hamming_cases.rb +2 -0
  56. data/tracks/ruby/lib/hello_world_cases.rb +1 -1
  57. data/tracks/ruby/lib/isogram_cases.rb +1 -1
  58. data/tracks/ruby/lib/largest_series_product_cases.rb +1 -1
  59. data/tracks/ruby/lib/leap_cases.rb +1 -1
  60. data/tracks/ruby/lib/luhn_cases.rb +2 -0
  61. data/tracks/ruby/lib/nth_prime_cases.rb +1 -1
  62. data/tracks/ruby/lib/ocr_numbers_cases.rb +2 -0
  63. data/tracks/ruby/lib/pangram_cases.rb +1 -1
  64. data/tracks/ruby/lib/pig_latin_cases.rb +2 -0
  65. data/tracks/ruby/lib/queen_attack_cases.rb +1 -1
  66. data/tracks/ruby/lib/raindrops_cases.rb +1 -1
  67. data/tracks/ruby/lib/rna_transcription_cases.rb +1 -1
  68. data/tracks/ruby/lib/roman_numerals_cases.rb +1 -1
  69. data/tracks/ruby/lib/run_length_encoding_cases.rb +8 -6
  70. data/tracks/ruby/lib/say_cases.rb +1 -1
  71. data/tracks/ruby/lib/sieve_cases.rb +10 -3
  72. data/tracks/ruby/lib/tournament_cases.rb +1 -1
  73. data/tracks/ruby/lib/transpose_cases.rb +1 -1
  74. data/tracks/ruby/lib/triangle_cases.rb +1 -1
  75. data/tracks/ruby/lib/two_bucket_cases.rb +1 -1
  76. data/tracks/ruby/lib/word_count_cases.rb +12 -1
  77. data/tracks/ruby/lib/wordy_cases.rb +1 -1
  78. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +1 -1
  79. data/tracks/ruby/{exercises/acronym/example.tt → test/fixtures/xruby/lib/generator/test_template.erb} +0 -0
  80. data/tracks/ruby/test/generator/files/generate_cases_test.rb +33 -0
  81. data/tracks/ruby/test/generator/files/track_files_test.rb +14 -28
  82. data/tracks/ruby/test/generator/template_values_test.rb +22 -4
  83. data/tracks/rust/config.json +10 -0
  84. data/tracks/rust/exercises/run-length-encoding/Cargo.lock +4 -0
  85. data/tracks/rust/exercises/run-length-encoding/Cargo.toml +6 -0
  86. data/tracks/rust/exercises/run-length-encoding/example.rs +45 -0
  87. data/tracks/rust/exercises/run-length-encoding/tests/run-length-encoding.rs +86 -0
  88. metadata +11 -29
  89. data/tracks/ruby/exercises/binary/example.tt +0 -22
  90. data/tracks/ruby/exercises/bracket-push/example.tt +0 -21
  91. data/tracks/ruby/exercises/clock/example.tt +0 -21
  92. data/tracks/ruby/exercises/custom-set/example.tt +0 -21
  93. data/tracks/ruby/exercises/grains/example.tt +0 -19
  94. data/tracks/ruby/exercises/hamming/example.tt +0 -21
  95. data/tracks/ruby/exercises/isogram/example.tt +0 -22
  96. data/tracks/ruby/exercises/largest-series-product/example.tt +0 -20
  97. data/tracks/ruby/exercises/luhn/example.tt +0 -18
  98. data/tracks/ruby/exercises/nth-prime/example.tt +0 -21
  99. data/tracks/ruby/exercises/ocr-numbers/example.tt +0 -21
  100. data/tracks/ruby/exercises/pangram/example.tt +0 -22
  101. data/tracks/ruby/exercises/pig-latin/example.tt +0 -21
  102. data/tracks/ruby/exercises/queen-attack/example.tt +0 -21
  103. data/tracks/ruby/exercises/raindrops/example.tt +0 -21
  104. data/tracks/ruby/exercises/rna-transcription/example.tt +0 -21
  105. data/tracks/ruby/exercises/roman-numerals/example.tt +0 -21
  106. data/tracks/ruby/exercises/run-length-encoding/example.tt +0 -24
  107. data/tracks/ruby/exercises/say/example.tt +0 -19
  108. data/tracks/ruby/exercises/sieve/example.tt +0 -22
  109. data/tracks/ruby/exercises/triangle/example.tt +0 -21
  110. data/tracks/ruby/exercises/two-bucket/example.tt +0 -21
  111. data/tracks/ruby/exercises/word-count/example.tt +0 -23
  112. data/tracks/ruby/exercises/wordy/example.tt +0 -19
  113. data/tracks/ruby/lib/exercise_cases.rb +0 -2
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
4
  require_relative 'binary'
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  require_relative 'bracket_push'
5
5
 
6
6
  # Common test data version: 855c591
7
- class BracketsTest < Minitest::Test
7
+ class BracketPushTest < Minitest::Test
8
8
  def test_paired_square_brackets
9
9
  # skip
10
10
  assert Brackets.paired?('[]')
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
1
3
  require 'minitest/autorun'
2
4
  require_relative 'grains'
3
5
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
4
  require_relative 'isogram'
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  require_relative 'largest_series_product'
5
5
 
6
6
  # Common test data version: e79b832
7
- class Seriestest < Minitest::Test
7
+ class LargestSeriesProductTest < Minitest::Test
8
8
  def test_finds_the_largest_product_if_span_equals_length
9
9
  # skip
10
10
  assert_equal 18, Series.new('29').largest_product(2)
@@ -98,6 +98,7 @@ class Seriestest < Minitest::Test
98
98
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
99
99
 
100
100
  def test_bookkeeping
101
+ skip
101
102
  assert_equal 3, BookKeeping::VERSION
102
103
  end
103
104
  end
@@ -69,6 +69,7 @@ class LuhnTest < Minitest::Test
69
69
  skip
70
70
  assert Luhn.valid?("091")
71
71
  end
72
+
72
73
  # Problems in exercism evolve over time, as we find better ways to ask
73
74
  # questions.
74
75
  # The version number refers to the version of the problem you solved,
@@ -85,6 +86,7 @@ class LuhnTest < Minitest::Test
85
86
  #
86
87
  # If you are curious, read more about constants on RubyDoc:
87
88
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
89
+
88
90
  def test_bookkeeping
89
91
  skip
90
92
  assert_equal 1, BookKeeping::VERSION
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
4
  require_relative 'pangram'
@@ -5,7 +5,6 @@ require_relative 'queen_attack'
5
5
 
6
6
  # Common test data version: 8adde5f
7
7
  class QueenAttackTest < Minitest::Test
8
-
9
8
  def test_queen_with_a_valid_position
10
9
  # skip
11
10
  assert Queens.new(white: [2, 2])
@@ -97,6 +96,7 @@ class QueenAttackTest < Minitest::Test
97
96
  #
98
97
  # If you are curious, read more about constants on RubyDoc:
99
98
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
99
+
100
100
  def test_bookkeeping
101
101
  skip
102
102
  assert_equal 2, BookKeeping::VERSION
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  require_relative 'rna_transcription'
5
5
 
6
6
  # Common test data version: 0b20fff
7
- class ComplementTest < Minitest::Test
7
+ class RnaTranscriptionTest < Minitest::Test
8
8
  def test_rna_complement_of_cytosine_is_guanine
9
9
  # skip
10
10
  assert_equal 'G', Complement.of_dna('C')
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
4
  require_relative 'run_length_encoding'
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
1
3
  require 'minitest/autorun'
2
4
  require_relative 'say'
3
5
 
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  require_relative 'word_count'
5
5
 
6
6
  # Common test data version: cd26d49
7
- class PhraseTest < Minitest::Test
7
+ class WordCountTest < Minitest::Test
8
8
  def test_count_one_word
9
9
  # skip
10
10
  phrase = Phrase.new("word")
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
1
3
  require 'minitest/autorun'
2
4
  require_relative 'wordy'
3
5
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class AcronymCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class AllYourBaseCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class AlphameticsCase < ExerciseCase
4
4
  def workload
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class AnagramCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class BeerSongCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class BinaryCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class BowlingCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class BracketPushCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class ClockCase < ExerciseCase
4
4
  def name
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class ConnectCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class CustomSetCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class DifferenceOfSquaresCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class DominoesCase < ExerciseCase
4
4
  def name
@@ -0,0 +1,29 @@
1
+ module Generator
2
+ module Files
3
+ module GeneratorCases
4
+ module_function
5
+
6
+ def available(track_path)
7
+ generator_glob = File.join(track_path, 'lib', '*_cases.rb')
8
+ Dir[generator_glob].sort.map { |filename| exercise_name(filename) }
9
+ end
10
+
11
+ def filename(exercise_name)
12
+ "#{exercise_name.tr('-', '_')}_cases"
13
+ end
14
+
15
+ def class_name(exercise_name)
16
+ filename(exercise_name)[0..-2].split('_').map(&:capitalize).join
17
+ end
18
+
19
+ def exercise_name(filename)
20
+ %r{([^/]*)_cases\.rb$}.match(filename).captures[0].tr('_', '-')
21
+ end
22
+
23
+ def load_filename(track_path, exercise_name)
24
+ path = File.join(track_path, 'lib')
25
+ "%s/%s.rb" % [ path, filename(exercise_name) ]
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,32 +2,6 @@ require 'erb'
2
2
 
3
3
  module Generator
4
4
  module Files
5
- module GeneratorCases
6
- module_function
7
-
8
- def available(track_path)
9
- generator_glob = File.join(track_path, 'lib', '*_cases.rb')
10
- Dir[generator_glob].sort.map { |filename| exercise_name(filename) }
11
- end
12
-
13
- def filename(exercise_name)
14
- "#{exercise_name.tr('-', '_')}_cases"
15
- end
16
-
17
- def class_name(exercise_name)
18
- filename(exercise_name)[0..-2].split('_').map(&:capitalize).join
19
- end
20
-
21
- def exercise_name(filename)
22
- %r{([^/]*)_cases\.rb$}.match(filename).captures[0].tr('_', '-')
23
- end
24
-
25
- def load_filename(track_path, exercise_name)
26
- path = File.join(track_path, 'lib')
27
- "%s/%s.rb" % [ path, filename(exercise_name) ]
28
- end
29
- end
30
-
31
5
  module TrackFiles
32
6
  include Exercise
33
7
 
@@ -44,7 +18,7 @@ module Generator
44
18
  end
45
19
 
46
20
  def tests_template
47
- TestsTemplateFile.new(filename: File.join(exercise_path, 'example.tt'))
21
+ TestsTemplateFile.new(filename: tests_template_filename)
48
22
  end
49
23
 
50
24
  private
@@ -53,6 +27,16 @@ module Generator
53
27
  File.join(paths.track, 'exercises', exercise_name)
54
28
  end
55
29
 
30
+ # this method contains a LOT of magic text
31
+ def tests_template_filename
32
+ File.exist?(track_tests_template_filename) ? track_tests_template_filename :
33
+ File.join(paths.track, 'lib', 'generator', 'test_template.erb')
34
+ end
35
+
36
+ def track_tests_template_filename
37
+ File.join(exercise_path, 'example.tt')
38
+ end
39
+
56
40
  def minitest_tests_filename
57
41
  "#{exercise_name.gsub(/[ -]/, '_')}_test.rb"
58
42
  end
@@ -1,17 +1,22 @@
1
1
  module Generator
2
2
  # Contains methods accessible to the ERB template
3
3
  class TemplateValues
4
- attr_reader :abbreviated_commit_hash, :version, :test_cases
4
+ attr_reader :abbreviated_commit_hash, :version, :exercise_name, :test_cases
5
5
 
6
- def initialize(abbreviated_commit_hash:, version:, test_cases:)
6
+ def initialize(abbreviated_commit_hash:, version:, exercise_name:, test_cases:)
7
7
  @abbreviated_commit_hash = abbreviated_commit_hash
8
8
  @version = version
9
+ @exercise_name = exercise_name ? exercise_name.tr('-_', '_') : ''
9
10
  @test_cases = test_cases
10
11
  end
11
12
 
12
13
  def get_binding
13
14
  binding
14
15
  end
16
+
17
+ def exercise_name_camel
18
+ exercise_name.split(/[-_]/).map(&:capitalize).join
19
+ end
15
20
  end
16
21
 
17
22
  module TemplateValuesFactory
@@ -19,6 +24,7 @@ module Generator
19
24
  TemplateValues.new(
20
25
  abbreviated_commit_hash: canonical_data.abbreviated_commit_hash,
21
26
  version: version,
27
+ exercise_name: exercise_name,
22
28
  test_cases: extract
23
29
  )
24
30
  end
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
- require_relative 'anagram'
4
+ require_relative '<%= exercise_name %>'
5
5
 
6
6
  # Common test data version: <%= abbreviated_commit_hash %>
7
- class AnagramTest < Minitest::Test
7
+ class <%= exercise_name_camel %>Test < Minitest::Test
8
8
  <% test_cases.each do |test_case| %>
9
9
  def <%= test_case.name %>
10
10
  <%= test_case.skipped %>
@@ -1,3 +1,4 @@
1
+ require 'generator/exercise_cases'
1
2
  require 'time'
2
3
 
3
4
  class GigasecondCase < ExerciseCase
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class GrainsCase < ExerciseCase
4
4
 
@@ -1,3 +1,5 @@
1
+ require 'generator/exercise_cases'
2
+
1
3
  class HammingCase < ExerciseCase
2
4
  def workload
3
5
  if raises_error?
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class HelloWorldCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class IsogramCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class LargestSeriesProductCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class LeapCase < ExerciseCase
4
4
 
@@ -1,3 +1,5 @@
1
+ require 'generator/exercise_cases'
2
+
1
3
  class LuhnCase < ExerciseCase
2
4
  def workload
3
5
  "#{assert} Luhn.valid?(#{input.inspect})"
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class NthPrimeCase < ExerciseCase
4
4
 
@@ -1,3 +1,5 @@
1
+ require 'generator/exercise_cases'
2
+
1
3
  class OcrNumbersCase < ExerciseCase
2
4
  def workload
3
5
  if raises_error?
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class PangramCase < ExerciseCase
4
4
  def workload
@@ -1,3 +1,5 @@
1
+ require 'generator/exercise_cases'
2
+
1
3
  class PigLatinCase < ExerciseCase
2
4
  def workload
3
5
  assert_equal { "PigLatin.translate(#{input.inspect})" }
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class QueenAttackCase < ExerciseCase
4
4
 
@@ -1,4 +1,4 @@
1
- require 'exercise_cases'
1
+ require 'generator/exercise_cases'
2
2
 
3
3
  class RaindropsCase < ExerciseCase
4
4