trackler 2.1.0.2 → 2.1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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