Skip to content

Commit

Permalink
Merge pull request #575 from hilary/add-generator-for-etl
Browse files Browse the repository at this point in the history
Carry #549: Add generator for etl
  • Loading branch information
kotp authored Apr 28, 2017
2 parents 21c54f4 + c6402c6 commit 9a73ca5
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 30 deletions.
1 change: 1 addition & 0 deletions exercises/etl/.meta/.version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
110 changes: 82 additions & 28 deletions exercises/etl/etl_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,110 @@
require 'minitest/autorun'
require_relative 'etl'

class TransformTest < Minitest::Test
def test_transform_one_value
old = { 1 => ['A'] }
expected = { 'a' => 1 }

# Common test data version: ca9ed58
class EtlTest < Minitest::Test
def test_a_single_letter
# skip
old = {
1 => ["A"]
}
expected = {
'a' => 1
}
assert_equal expected, ETL.transform(old)
end

def test_transform_more_values
def test_single_score_with_multiple_letters
skip
old = { 1 => %w(A E I O U) }
expected = { 'a' => 1, 'e' => 1, 'i' => 1, 'o' => 1, 'u' => 1 }

old = {
1 => ["A", "E", "I", "O", "U"]
}
expected = {
'a' => 1,
'e' => 1,
'i' => 1,
'o' => 1,
'u' => 1
}
assert_equal expected, ETL.transform(old)
end

def test_more_keys
def test_multiple_scores_with_multiple_letters
skip
old = { 1 => %w(A E), 2 => %w(D G) }
old = {
1 => ["A", "E"],
2 => ["D", "G"]
}
expected = {
'a' => 1,
'e' => 1,
'd' => 2,
'e' => 1,
'g' => 2
}

assert_equal expected, ETL.transform(old)
end

def test_full_dataset
def test_multiple_scores_with_differing_numbers_of_letters
skip
old = {
1 => %w(A E I O U L N R S T),
2 => %w(D G),
3 => %w(B C M P),
4 => %w(F H V W Y),
5 => %w(K),
8 => %w(J X),
10 => %w(Q Z)
1 => ["A", "E", "I", "O", "U", "L", "N", "R", "S", "T"],
2 => ["D", "G"],
3 => ["B", "C", "M", "P"],
4 => ["F", "H", "V", "W", "Y"],
5 => ["K"],
8 => ["J", "X"],
10 => ["Q", "Z"]
}

expected = {
'a' => 1, 'b' => 3, 'c' => 3, 'd' => 2, 'e' => 1,
'f' => 4, 'g' => 2, 'h' => 4, 'i' => 1, 'j' => 8,
'k' => 5, 'l' => 1, 'm' => 3, 'n' => 1, 'o' => 1,
'p' => 3, 'q' => 10, 'r' => 1, 's' => 1, 't' => 1,
'u' => 1, 'v' => 4, 'w' => 4, 'x' => 8, 'y' => 4,
'a' => 1,
'b' => 3,
'c' => 3,
'd' => 2,
'e' => 1,
'f' => 4,
'g' => 2,
'h' => 4,
'i' => 1,
'j' => 8,
'k' => 5,
'l' => 1,
'm' => 3,
'n' => 1,
'o' => 1,
'p' => 3,
'q' => 10,
'r' => 1,
's' => 1,
't' => 1,
'u' => 1,
'v' => 4,
'w' => 4,
'x' => 8,
'y' => 4,
'z' => 10
}

assert_equal expected, ETL.transform(old)
end

# Problems in exercism evolve over time, as we find better ways to ask
# questions.
# The version number refers to the version of the problem you solved,
# not your solution.
#
# Define a constant named VERSION inside of the top level BookKeeping
# module, which may be placed near the end of your file.
#
# In your file, it will look like this:
#
# module BookKeeping
# VERSION = 1 # Where the version number matches the one in the test.
# end
#
# If you are curious, read more about constants on RubyDoc:
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html

def test_bookkeeping
skip
assert_equal 1, BookKeeping::VERSION
end
end
4 changes: 4 additions & 0 deletions exercises/etl/example.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
module BookKeeping
VERSION = 1
end

class ETL
def self.transform(old)
data = {}
Expand Down
28 changes: 28 additions & 0 deletions lib/etl_cases.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
require 'generator/exercise_cases'

class EtlCase < ExerciseCase
def workload
indent_lines([
"old = {\n #{format(input)}\n }",
"expected = {\n #{format(expected)}\n }",
"assert_equal expected, ETL.transform(old)"
], 4)
end

private

def format(obj)
case
when obj.respond_to?(:each_pair)
indent_lines(
obj.each_with_object([]) {|(k, v), string| string << "#{format(k)} => #{format(v)}" },
6,
",\n"
)
when obj.respond_to?(:each) then obj
when obj.to_s =~ /\d+/ then obj.to_i
else %Q('#{obj}')
end
end

end
4 changes: 2 additions & 2 deletions lib/generator/exercise_cases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ def skipped
# "#{assert} Isogram.is_isogram?(string)"
# ], 4
# )
def indent_lines(code, depth)
code.join("\n" + ' ' * depth)
def indent_lines(code, depth, separator = "\n")
code.join(separator + ' ' * depth)
end

# used in workload, for example, as
Expand Down

0 comments on commit 9a73ca5

Please sign in to comment.