From b283c2d209d020a93c374d4965089ec56f683f80 Mon Sep 17 00:00:00 2001 From: meatball Date: Sat, 30 Aug 2025 21:42:48 +0200 Subject: [PATCH 1/6] Enhance underscore method to filter invalid characters and update test file naming convention --- bin/generate | 6 +++++- generatorv2/lib/generator.rb | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/generate b/bin/generate index fd6f32f277..4409141edf 100755 --- a/bin/generate +++ b/bin/generate @@ -9,6 +9,10 @@ def exercises .select { |file| File.directory? File.join('./exercises/practice', file) } end +def underscore(str) + str.gsub(/[^a-zA-Z0-9_-]/, '').gsub(/[-\s]/, '_').downcase +end + class VerificationError < StandardError MESSAGE = 'The result generated for %s, does not match the current file' @@ -39,7 +43,7 @@ end parser.on('--verify', 'Verify all exercises') do exercises.each do |exercise| if File.exist?("./exercises/practice/#{exercise}/.meta/test_template.erb") - current_code = File.read("./exercises/practice/#{exercise}/#{exercise}_test.rb") + current_code = File.read("./exercises/practice/#{exercise}/#{underscore(exercise)}_test.rb") f = File.new("./exercises/practice/#{exercise}/temp_test.rb", 'w+') Generator.new(exercise).generate(f.path) generated_code = f.read diff --git a/generatorv2/lib/generator.rb b/generatorv2/lib/generator.rb index a0d669e929..1acf168e32 100644 --- a/generatorv2/lib/generator.rb +++ b/generatorv2/lib/generator.rb @@ -21,17 +21,17 @@ def generate(result_path = "./exercises/practice/#{@exercise}/#{underscore(@exer additional_json(json) json["cases"] = remove_tests(uuid, json) status = proc { status } - template = ERB.new File.read("./exercises/practice/#{@exercise}/.meta/test_template.erb") + template = ERB.new(File.read("./exercises/practice/#{@exercise}/.meta/test_template.erb"), trim_mode: '-') result = template.result(binding) File.write(result_path, result) RuboCop::CLI.new. - run(['-x', '-c', '.rubocop.yml', '-o', NullDevice.path, result_path]) + run(['-a', '-c', '.rubocop.yml', '-o', NullDevice.path, result_path]) end def underscore(str) - str.gsub(/[-\s]/, '_').downcase + str.gsub(/[^a-zA-Z0-9_\- ]/, '').gsub(/[-\s]/, '_').downcase end def camel_case(str) From 2c60de4cfac781ae1b12ae9bab10ab051e676a9a Mon Sep 17 00:00:00 2001 From: meatball Date: Sat, 30 Aug 2025 21:59:51 +0200 Subject: [PATCH 2/6] Add test case which test underscore for special characters --- generatorv2/test/utils_test.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generatorv2/test/utils_test.rb b/generatorv2/test/utils_test.rb index 235021882c..2098955a79 100644 --- a/generatorv2/test/utils_test.rb +++ b/generatorv2/test/utils_test.rb @@ -22,6 +22,11 @@ def test_underscore_with_two_words Generator.new("two-fer").underscore("two-fer") end + def test_underscore_with_special_characters + assert_equal "two_fer", + Generator.new("two-fer").underscore("two, !@#$%^&*()-fer") + end + def test_first_time_includes_hastag assert_equal "# skip", Generator.new("acronym").skip? From cdc09c3e79dc66ccd0ff4d7c1767aaba0cb6e539 Mon Sep 17 00:00:00 2001 From: meatball Date: Sat, 30 Aug 2025 22:00:36 +0200 Subject: [PATCH 3/6] Fix test case --- generatorv2/test/utils_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generatorv2/test/utils_test.rb b/generatorv2/test/utils_test.rb index 2098955a79..f8753e15d3 100644 --- a/generatorv2/test/utils_test.rb +++ b/generatorv2/test/utils_test.rb @@ -24,7 +24,7 @@ def test_underscore_with_two_words def test_underscore_with_special_characters assert_equal "two_fer", - Generator.new("two-fer").underscore("two, !@#$%^&*()-fer") + Generator.new("two-fer").underscore("two,!@#$%^&*()-fer") end def test_first_time_includes_hastag From 18e88cba9e96c698f795e48f588889f1286df212 Mon Sep 17 00:00:00 2001 From: meatball Date: Sun, 31 Aug 2025 10:34:44 +0200 Subject: [PATCH 4/6] Use character classes in regex. Also expose description for nested test cases. --- bin/generate | 2 +- generatorv2/lib/generator.rb | 2 +- generatorv2/lib/utils.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/generate b/bin/generate index 4409141edf..4966be4299 100755 --- a/bin/generate +++ b/bin/generate @@ -10,7 +10,7 @@ def exercises end def underscore(str) - str.gsub(/[^a-zA-Z0-9_-]/, '').gsub(/[-\s]/, '_').downcase + str.gsub(/[^\w\s-]/, '').gsub(/[-\s]/, '_').downcase end class VerificationError < StandardError diff --git a/generatorv2/lib/generator.rb b/generatorv2/lib/generator.rb index 1acf168e32..44d271e640 100644 --- a/generatorv2/lib/generator.rb +++ b/generatorv2/lib/generator.rb @@ -31,7 +31,7 @@ def generate(result_path = "./exercises/practice/#{@exercise}/#{underscore(@exer end def underscore(str) - str.gsub(/[^a-zA-Z0-9_\- ]/, '').gsub(/[-\s]/, '_').downcase + str.gsub(/[^\w\s-]/, '').gsub(/[-\s]/, '_').downcase end def camel_case(str) diff --git a/generatorv2/lib/utils.rb b/generatorv2/lib/utils.rb index d6b80971e6..a728848e8c 100644 --- a/generatorv2/lib/utils.rb +++ b/generatorv2/lib/utils.rb @@ -47,7 +47,7 @@ def additional_json(json) def remove_tests(uuid, json) json["cases"].each_with_object([]) do |x, acc| if x["cases"] - acc << { "cases" => remove_tests(uuid, x) } + acc << { "cases" => remove_tests(uuid, x), "description" => x["description"] } elsif uuid.include?(x["uuid"]) acc << x end From b9121959179e2f35557a34290dc8161cf0017139 Mon Sep 17 00:00:00 2001 From: meatball <69751659+meatball133@users.noreply.github.com> Date: Sun, 31 Aug 2025 16:04:49 +0000 Subject: [PATCH 5/6] Underscore should not create multiple underscores around special characters --- generatorv2/lib/generator.rb | 2 +- generatorv2/test/utils_test.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/generatorv2/lib/generator.rb b/generatorv2/lib/generator.rb index 44d271e640..5f15b0b43c 100644 --- a/generatorv2/lib/generator.rb +++ b/generatorv2/lib/generator.rb @@ -31,7 +31,7 @@ def generate(result_path = "./exercises/practice/#{@exercise}/#{underscore(@exer end def underscore(str) - str.gsub(/[^\w\s-]/, '').gsub(/[-\s]/, '_').downcase + str.gsub(/[^\w\s-]/, '').gsub(' ', ' ').gsub(/[-\s]/, '_').downcase end def camel_case(str) diff --git a/generatorv2/test/utils_test.rb b/generatorv2/test/utils_test.rb index f8753e15d3..cef28fa7d7 100644 --- a/generatorv2/test/utils_test.rb +++ b/generatorv2/test/utils_test.rb @@ -27,6 +27,11 @@ def test_underscore_with_special_characters Generator.new("two-fer").underscore("two,!@#$%^&*()-fer") end + def test_underscore_with_special_characters_should_not_create_multiple_spaces + assert_equal "two_fer", + Generator.new("two-fer").underscore("two = fer") + end + def test_first_time_includes_hastag assert_equal "# skip", Generator.new("acronym").skip? From 761fb8c3f55d725611d9b2cc7821e1c99e856b71 Mon Sep 17 00:00:00 2001 From: meatball <69751659+meatball133@users.noreply.github.com> Date: Sun, 31 Aug 2025 16:05:51 +0000 Subject: [PATCH 6/6] Fix formating --- generatorv2/test/utils_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generatorv2/test/utils_test.rb b/generatorv2/test/utils_test.rb index cef28fa7d7..944e0b66b8 100644 --- a/generatorv2/test/utils_test.rb +++ b/generatorv2/test/utils_test.rb @@ -28,7 +28,7 @@ def test_underscore_with_special_characters end def test_underscore_with_special_characters_should_not_create_multiple_spaces - assert_equal "two_fer", + assert_equal "two_fer", Generator.new("two-fer").underscore("two = fer") end