The code creates a table and adds rows and columns.
- Does it make sense to write the code like this?
- Would you design it differently?
- Is there a better OOP approach to this?
class Table attr_reader :grid def initialize(rows: , columns:) @grid = construct(rows, columns) end def construct(rows, columns) raise 'arguments must be arrays' unless rows.is_a?(Array) && columns.is_a?(Array) table = [] rows = [] if rows.nil? rows.each do |row| table << columns.map do |c| c end end table end end
Here are the specs which describe what it is doing:
require 'spec_helper' require_relative '..\test' RSpec.describe Table do it 'is empty' do table = Table.new(rows: [], columns: []) expect(table.grid).to eq [] end it 'raises if no array is given' do expect { Table.new(rows: [], columns: 1) }.to raise_error RuntimeError expect { Table.new(rows: 1, columns:[]) }.to raise_error RuntimeError end it 'has several rows and columns' do row = double('row') column = double('column') col = Column.new.value = 14 table = Table.new(rows: [1, 3, 3], columns: [1, col]) expect(table.grid).to eq [ [1, 2], [1, 2], [1, 2] ] end end