34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/cross_table.rb', line 34
def of(grouped_hash, y_keys:, x_keys:, ret_type: nil)
vals = y_keys.map do |y_dig_keys|
x_keys.map do |x_dig_keys|
grouped_hash.dig(*y_dig_keys).dig(*x_dig_keys)
end
end
case ret_type
when :data_only
return vals
when :xy_titles
return ([nil] + y_keys).zip([x_keys] + vals).map do |row_title, value_row|
[row_title] + value_row
end
end
y_keys.map.zip(
vals.map do |row|
x_keys.zip(row).to_h
end
).to_h
end
|