From e30946e48968b13b42e3117663f0c2f0fbf191a0 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 23 Apr 2017 16:37:24 -0700 Subject: [PATCH 01/25] add class_name to GeneratorCases --- lib/generator/files/track_files.rb | 6 +++++- test/generator/files/track_files_test.rb | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index d54430180c..2ae19d81fe 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -14,8 +14,12 @@ def filename(exercise_name) "#{exercise_name.tr('-', '_')}_cases" end + def class_name(exercise_name) + filename(exercise_name)[0..-2].split('_').map(&:capitalize).join + end + def proc_name(exercise_name) - filename(exercise_name).split('_').map(&:capitalize).join + "#{class_name(exercise_name)}s" end def exercise_name(filename) diff --git a/test/generator/files/track_files_test.rb b/test/generator/files/track_files_test.rb index 39311b765e..8b30a70420 100644 --- a/test/generator/files/track_files_test.rb +++ b/test/generator/files/track_files_test.rb @@ -25,6 +25,10 @@ def test_filename assert_equal 'two_parter_cases', GeneratorCases.filename(exercise_name) end + def test_class_name + assert_equal 'TwoParterCase', GeneratorCases.class_name('two-parter') + end + def test_proc_name exercise_name = 'two-parter' assert_equal 'TwoParterCases', GeneratorCases.proc_name(exercise_name) From 77cac072539b22aeb23d94d27ced1d459451a88b Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 23 Apr 2017 16:59:21 -0700 Subject: [PATCH 02/25] programmatically generate cases --- lib/generator/template_values.rb | 36 ++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index a1aac124f5..e01f833592 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -21,7 +21,7 @@ def template_values TemplateValues.new( abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, version: version, - test_cases: test_cases_proc.call(canonical_data.to_s) + test_cases: test_cases ) end @@ -31,8 +31,40 @@ def cases_require_name Files::GeneratorCases.filename(exercise_name) end + def test_cases + if test_cases_proc? + test_cases_proc.call(canonical_data.to_s) + else + test_cases_with_index + end + end + + def test_cases_with_index + extract_test_cases.compact. + map.with_index {|test, index| test_case_class.new(test.merge('index' => index)) } + end + + def extract_test_cases(data = JSON.parse(canonical_data.to_s)['cases']) + data.flat_map do |entry| + entry.key?('cases') ? extract_test_cases(entry['cases']) : entry + end + end + + def test_cases_proc? + Object.const_defined?(test_cases_procname) + end + def test_cases_proc - Object.const_get(Files::GeneratorCases.proc_name(exercise_name)) + Object.const_get(test_cases_procname) + end + + def test_case_class + Object.const_get(Files::GeneratorCases.class_name(exercise_name)) end + + def test_cases_procname + @test_cases_procname ||= Files::GeneratorCases.proc_name(exercise_name) + end + end end From 6134c4804cb1e40bc00c5eebb86a6c78f4dfa2e5 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Mon, 24 Apr 2017 15:17:45 -0700 Subject: [PATCH 03/25] extract CaseValues from TemplateValuesFactory --- lib/generator/files/track_files.rb | 3 +- lib/generator/template_values.rb | 57 +++++++----- test/fixtures/xruby/lib/gamma_cases.rb | 7 ++ test/generator/files/track_files_test.rb | 2 +- test/generator/template_values_test.rb | 111 +++++++++++++++++++++++ 5 files changed, 153 insertions(+), 27 deletions(-) create mode 100644 test/fixtures/xruby/lib/gamma_cases.rb diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index 2ae19d81fe..8f02def91a 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -18,8 +18,9 @@ def class_name(exercise_name) filename(exercise_name)[0..-2].split('_').map(&:capitalize).join end + # TODO: for backwards compatibility, remove post-conversion def proc_name(exercise_name) - "#{class_name(exercise_name)}s" + class_name(exercise_name) + 's' end def exercise_name(filename) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index e01f833592..cbf64a934b 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -16,55 +16,62 @@ def get_binding module TemplateValuesFactory def template_values - require cases_require_name - TemplateValues.new( abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, version: version, - test_cases: test_cases + test_cases: CaseValues.extract(exercise_name: exercise_name, exercise_data: canonical_data.to_s) ) end + end - private - - def cases_require_name - Files::GeneratorCases.filename(exercise_name) + class CaseValues + def self.extract(exercise_name:, exercise_data:) + CaseValues.new(exercise_name: exercise_name, exercise_data: exercise_data).extract end - def test_cases - if test_cases_proc? - test_cases_proc.call(canonical_data.to_s) - else - test_cases_with_index - end + def initialize(exercise_name:, exercise_data:) + @exercise_name = exercise_name + @exercise_data = exercise_data + + require cases_require_name end - def test_cases_with_index - extract_test_cases.compact. + attr_reader :exercise_name, :exercise_data + + def extract + # TODO: for backwards compatibility, remove post-conversion + return test_cases_proc.call(exercise_data) if test_cases_proc + + extract_test_cases. map.with_index {|test, index| test_case_class.new(test.merge('index' => index)) } end - def extract_test_cases(data = JSON.parse(canonical_data.to_s)['cases']) - data.flat_map do |entry| - entry.key?('cases') ? extract_test_cases(entry['cases']) : entry + private + + # TODO: for backwards compatibility, remove post-conversion + def test_cases_proc + if Object.const_defined?(test_cases_procname) + Object.const_get(test_cases_procname) end end - def test_cases_proc? - Object.const_defined?(test_cases_procname) + # TODO: for backwards compatibility, remove post-conversion + def test_cases_procname + @test_cases_procname ||= Files::GeneratorCases.proc_name(exercise_name) end - def test_cases_proc - Object.const_get(test_cases_procname) + def extract_test_cases(data: JSON.parse(exercise_data)['cases']) + data.flat_map do |entry| + entry.key?('cases') ? extract_test_cases(data: entry['cases']) : entry + end end def test_case_class Object.const_get(Files::GeneratorCases.class_name(exercise_name)) end - def test_cases_procname - @test_cases_procname ||= Files::GeneratorCases.proc_name(exercise_name) + def cases_require_name + Files::GeneratorCases.filename(exercise_name) end - end end diff --git a/test/fixtures/xruby/lib/gamma_cases.rb b/test/fixtures/xruby/lib/gamma_cases.rb new file mode 100644 index 0000000000..40cc9b7884 --- /dev/null +++ b/test/fixtures/xruby/lib/gamma_cases.rb @@ -0,0 +1,7 @@ +class GammaCase < ExerciseCase + + def workload + assert { Gamma.foo(bar) } + end + +end diff --git a/test/generator/files/track_files_test.rb b/test/generator/files/track_files_test.rb index 8b30a70420..05e24a714c 100644 --- a/test/generator/files/track_files_test.rb +++ b/test/generator/files/track_files_test.rb @@ -10,7 +10,7 @@ def test_no_cases_found def test_cases_found track_path = 'test/fixtures/xruby' - assert_equal %w(alpha beta), GeneratorCases.available(track_path).sort + assert_equal %w(alpha beta gamma), GeneratorCases.available(track_path).sort end def test_available_returns_exercise_names diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index 75abf8abf9..ae76e465d9 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -56,4 +56,115 @@ def teardown $LOAD_PATH.delete 'test/fixtures/xruby/lib' end end + + class CaseValuesTest < Minitest::Test + def setup + $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + end + + def simple_canonical_data + simple_canonical_data = Minitest::Mock.new + simple_canonical_data.expect( + :to_s, + <<-TEXT +{ + "description": "Test canonical data", + "cases": [ + { + "description": "add 2 numbers", + "input": [1,1], + "expected": 2 + } + ] +} +TEXT + ) + simple_canonical_data + end + + def complex_canonical_data + complex_canonical_data = Minitest::Mock.new + complex_canonical_data.expect( + :to_s, + <<-TEXT +{ + "exercise": "beer-song", + "version": "1.0.0", + "cases": [ + { + "description": "verse", + "cases": [ + { + "description": "single verse", + "cases": [ + { + "description": "first generic verse", + "property": "verse", + "number": 99, + "expected": "99 bottles of beer on the wall, YAAAR" + }, + { + "description": "last generic verse", + "property": "verse", + "number": 3, + "expected": "3 bottles of beer on the wall, YAAAR" + } + ] + } + ] + }, + { + "description": "lyrics", + "cases": [ + { + "description": "multiple verses", + "cases": [ + { + "description": "first two verses", + "property": "verses", + "beginning": 99, + "end": 98, + "expected": "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT" + } + ] + } + ] + } + ] +} +TEXT + ) + complex_canonical_data + end + + def test_extract_via_proc + cases = CaseValues.extract(exercise_name: 'alpha', exercise_data: simple_canonical_data.to_s) + expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def test_simple_auto_extraction + cases = CaseValues.extract(exercise_name: 'gamma', exercise_data: simple_canonical_data.to_s) + expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def test_multi_level_auto_extraction + cases = CaseValues.extract(exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s) + expected = [ + GammaCase.new(description: 'first generic verse', property: 'verse', number: 99, + expected: '99 bottles of beer on the wall, YAAAR', index: 0), + GammaCase.new(description: 'last generic verse', property: 'verse', number: 3, + expected: '3 bottles of beer on the wall, YAAAR', index: 1), + GammaCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, + expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2), + + ] + assert_equal expected.to_s, cases.to_s + end + + def teardown + $LOAD_PATH.delete 'test/fixtures/xruby/lib' + end + end end From 982e9b313c25d10a8c90b76dd7d4ef220da9418b Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Tue, 25 Apr 2017 13:22:35 -0700 Subject: [PATCH 04/25] separate logic for proc and auto extraction --- lib/generator/case_values.rb | 88 +++++++++++++ lib/generator/template_values.rb | 54 +------- .../case_values_auto_extractor_test.rb | 116 ++++++++++++++++++ test/generator/case_values_extract_test.rb | 65 ++++++++++ .../case_values_proc_extractor_test.rb | 46 +++++++ test/generator/template_values_test.rb | 110 ----------------- 6 files changed, 318 insertions(+), 161 deletions(-) create mode 100644 lib/generator/case_values.rb create mode 100644 test/generator/case_values_auto_extractor_test.rb create mode 100644 test/generator/case_values_extract_test.rb create mode 100644 test/generator/case_values_proc_extractor_test.rb diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb new file mode 100644 index 0000000000..4a47bdc139 --- /dev/null +++ b/lib/generator/case_values.rb @@ -0,0 +1,88 @@ +module Generator + module CaseValues + + module Extract + + def extract + extractor.extract( + exercise_name: exercise_name, + exercise_data: canonical_data.to_s + ) + end + + private + + def extractor + Object.const_defined?(test_cases_procname) ? ProcExtractor : AutoExtractor + end + + def test_cases_procname + Files::GeneratorCases.proc_name(exercise_name) + end + end + + class Extractor + attr_reader :exercise_name, :exercise_data + + def self.extract(exercise_name:, exercise_data:) + self.new( + exercise_name: exercise_name, + exercise_data: exercise_data + ).extract + end + + def initialize(exercise_name:, exercise_data:) + @exercise_name = exercise_name + @exercise_data = exercise_data + + require cases_require_name + end + + def extract + fail NotImplementedError, 'Should return an array of ProblemNameCase' + end + + private + + def cases_require_name + Files::GeneratorCases.filename(exercise_name) + end + end + + class AutoExtractor < Extractor + + def extract + extract_test_cases.map.with_index do |test, index| + test_case_class.new(test.merge('index' => index)) + end + end + + private + + def extract_test_cases(data: JSON.parse(exercise_data)['cases']) + data.flat_map do |entry| + entry.key?('cases') ? extract_test_cases(data: entry['cases']) : entry + end + end + + def test_case_class + Object.const_get(Files::GeneratorCases.class_name(exercise_name)) + end + end + + class ProcExtractor < Extractor + + def extract + test_cases_proc.call(exercise_data) + end + + private + + def test_cases_proc + Object.const_get(Files::GeneratorCases.proc_name(exercise_name)) + end + + end + + end +end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index cbf64a934b..ccfa152f36 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -15,63 +15,15 @@ def get_binding end module TemplateValuesFactory + include CaseValues::Extract + def template_values TemplateValues.new( abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, version: version, - test_cases: CaseValues.extract(exercise_name: exercise_name, exercise_data: canonical_data.to_s) + test_cases: extract ) end end - class CaseValues - def self.extract(exercise_name:, exercise_data:) - CaseValues.new(exercise_name: exercise_name, exercise_data: exercise_data).extract - end - - def initialize(exercise_name:, exercise_data:) - @exercise_name = exercise_name - @exercise_data = exercise_data - - require cases_require_name - end - - attr_reader :exercise_name, :exercise_data - - def extract - # TODO: for backwards compatibility, remove post-conversion - return test_cases_proc.call(exercise_data) if test_cases_proc - - extract_test_cases. - map.with_index {|test, index| test_case_class.new(test.merge('index' => index)) } - end - - private - - # TODO: for backwards compatibility, remove post-conversion - def test_cases_proc - if Object.const_defined?(test_cases_procname) - Object.const_get(test_cases_procname) - end - end - - # TODO: for backwards compatibility, remove post-conversion - def test_cases_procname - @test_cases_procname ||= Files::GeneratorCases.proc_name(exercise_name) - end - - def extract_test_cases(data: JSON.parse(exercise_data)['cases']) - data.flat_map do |entry| - entry.key?('cases') ? extract_test_cases(data: entry['cases']) : entry - end - end - - def test_case_class - Object.const_get(Files::GeneratorCases.class_name(exercise_name)) - end - - def cases_require_name - Files::GeneratorCases.filename(exercise_name) - end - end end diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_auto_extractor_test.rb new file mode 100644 index 0000000000..cdf77f8191 --- /dev/null +++ b/test/generator/case_values_auto_extractor_test.rb @@ -0,0 +1,116 @@ +require_relative '../test_helper' + +module Generator + module CaseValues + class AutoExtractorTest < Minitest::Test + + def setup + $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + end + + def test_simple_auto_extraction + cases = AutoExtractor.new( + exercise_name: 'gamma', exercise_data: simple_canonical_data.to_s + ).extract + expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def test_multi_level_auto_extraction + cases = AutoExtractor.new( + exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s + ).extract + + expected = [ + GammaCase.new(description: 'first generic verse', property: 'verse', number: 99, + expected: '99 bottles of beer on the wall, YAAAR', index: 0), + GammaCase.new(description: 'last generic verse', property: 'verse', number: 3, + expected: '3 bottles of beer on the wall, YAAAR', index: 1), + GammaCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, + expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2), + + ] + assert_equal expected.to_s, cases.to_s + end + + def teardown + $LOAD_PATH.delete 'test/fixtures/xruby/lib' + end + + def simple_canonical_data + simple_canonical_data = Minitest::Mock.new + simple_canonical_data.expect( + :to_s, + <<-TEXT +{ + "description": "Test canonical data", + "cases": [ + { + "description": "add 2 numbers", + "input": [1,1], + "expected": 2 + } + ] +} +TEXT + ) + simple_canonical_data + end + + def complex_canonical_data + complex_canonical_data = Minitest::Mock.new + complex_canonical_data.expect( + :to_s, + <<-TEXT +{ + "exercise": "beer-song", + "version": "1.0.0", + "cases": [ + { + "description": "verse", + "cases": [ + { + "description": "single verse", + "cases": [ + { + "description": "first generic verse", + "property": "verse", + "number": 99, + "expected": "99 bottles of beer on the wall, YAAAR" + }, + { + "description": "last generic verse", + "property": "verse", + "number": 3, + "expected": "3 bottles of beer on the wall, YAAAR" + } + ] + } + ] + }, + { + "description": "lyrics", + "cases": [ + { + "description": "multiple verses", + "cases": [ + { + "description": "first two verses", + "property": "verses", + "beginning": 99, + "end": 98, + "expected": "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT" + } + ] + } + ] + } + ] +} +TEXT + ) + complex_canonical_data + end + end + end +end diff --git a/test/generator/case_values_extract_test.rb b/test/generator/case_values_extract_test.rb new file mode 100644 index 0000000000..ba3785a292 --- /dev/null +++ b/test/generator/case_values_extract_test.rb @@ -0,0 +1,65 @@ +require_relative '../test_helper' + +module Generator + module CaseValues + class TestExtract + include Extract + + def canonical_data + simple_canonical_data = Minitest::Mock.new + simple_canonical_data.expect( + :to_s, + <<-TEXT +{ + "description": "Test canonical data", + "cases": [ + { + "description": "add 2 numbers", + "input": [1,1], + "expected": 2 + } + ] +} +TEXT + ) + simple_canonical_data + end + end + + class TestProcExtract < TestExtract + def exercise_name + 'alpha' + end + end + + class TestAutoExtract < TestExtract + def exercise_name + 'gamma' + end + end + + class ExtractTest < Minitest::Test + + def setup + $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + end + + def test_extract_via_proc + cases = TestProcExtract.new.extract + expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def test_auto_extract + cases = TestAutoExtract.new.extract + expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def teardown + $LOAD_PATH.delete 'test/fixtures/xruby/lib' + end + + end + end +end diff --git a/test/generator/case_values_proc_extractor_test.rb b/test/generator/case_values_proc_extractor_test.rb new file mode 100644 index 0000000000..d26a5604ab --- /dev/null +++ b/test/generator/case_values_proc_extractor_test.rb @@ -0,0 +1,46 @@ +require_relative '../test_helper' + +module Generator + module CaseValues + class ProcExtractorTest < Minitest::Test + + def setup + $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + end + + def test_extract_via_proc + cases = ProcExtractor.new( + exercise_name: 'alpha', + exercise_data: simple_canonical_data.to_s + ).extract + expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def teardown + $LOAD_PATH.delete 'test/fixtures/xruby/lib' + end + + def simple_canonical_data + simple_canonical_data = Minitest::Mock.new + simple_canonical_data.expect( + :to_s, + <<-TEXT +{ + "description": "Test canonical data", + "cases": [ + { + "description": "add 2 numbers", + "input": [1,1], + "expected": 2 + } + ] +} +TEXT + ) + simple_canonical_data + end + + end + end +end diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index ae76e465d9..aa5c47ff44 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -57,114 +57,4 @@ def teardown end end - class CaseValuesTest < Minitest::Test - def setup - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' - end - - def simple_canonical_data - simple_canonical_data = Minitest::Mock.new - simple_canonical_data.expect( - :to_s, - <<-TEXT -{ - "description": "Test canonical data", - "cases": [ - { - "description": "add 2 numbers", - "input": [1,1], - "expected": 2 - } - ] -} -TEXT - ) - simple_canonical_data - end - - def complex_canonical_data - complex_canonical_data = Minitest::Mock.new - complex_canonical_data.expect( - :to_s, - <<-TEXT -{ - "exercise": "beer-song", - "version": "1.0.0", - "cases": [ - { - "description": "verse", - "cases": [ - { - "description": "single verse", - "cases": [ - { - "description": "first generic verse", - "property": "verse", - "number": 99, - "expected": "99 bottles of beer on the wall, YAAAR" - }, - { - "description": "last generic verse", - "property": "verse", - "number": 3, - "expected": "3 bottles of beer on the wall, YAAAR" - } - ] - } - ] - }, - { - "description": "lyrics", - "cases": [ - { - "description": "multiple verses", - "cases": [ - { - "description": "first two verses", - "property": "verses", - "beginning": 99, - "end": 98, - "expected": "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT" - } - ] - } - ] - } - ] -} -TEXT - ) - complex_canonical_data - end - - def test_extract_via_proc - cases = CaseValues.extract(exercise_name: 'alpha', exercise_data: simple_canonical_data.to_s) - expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - - def test_simple_auto_extraction - cases = CaseValues.extract(exercise_name: 'gamma', exercise_data: simple_canonical_data.to_s) - expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - - def test_multi_level_auto_extraction - cases = CaseValues.extract(exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s) - expected = [ - GammaCase.new(description: 'first generic verse', property: 'verse', number: 99, - expected: '99 bottles of beer on the wall, YAAAR', index: 0), - GammaCase.new(description: 'last generic verse', property: 'verse', number: 3, - expected: '3 bottles of beer on the wall, YAAAR', index: 1), - GammaCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, - expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2), - - ] - assert_equal expected.to_s, cases.to_s - end - - def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' - end - end end From 263e233351e4792e54ae36fa5b7356a6880cae11 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Tue, 25 Apr 2017 13:41:39 -0700 Subject: [PATCH 05/25] add #proc? to GeneratorCases --- lib/generator/case_values.rb | 5 +---- lib/generator/files/track_files.rb | 5 ++++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 4a47bdc139..9c76ee431a 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -13,12 +13,9 @@ def extract private def extractor - Object.const_defined?(test_cases_procname) ? ProcExtractor : AutoExtractor + Files::GeneratorCases.proc?(exercise_name) ? ProcExtractor : AutoExtractor end - def test_cases_procname - Files::GeneratorCases.proc_name(exercise_name) - end end class Extractor diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index 8f02def91a..8c19b96955 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -18,7 +18,10 @@ def class_name(exercise_name) filename(exercise_name)[0..-2].split('_').map(&:capitalize).join end - # TODO: for backwards compatibility, remove post-conversion + def proc?(exercise_name) + Object.const_defined?(proc_name(exercise_name)) + end + def proc_name(exercise_name) class_name(exercise_name) + 's' end From 068d1f5854346ab33991d625ba01a77746d58dcd Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Tue, 25 Apr 2017 14:11:34 -0700 Subject: [PATCH 06/25] fold Extract into TemplateValuesFactory --- lib/generator/case_values.rb | 25 ------- lib/generator/template_values.rb | 22 ++++++- .../case_values_auto_extractor_test.rb | 2 + test/generator/case_values_extract_test.rb | 65 ------------------- .../case_values_proc_extractor_test.rb | 1 + 5 files changed, 23 insertions(+), 92 deletions(-) delete mode 100644 test/generator/case_values_extract_test.rb diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 9c76ee431a..55091d4a4f 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -1,23 +1,6 @@ module Generator module CaseValues - module Extract - - def extract - extractor.extract( - exercise_name: exercise_name, - exercise_data: canonical_data.to_s - ) - end - - private - - def extractor - Files::GeneratorCases.proc?(exercise_name) ? ProcExtractor : AutoExtractor - end - - end - class Extractor attr_reader :exercise_name, :exercise_data @@ -31,19 +14,11 @@ def self.extract(exercise_name:, exercise_data:) def initialize(exercise_name:, exercise_data:) @exercise_name = exercise_name @exercise_data = exercise_data - - require cases_require_name end def extract fail NotImplementedError, 'Should return an array of ProblemNameCase' end - - private - - def cases_require_name - Files::GeneratorCases.filename(exercise_name) - end end class AutoExtractor < Extractor diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index ccfa152f36..4dc1251c89 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -15,15 +15,33 @@ def get_binding end module TemplateValuesFactory - include CaseValues::Extract + include CaseValues def template_values + require cases_require_name + TemplateValues.new( abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, version: version, test_cases: extract ) end - end + private + + def extract + extractor.extract( + exercise_name: exercise_name, + exercise_data: canonical_data.to_s + ) + end + + def extractor + Files::GeneratorCases.proc?(exercise_name) ? ProcExtractor : AutoExtractor + end + + def cases_require_name + Files::GeneratorCases.filename(exercise_name) + end + end end diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_auto_extractor_test.rb index cdf77f8191..c55c1ca35d 100644 --- a/test/generator/case_values_auto_extractor_test.rb +++ b/test/generator/case_values_auto_extractor_test.rb @@ -9,6 +9,7 @@ def setup end def test_simple_auto_extraction + require Files::GeneratorCases.filename('gamma') cases = AutoExtractor.new( exercise_name: 'gamma', exercise_data: simple_canonical_data.to_s ).extract @@ -17,6 +18,7 @@ def test_simple_auto_extraction end def test_multi_level_auto_extraction + require Files::GeneratorCases.filename('gamma') cases = AutoExtractor.new( exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s ).extract diff --git a/test/generator/case_values_extract_test.rb b/test/generator/case_values_extract_test.rb deleted file mode 100644 index ba3785a292..0000000000 --- a/test/generator/case_values_extract_test.rb +++ /dev/null @@ -1,65 +0,0 @@ -require_relative '../test_helper' - -module Generator - module CaseValues - class TestExtract - include Extract - - def canonical_data - simple_canonical_data = Minitest::Mock.new - simple_canonical_data.expect( - :to_s, - <<-TEXT -{ - "description": "Test canonical data", - "cases": [ - { - "description": "add 2 numbers", - "input": [1,1], - "expected": 2 - } - ] -} -TEXT - ) - simple_canonical_data - end - end - - class TestProcExtract < TestExtract - def exercise_name - 'alpha' - end - end - - class TestAutoExtract < TestExtract - def exercise_name - 'gamma' - end - end - - class ExtractTest < Minitest::Test - - def setup - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' - end - - def test_extract_via_proc - cases = TestProcExtract.new.extract - expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - - def test_auto_extract - cases = TestAutoExtract.new.extract - expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - - def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' - end - - end - end -end diff --git a/test/generator/case_values_proc_extractor_test.rb b/test/generator/case_values_proc_extractor_test.rb index d26a5604ab..90ab5fabb4 100644 --- a/test/generator/case_values_proc_extractor_test.rb +++ b/test/generator/case_values_proc_extractor_test.rb @@ -9,6 +9,7 @@ def setup end def test_extract_via_proc + require Files::GeneratorCases.filename('alpha') cases = ProcExtractor.new( exercise_name: 'alpha', exercise_data: simple_canonical_data.to_s From 75b81d7f4a73be650f36f6605d0e5f467f102604 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 09:24:04 +0100 Subject: [PATCH 07/25] Minor: Remove unnecessary whitespace changes. --- test/generator/case_values_auto_extractor_test.rb | 4 +--- test/generator/template_values_test.rb | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_auto_extractor_test.rb index c55c1ca35d..15fb344e58 100644 --- a/test/generator/case_values_auto_extractor_test.rb +++ b/test/generator/case_values_auto_extractor_test.rb @@ -3,7 +3,6 @@ module Generator module CaseValues class AutoExtractorTest < Minitest::Test - def setup $LOAD_PATH.unshift 'test/fixtures/xruby/lib' end @@ -29,8 +28,7 @@ def test_multi_level_auto_extraction GammaCase.new(description: 'last generic verse', property: 'verse', number: 3, expected: '3 bottles of beer on the wall, YAAAR', index: 1), GammaCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, - expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2), - + expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2) ] assert_equal expected.to_s, cases.to_s end diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index aa5c47ff44..75abf8abf9 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -56,5 +56,4 @@ def teardown $LOAD_PATH.delete 'test/fixtures/xruby/lib' end end - end From 9f6a9e3c674ff139aee460369998fff9c663a02e Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 09:40:34 +0100 Subject: [PATCH 08/25] Remove redundant test. --- .../case_values_auto_extractor_test.rb | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_auto_extractor_test.rb index 15fb344e58..cd3ab579ee 100644 --- a/test/generator/case_values_auto_extractor_test.rb +++ b/test/generator/case_values_auto_extractor_test.rb @@ -7,15 +7,6 @@ def setup $LOAD_PATH.unshift 'test/fixtures/xruby/lib' end - def test_simple_auto_extraction - require Files::GeneratorCases.filename('gamma') - cases = AutoExtractor.new( - exercise_name: 'gamma', exercise_data: simple_canonical_data.to_s - ).extract - expected = [GammaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - def test_multi_level_auto_extraction require Files::GeneratorCases.filename('gamma') cases = AutoExtractor.new( @@ -37,26 +28,6 @@ def teardown $LOAD_PATH.delete 'test/fixtures/xruby/lib' end - def simple_canonical_data - simple_canonical_data = Minitest::Mock.new - simple_canonical_data.expect( - :to_s, - <<-TEXT -{ - "description": "Test canonical data", - "cases": [ - { - "description": "add 2 numbers", - "input": [1,1], - "expected": 2 - } - ] -} -TEXT - ) - simple_canonical_data - end - def complex_canonical_data complex_canonical_data = Minitest::Mock.new complex_canonical_data.expect( From 1700748d7a101916051bd0bc6135653f83b952ea Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 09:43:29 +0100 Subject: [PATCH 09/25] Inline the GammaCase rather than reading it from a file. --- test/fixtures/xruby/lib/gamma_cases.rb | 7 ------- test/generator/case_values_auto_extractor_test.rb | 15 ++++++--------- test/generator/files/track_files_test.rb | 2 +- 3 files changed, 7 insertions(+), 17 deletions(-) delete mode 100644 test/fixtures/xruby/lib/gamma_cases.rb diff --git a/test/fixtures/xruby/lib/gamma_cases.rb b/test/fixtures/xruby/lib/gamma_cases.rb deleted file mode 100644 index 40cc9b7884..0000000000 --- a/test/fixtures/xruby/lib/gamma_cases.rb +++ /dev/null @@ -1,7 +0,0 @@ -class GammaCase < ExerciseCase - - def workload - assert { Gamma.foo(bar) } - end - -end diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_auto_extractor_test.rb index cd3ab579ee..f2952b562b 100644 --- a/test/generator/case_values_auto_extractor_test.rb +++ b/test/generator/case_values_auto_extractor_test.rb @@ -1,14 +1,15 @@ require_relative '../test_helper' +class GammaCase < ExerciseCase + def workload + assert { Gamma.foo(bar) } + end +end + module Generator module CaseValues class AutoExtractorTest < Minitest::Test - def setup - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' - end - def test_multi_level_auto_extraction - require Files::GeneratorCases.filename('gamma') cases = AutoExtractor.new( exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s ).extract @@ -24,10 +25,6 @@ def test_multi_level_auto_extraction assert_equal expected.to_s, cases.to_s end - def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' - end - def complex_canonical_data complex_canonical_data = Minitest::Mock.new complex_canonical_data.expect( diff --git a/test/generator/files/track_files_test.rb b/test/generator/files/track_files_test.rb index 05e24a714c..8b30a70420 100644 --- a/test/generator/files/track_files_test.rb +++ b/test/generator/files/track_files_test.rb @@ -10,7 +10,7 @@ def test_no_cases_found def test_cases_found track_path = 'test/fixtures/xruby' - assert_equal %w(alpha beta gamma), GeneratorCases.available(track_path).sort + assert_equal %w(alpha beta), GeneratorCases.available(track_path).sort end def test_available_returns_exercise_names From 33e0881683ce159ada8ce8f4b44011009aa56c7b Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 09:49:35 +0100 Subject: [PATCH 10/25] Move case values tests into a single file. --- .../case_values_proc_extractor_test.rb | 47 ------------------- ..._extractor_test.rb => case_values_test.rb} | 40 ++++++++++++++++ 2 files changed, 40 insertions(+), 47 deletions(-) delete mode 100644 test/generator/case_values_proc_extractor_test.rb rename test/generator/{case_values_auto_extractor_test.rb => case_values_test.rb} (71%) diff --git a/test/generator/case_values_proc_extractor_test.rb b/test/generator/case_values_proc_extractor_test.rb deleted file mode 100644 index 90ab5fabb4..0000000000 --- a/test/generator/case_values_proc_extractor_test.rb +++ /dev/null @@ -1,47 +0,0 @@ -require_relative '../test_helper' - -module Generator - module CaseValues - class ProcExtractorTest < Minitest::Test - - def setup - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' - end - - def test_extract_via_proc - require Files::GeneratorCases.filename('alpha') - cases = ProcExtractor.new( - exercise_name: 'alpha', - exercise_data: simple_canonical_data.to_s - ).extract - expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s - end - - def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' - end - - def simple_canonical_data - simple_canonical_data = Minitest::Mock.new - simple_canonical_data.expect( - :to_s, - <<-TEXT -{ - "description": "Test canonical data", - "cases": [ - { - "description": "add 2 numbers", - "input": [1,1], - "expected": 2 - } - ] -} -TEXT - ) - simple_canonical_data - end - - end - end -end diff --git a/test/generator/case_values_auto_extractor_test.rb b/test/generator/case_values_test.rb similarity index 71% rename from test/generator/case_values_auto_extractor_test.rb rename to test/generator/case_values_test.rb index f2952b562b..ba446dc399 100644 --- a/test/generator/case_values_auto_extractor_test.rb +++ b/test/generator/case_values_test.rb @@ -80,5 +80,45 @@ def complex_canonical_data complex_canonical_data end end + + class ProcExtractorTest < Minitest::Test + def setup + $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + end + + def test_extract_via_proc + require Files::GeneratorCases.filename('alpha') + cases = ProcExtractor.new( + exercise_name: 'alpha', + exercise_data: simple_canonical_data.to_s + ).extract + expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] + assert_equal expected.to_s, cases.to_s + end + + def teardown + $LOAD_PATH.delete 'test/fixtures/xruby/lib' + end + + def simple_canonical_data + simple_canonical_data = Minitest::Mock.new + simple_canonical_data.expect( + :to_s, + <<-TEXT +{ + "description": "Test canonical data", + "cases": [ + { + "description": "add 2 numbers", + "input": [1,1], + "expected": 2 + } + ] +} +TEXT + ) + simple_canonical_data + end + end end end From f088d24d720bbda5d2b7f02fa573b163162ccf1e Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 09:55:21 +0100 Subject: [PATCH 11/25] Remove redundant Mocks. --- test/generator/case_values_test.rb | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index ba446dc399..8b5bc0f8a2 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -11,7 +11,7 @@ module CaseValues class AutoExtractorTest < Minitest::Test def test_multi_level_auto_extraction cases = AutoExtractor.new( - exercise_name: 'gamma', exercise_data: complex_canonical_data.to_s + exercise_name: 'gamma', exercise_data: complex_canonical_data ).extract expected = [ @@ -26,10 +26,7 @@ def test_multi_level_auto_extraction end def complex_canonical_data - complex_canonical_data = Minitest::Mock.new - complex_canonical_data.expect( - :to_s, - <<-TEXT + <<-TEXT { "exercise": "beer-song", "version": "1.0.0", @@ -76,8 +73,6 @@ def complex_canonical_data ] } TEXT - ) - complex_canonical_data end end @@ -90,7 +85,7 @@ def test_extract_via_proc require Files::GeneratorCases.filename('alpha') cases = ProcExtractor.new( exercise_name: 'alpha', - exercise_data: simple_canonical_data.to_s + exercise_data: simple_canonical_data ).extract expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] assert_equal expected.to_s, cases.to_s @@ -101,10 +96,7 @@ def teardown end def simple_canonical_data - simple_canonical_data = Minitest::Mock.new - simple_canonical_data.expect( - :to_s, - <<-TEXT + <<-TEXT { "description": "Test canonical data", "cases": [ @@ -116,8 +108,6 @@ def simple_canonical_data ] } TEXT - ) - simple_canonical_data end end end From 001e60833ad39f37b4242c726dd7c5aceed769c9 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 10:01:06 +0100 Subject: [PATCH 12/25] Add test coverage for unimplmented extract method. --- test/generator/case_values_test.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 8b5bc0f8a2..7f042f4e5e 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -8,6 +8,14 @@ def workload module Generator module CaseValues + class ExtractorTest < Minitest::Test + def test_not_implemented_error + assert_raises NotImplementedError do + Extractor.extract(exercise_name: nil, exercise_data: nil) + end + end + end + class AutoExtractorTest < Minitest::Test def test_multi_level_auto_extraction cases = AutoExtractor.new( From 012ce13e582ed808ec965cd64d8bdac3e1f11541 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 10:13:40 +0100 Subject: [PATCH 13/25] Eliminte LOAD_PATH modifications. Just load the alpha_cases file direcly, we know where it is. --- test/generator/case_values_test.rb | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 7f042f4e5e..fedd9c79fe 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -85,12 +85,8 @@ def complex_canonical_data end class ProcExtractorTest < Minitest::Test - def setup - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' - end - def test_extract_via_proc - require Files::GeneratorCases.filename('alpha') + require_relative '../fixtures/xruby/lib/alpha_cases.rb' cases = ProcExtractor.new( exercise_name: 'alpha', exercise_data: simple_canonical_data @@ -99,10 +95,6 @@ def test_extract_via_proc assert_equal expected.to_s, cases.to_s end - def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' - end - def simple_canonical_data <<-TEXT { From 9547152f587c9593c56bee772a88c913316e78e1 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 10:17:26 +0100 Subject: [PATCH 14/25] Use fixture data we already have. test/fixtures/metadata/exercises/alpha/canonical-data.json We are the only user of this fixture data. --- test/generator/case_values_test.rb | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index fedd9c79fe..915d86c68b 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -89,26 +89,11 @@ def test_extract_via_proc require_relative '../fixtures/xruby/lib/alpha_cases.rb' cases = ProcExtractor.new( exercise_name: 'alpha', - exercise_data: simple_canonical_data + exercise_data: File.read('test/fixtures/metadata/exercises/alpha/canonical-data.json') ).extract expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] assert_equal expected.to_s, cases.to_s end - - def simple_canonical_data - <<-TEXT -{ - "description": "Test canonical data", - "cases": [ - { - "description": "add 2 numbers", - "input": [1,1], - "expected": 2 - } - ] -} -TEXT - end end end end From d29bceb50329ced75633fdedd6b54f14041da50f Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 10:25:00 +0100 Subject: [PATCH 15/25] Remove unnecessary inclusion of CaseValues --- lib/generator/template_values.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 4dc1251c89..11b809844f 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -15,8 +15,6 @@ def get_binding end module TemplateValuesFactory - include CaseValues - def template_values require cases_require_name @@ -37,7 +35,7 @@ def extract end def extractor - Files::GeneratorCases.proc?(exercise_name) ? ProcExtractor : AutoExtractor + Files::GeneratorCases.proc?(exercise_name) ? CaseValues::ProcExtractor : CaseValues::AutoExtractor end def cases_require_name From 8b2ae2afb7479b12c8bef042e6dbe2419b9de222 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 11:02:29 +0100 Subject: [PATCH 16/25] Extract complex json to fixture file. Renamed 'gamma' to 'complex'. --- .../exercises/complex/canonical-data.json | 45 ++++++++++++ test/generator/case_values_test.rb | 69 +++---------------- 2 files changed, 55 insertions(+), 59 deletions(-) create mode 100644 test/fixtures/metadata/exercises/complex/canonical-data.json diff --git a/test/fixtures/metadata/exercises/complex/canonical-data.json b/test/fixtures/metadata/exercises/complex/canonical-data.json new file mode 100644 index 0000000000..699953ed5a --- /dev/null +++ b/test/fixtures/metadata/exercises/complex/canonical-data.json @@ -0,0 +1,45 @@ +{ + "exercise": "beer-song", + "version": "1.0.0", + "cases": [ + { + "description": "verse", + "cases": [ + { + "description": "single verse", + "cases": [ + { + "description": "first generic verse", + "property": "verse", + "number": 99, + "expected": "99 bottles of beer on the wall, YAAAR" + }, + { + "description": "last generic verse", + "property": "verse", + "number": 3, + "expected": "3 bottles of beer on the wall, YAAAR" + } + ] + } + ] + }, + { + "description": "lyrics", + "cases": [ + { + "description": "multiple verses", + "cases": [ + { + "description": "first two verses", + "property": "verses", + "beginning": 99, + "end": 98, + "expected": "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT" + } + ] + } + ] + } + ] +} diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 915d86c68b..319242898e 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -1,8 +1,8 @@ require_relative '../test_helper' -class GammaCase < ExerciseCase +class ComplexCase < ExerciseCase def workload - assert { Gamma.foo(bar) } + assert { Complex.foo(bar) } end end @@ -19,69 +19,20 @@ def test_not_implemented_error class AutoExtractorTest < Minitest::Test def test_multi_level_auto_extraction cases = AutoExtractor.new( - exercise_name: 'gamma', exercise_data: complex_canonical_data + exercise_name: 'complex', + exercise_data: File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') ).extract expected = [ - GammaCase.new(description: 'first generic verse', property: 'verse', number: 99, - expected: '99 bottles of beer on the wall, YAAAR', index: 0), - GammaCase.new(description: 'last generic verse', property: 'verse', number: 3, - expected: '3 bottles of beer on the wall, YAAAR', index: 1), - GammaCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, - expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2) + ComplexCase.new(description: 'first generic verse', property: 'verse', number: 99, + expected: '99 bottles of beer on the wall, YAAAR', index: 0), + ComplexCase.new(description: 'last generic verse', property: 'verse', number: 3, + expected: '3 bottles of beer on the wall, YAAAR', index: 1), + ComplexCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, + expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2) ] assert_equal expected.to_s, cases.to_s end - - def complex_canonical_data - <<-TEXT -{ - "exercise": "beer-song", - "version": "1.0.0", - "cases": [ - { - "description": "verse", - "cases": [ - { - "description": "single verse", - "cases": [ - { - "description": "first generic verse", - "property": "verse", - "number": 99, - "expected": "99 bottles of beer on the wall, YAAAR" - }, - { - "description": "last generic verse", - "property": "verse", - "number": 3, - "expected": "3 bottles of beer on the wall, YAAAR" - } - ] - } - ] - }, - { - "description": "lyrics", - "cases": [ - { - "description": "multiple verses", - "cases": [ - { - "description": "first two verses", - "property": "verses", - "beginning": 99, - "end": 98, - "expected": "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT" - } - ] - } - ] - } - ] -} -TEXT - end end class ProcExtractorTest < Minitest::Test From 8fb05bf4cb47c2f53952af7fb10902668b59f244 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 11:04:07 +0100 Subject: [PATCH 17/25] Remove unnecessary string conversions. --- test/generator/case_values_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 319242898e..91a6f032f0 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -31,7 +31,7 @@ def test_multi_level_auto_extraction ComplexCase.new(description: 'first two verses', property: 'verses', beginning: 99, end: 98, expected: "99 bottles of beer on the wall, YAR, PIRATES CAN'T COUNT", index: 2) ] - assert_equal expected.to_s, cases.to_s + assert_equal expected, cases end end @@ -43,7 +43,7 @@ def test_extract_via_proc exercise_data: File.read('test/fixtures/metadata/exercises/alpha/canonical-data.json') ).extract expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected.to_s, cases.to_s + assert_equal expected, cases end end end From 45511ff154c0835f3a8f8870a706be64d01b530e Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 18:48:41 +0100 Subject: [PATCH 18/25] Explicitly load the ProblemCases file we need. Add test that template_values loads problem cases Remove commented out code. Make everything that loads AlphaCase(s) clean up after itself. Undefine AlphaCase(s) during teardown. Remove redundant setup. Check for both classes. Add tests for class based test generation squash Remove TODO comment --- lib/generator/files/track_files.rb | 5 +++ lib/generator/template_values.rb | 13 ++++--- test/fixtures/xruby/lib/beta_cases.rb | 7 ++++ test/generator/case_values_test.rb | 10 ++++- test/generator/template_values_test.rb | 52 ++++++++++++++++++++++++-- 5 files changed, 78 insertions(+), 9 deletions(-) diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index 8c19b96955..7238115f4d 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -29,6 +29,11 @@ def proc_name(exercise_name) def exercise_name(filename) %r{([^/]*)_cases\.rb$}.match(filename).captures[0].tr('_', '-') end + + def load_filename(track_path, exercise_name) + path = File.join(track_path, 'lib') + "%s/%s.rb" % [ path, filename(exercise_name) ] + end end module TrackFiles diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 11b809844f..516e4406a8 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -16,8 +16,6 @@ def get_binding module TemplateValuesFactory def template_values - require cases_require_name - TemplateValues.new( abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, version: version, @@ -35,11 +33,16 @@ def extract end def extractor - Files::GeneratorCases.proc?(exercise_name) ? CaseValues::ProcExtractor : CaseValues::AutoExtractor + load cases_load_name + if Files::GeneratorCases.proc?(exercise_name) + CaseValues::ProcExtractor + else + CaseValues::AutoExtractor + end end - def cases_require_name - Files::GeneratorCases.filename(exercise_name) + def cases_load_name + Files::GeneratorCases.load_filename(paths.track, exercise_name) end end end diff --git a/test/fixtures/xruby/lib/beta_cases.rb b/test/fixtures/xruby/lib/beta_cases.rb index e69de29bb2..e442b4e531 100644 --- a/test/fixtures/xruby/lib/beta_cases.rb +++ b/test/fixtures/xruby/lib/beta_cases.rb @@ -0,0 +1,7 @@ +require 'exercise_cases' + +class BetaCase < ExerciseCase + def workload + assert_equal { "Beta.call('#{input}')" } + end +end diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 91a6f032f0..250408242f 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -36,8 +36,11 @@ def test_multi_level_auto_extraction end class ProcExtractorTest < Minitest::Test + def setup + load 'test/fixtures/xruby/lib/alpha_cases.rb' + end + def test_extract_via_proc - require_relative '../fixtures/xruby/lib/alpha_cases.rb' cases = ProcExtractor.new( exercise_name: 'alpha', exercise_data: File.read('test/fixtures/metadata/exercises/alpha/canonical-data.json') @@ -45,6 +48,11 @@ def test_extract_via_proc expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] assert_equal expected, cases end + + def teardown + Object.send(:remove_const, :AlphaCases) + Object.send(:remove_const, :AlphaCase) + end end end end diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index 75abf8abf9..c13260eceb 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -43,17 +43,63 @@ def canonical_data mock_canonical_data end + def paths + mock_paths = Minitest::Mock.new + mock_paths.expect :track, 'test/fixtures/xruby' + mock_paths + end + include TemplateValuesFactory end - def test_template_values - $LOAD_PATH.unshift 'test/fixtures/xruby/lib' + def test_template_values_from_proc subject = TestTemplateValuesFactory.new assert_instance_of TemplateValues, subject.template_values end + class ClassBasedTestTemplateValuesFactory + def exercise_name + 'beta' + end + + def version + 2 + end + + def canonical_data + mock_canonical_data = Minitest::Mock.new + mock_canonical_data.expect :abbreviated_commit_hash, nil + mock_canonical_data.expect :to_s, '{"cases":[]}' + mock_canonical_data + end + + def paths + mock_paths = Minitest::Mock.new + mock_paths.expect :track, 'test/fixtures/xruby' + mock_paths + end + + include TemplateValuesFactory + end + + def test_template_values_from_class + subject = ClassBasedTestTemplateValuesFactory.new + assert_instance_of TemplateValues, subject.template_values + end + + def test_template_values_loads_problem_case_classes + subject = TestTemplateValuesFactory.new + assert_instance_of TemplateValues, subject.template_values + assert Object.const_defined?(:AlphaCase) + assert Object.const_defined?(:AlphaCases) + end + def teardown - $LOAD_PATH.delete 'test/fixtures/xruby/lib' + [:AlphaCase, :AlphaCases].each do |classname| + if Object.const_defined?(classname) + Object.send(:remove_const, classname) + end + end end end end From 0b47df337785a0310708f26deecd83c17a0b60fa Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Wed, 26 Apr 2017 14:28:35 -0700 Subject: [PATCH 19/25] remove proc support (not needed) all generators converted to use auto extraction in https://github.com/exercism/xruby/pull/567 --- lib/generator/case_values.rb | 21 ----------------- lib/generator/files/track_files.rb | 8 ------- lib/generator/template_values.rb | 13 +++------- test/generator/case_values_test.rb | 30 +----------------------- test/generator/files/track_files_test.rb | 5 ---- test/generator/template_values_test.rb | 5 ---- 6 files changed, 4 insertions(+), 78 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 55091d4a4f..9d109d9edc 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -16,13 +16,6 @@ def initialize(exercise_name:, exercise_data:) @exercise_data = exercise_data end - def extract - fail NotImplementedError, 'Should return an array of ProblemNameCase' - end - end - - class AutoExtractor < Extractor - def extract extract_test_cases.map.with_index do |test, index| test_case_class.new(test.merge('index' => index)) @@ -42,19 +35,5 @@ def test_case_class end end - class ProcExtractor < Extractor - - def extract - test_cases_proc.call(exercise_data) - end - - private - - def test_cases_proc - Object.const_get(Files::GeneratorCases.proc_name(exercise_name)) - end - - end - end end diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index 7238115f4d..9fe130368b 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -18,14 +18,6 @@ def class_name(exercise_name) filename(exercise_name)[0..-2].split('_').map(&:capitalize).join end - def proc?(exercise_name) - Object.const_defined?(proc_name(exercise_name)) - end - - def proc_name(exercise_name) - class_name(exercise_name) + 's' - end - def exercise_name(filename) %r{([^/]*)_cases\.rb$}.match(filename).captures[0].tr('_', '-') end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 516e4406a8..b4dceeaa63 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -26,21 +26,14 @@ def template_values private def extract - extractor.extract( + load cases_load_name + + CaseValues::Extractor.extract( exercise_name: exercise_name, exercise_data: canonical_data.to_s ) end - def extractor - load cases_load_name - if Files::GeneratorCases.proc?(exercise_name) - CaseValues::ProcExtractor - else - CaseValues::AutoExtractor - end - end - def cases_load_name Files::GeneratorCases.load_filename(paths.track, exercise_name) end diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 250408242f..7f57e8f80a 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -9,16 +9,8 @@ def workload module Generator module CaseValues class ExtractorTest < Minitest::Test - def test_not_implemented_error - assert_raises NotImplementedError do - Extractor.extract(exercise_name: nil, exercise_data: nil) - end - end - end - - class AutoExtractorTest < Minitest::Test def test_multi_level_auto_extraction - cases = AutoExtractor.new( + cases = Extractor.new( exercise_name: 'complex', exercise_data: File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') ).extract @@ -34,25 +26,5 @@ def test_multi_level_auto_extraction assert_equal expected, cases end end - - class ProcExtractorTest < Minitest::Test - def setup - load 'test/fixtures/xruby/lib/alpha_cases.rb' - end - - def test_extract_via_proc - cases = ProcExtractor.new( - exercise_name: 'alpha', - exercise_data: File.read('test/fixtures/metadata/exercises/alpha/canonical-data.json') - ).extract - expected = [AlphaCase.new(description: 'add 2 numbers', input: [1, 1], expected: 2, index: 0)] - assert_equal expected, cases - end - - def teardown - Object.send(:remove_const, :AlphaCases) - Object.send(:remove_const, :AlphaCase) - end - end end end diff --git a/test/generator/files/track_files_test.rb b/test/generator/files/track_files_test.rb index 8b30a70420..7ea9f9af30 100644 --- a/test/generator/files/track_files_test.rb +++ b/test/generator/files/track_files_test.rb @@ -28,11 +28,6 @@ def test_filename def test_class_name assert_equal 'TwoParterCase', GeneratorCases.class_name('two-parter') end - - def test_proc_name - exercise_name = 'two-parter' - assert_equal 'TwoParterCases', GeneratorCases.proc_name(exercise_name) - end end class TrackFilesTest < Minitest::Test diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index c13260eceb..57a4e27afe 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -52,11 +52,6 @@ def paths include TemplateValuesFactory end - def test_template_values_from_proc - subject = TestTemplateValuesFactory.new - assert_instance_of TemplateValues, subject.template_values - end - class ClassBasedTestTemplateValuesFactory def exercise_name 'beta' From d85ace44029c9529cefae929aeb742950d18ded5 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 21:38:40 +0100 Subject: [PATCH 20/25] Pass the data to be extracted to the extract method. (We're not making use of it yet, but now it is there we can.) --- lib/generator/case_values.rb | 3 +-- lib/generator/template_values.rb | 5 ++--- test/generator/case_values_test.rb | 5 +++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 9d109d9edc..8ad2b40d85 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -16,7 +16,7 @@ def initialize(exercise_name:, exercise_data:) @exercise_data = exercise_data end - def extract + def extract(_) extract_test_cases.map.with_index do |test, index| test_case_class.new(test.merge('index' => index)) end @@ -34,6 +34,5 @@ def test_case_class Object.const_get(Files::GeneratorCases.class_name(exercise_name)) end end - end end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index b4dceeaa63..61523637c0 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -27,11 +27,10 @@ def template_values def extract load cases_load_name - - CaseValues::Extractor.extract( + CaseValues::Extractor.new( exercise_name: exercise_name, exercise_data: canonical_data.to_s - ) + ).extract(canonical_data.to_s) end def cases_load_name diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 7f57e8f80a..672bc7b7b5 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -10,10 +10,11 @@ module Generator module CaseValues class ExtractorTest < Minitest::Test def test_multi_level_auto_extraction + canonical_data = File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') cases = Extractor.new( exercise_name: 'complex', - exercise_data: File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') - ).extract + exercise_data: canonical_data + ).extract(canonical_data) expected = [ ComplexCase.new(description: 'first generic verse', property: 'verse', number: 99, From 4818a04e3a2692c820f5748e5e0b517bf265a4d6 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 21:50:48 +0100 Subject: [PATCH 21/25] Pass the 'case_class'name in as an argument to Extractor --- lib/generator/case_values.rb | 16 +++------------- lib/generator/template_values.rb | 13 +++++++++---- test/generator/case_values_test.rb | 2 ++ 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 8ad2b40d85..e4b462e9d1 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -4,21 +4,15 @@ module CaseValues class Extractor attr_reader :exercise_name, :exercise_data - def self.extract(exercise_name:, exercise_data:) - self.new( - exercise_name: exercise_name, - exercise_data: exercise_data - ).extract - end - - def initialize(exercise_name:, exercise_data:) + def initialize(exercise_name:, exercise_data:, case_class:) @exercise_name = exercise_name @exercise_data = exercise_data + @case_class = case_class end def extract(_) extract_test_cases.map.with_index do |test, index| - test_case_class.new(test.merge('index' => index)) + @case_class.new(test.merge('index' => index)) end end @@ -29,10 +23,6 @@ def extract_test_cases(data: JSON.parse(exercise_data)['cases']) entry.key?('cases') ? extract_test_cases(data: entry['cases']) : entry end end - - def test_case_class - Object.const_get(Files::GeneratorCases.class_name(exercise_name)) - end end end end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 61523637c0..fbcdb655e9 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -27,10 +27,15 @@ def template_values def extract load cases_load_name - CaseValues::Extractor.new( - exercise_name: exercise_name, - exercise_data: canonical_data.to_s - ).extract(canonical_data.to_s) + extractor.extract(canonical_data.to_s) + end + + def extractor + CaseValues::Extractor.new( + case_class: Object.const_get(Files::GeneratorCases.class_name(exercise_name)), + exercise_name: exercise_name, + exercise_data: canonical_data.to_s + ) end def cases_load_name diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 672bc7b7b5..42cbb17741 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -12,8 +12,10 @@ class ExtractorTest < Minitest::Test def test_multi_level_auto_extraction canonical_data = File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') cases = Extractor.new( + case_class: ComplexCase, exercise_name: 'complex', exercise_data: canonical_data + ).extract(canonical_data) expected = [ From bbde073dde310ddfd5cfca0f4f76106d29167c9d Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 22:07:27 +0100 Subject: [PATCH 22/25] Don't use exercise_data in the initializer anymore. --- lib/generator/case_values.rb | 12 ++++++------ lib/generator/template_values.rb | 3 +-- test/generator/case_values_test.rb | 2 -- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index e4b462e9d1..41c6b0b998 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -2,23 +2,23 @@ module Generator module CaseValues class Extractor - attr_reader :exercise_name, :exercise_data + attr_reader :exercise_name - def initialize(exercise_name:, exercise_data:, case_class:) + def initialize(exercise_name:, case_class:) @exercise_name = exercise_name - @exercise_data = exercise_data @case_class = case_class end - def extract(_) - extract_test_cases.map.with_index do |test, index| + def extract(exercise_data) + parsed_data = JSON.parse(exercise_data)['cases'] + extract_test_cases(data: parsed_data).map.with_index do |test, index| @case_class.new(test.merge('index' => index)) end end private - def extract_test_cases(data: JSON.parse(exercise_data)['cases']) + def extract_test_cases(data:) data.flat_map do |entry| entry.key?('cases') ? extract_test_cases(data: entry['cases']) : entry end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index fbcdb655e9..dc0444971b 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -33,8 +33,7 @@ def extract def extractor CaseValues::Extractor.new( case_class: Object.const_get(Files::GeneratorCases.class_name(exercise_name)), - exercise_name: exercise_name, - exercise_data: canonical_data.to_s + exercise_name: exercise_name ) end diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 42cbb17741..b877143b32 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -14,8 +14,6 @@ def test_multi_level_auto_extraction cases = Extractor.new( case_class: ComplexCase, exercise_name: 'complex', - exercise_data: canonical_data - ).extract(canonical_data) expected = [ From 96dbd2b0cae7d08b67259a644a6e643b82419896 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 22:10:43 +0100 Subject: [PATCH 23/25] exercise_name is not required by AutoExtractor anymore. --- lib/generator/case_values.rb | 6 +----- lib/generator/template_values.rb | 3 +-- test/generator/case_values_test.rb | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 41c6b0b998..34872abe7a 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -1,11 +1,7 @@ module Generator module CaseValues - class Extractor - attr_reader :exercise_name - - def initialize(exercise_name:, case_class:) - @exercise_name = exercise_name + def initialize(case_class:) @case_class = case_class end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index dc0444971b..48bac51b6f 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -32,8 +32,7 @@ def extract def extractor CaseValues::Extractor.new( - case_class: Object.const_get(Files::GeneratorCases.class_name(exercise_name)), - exercise_name: exercise_name + case_class: Object.const_get(Files::GeneratorCases.class_name(exercise_name)) ) end diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index b877143b32..856724485e 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -13,7 +13,6 @@ def test_multi_level_auto_extraction canonical_data = File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') cases = Extractor.new( case_class: ComplexCase, - exercise_name: 'complex', ).extract(canonical_data) expected = [ From 42ff562c71a29527ac2c39c5a7b88a75be16d3e5 Mon Sep 17 00:00:00 2001 From: Geoff Hubbard Date: Wed, 26 Apr 2017 22:15:14 +0100 Subject: [PATCH 24/25] Rename 'extract' method to 'call' --- lib/generator/case_values.rb | 2 +- lib/generator/template_values.rb | 2 +- test/generator/case_values_test.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index 34872abe7a..d025fbc2a8 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -5,7 +5,7 @@ def initialize(case_class:) @case_class = case_class end - def extract(exercise_data) + def call(exercise_data) parsed_data = JSON.parse(exercise_data)['cases'] extract_test_cases(data: parsed_data).map.with_index do |test, index| @case_class.new(test.merge('index' => index)) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 48bac51b6f..700d8c585b 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -27,7 +27,7 @@ def template_values def extract load cases_load_name - extractor.extract(canonical_data.to_s) + extractor.call(canonical_data.to_s) end def extractor diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 856724485e..4560cfd048 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -13,7 +13,7 @@ def test_multi_level_auto_extraction canonical_data = File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') cases = Extractor.new( case_class: ComplexCase, - ).extract(canonical_data) + ).call(canonical_data) expected = [ ComplexCase.new(description: 'first generic verse', property: 'verse', number: 99, From 557997c732a121e5ee94b3a6650ca0f09add4d11 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Wed, 26 Apr 2017 15:36:46 -0700 Subject: [PATCH 25/25] rename Extractor#call to #cases --- lib/generator/case_values.rb | 7 ++++--- lib/generator/template_values.rb | 2 +- test/generator/case_values_test.rb | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/generator/case_values.rb b/lib/generator/case_values.rb index d025fbc2a8..515d272b61 100644 --- a/lib/generator/case_values.rb +++ b/lib/generator/case_values.rb @@ -5,9 +5,10 @@ def initialize(case_class:) @case_class = case_class end - def call(exercise_data) - parsed_data = JSON.parse(exercise_data)['cases'] - extract_test_cases(data: parsed_data).map.with_index do |test, index| + def cases(exercise_data) + extract_test_cases( + data: JSON.parse(exercise_data)['cases'] + ).map.with_index do |test, index| @case_class.new(test.merge('index' => index)) end end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 700d8c585b..a9a83851c9 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -27,7 +27,7 @@ def template_values def extract load cases_load_name - extractor.call(canonical_data.to_s) + extractor.cases(canonical_data.to_s) end def extractor diff --git a/test/generator/case_values_test.rb b/test/generator/case_values_test.rb index 4560cfd048..9fbcf7d0b2 100644 --- a/test/generator/case_values_test.rb +++ b/test/generator/case_values_test.rb @@ -13,7 +13,7 @@ def test_multi_level_auto_extraction canonical_data = File.read('test/fixtures/metadata/exercises/complex/canonical-data.json') cases = Extractor.new( case_class: ComplexCase, - ).call(canonical_data) + ).cases(canonical_data) expected = [ ComplexCase.new(description: 'first generic verse', property: 'verse', number: 99,