You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kubsu-sm5-ruby/lab2/data_table.rb

63 lines
1.1 KiB

class DataTable
def initialize(data)
@data = data.map { |row| row.dup.freeze }.freeze
end
def item(row, col)
return nil unless valid_row?(row) && valid_col?(col)
@data[row][col]
end
def rows_count
@data.size
end
def columns_count
return 0 if @data.empty?
@data.first.size
end
private
def valid_row?(row)
row.between?(0, rows_count - 1)
end
def valid_col?(col)
col.between?(0, columns_count - 1)
end
end
class DataList
def initialize(items)
@items = items.dup.freeze
@selected = []
end
def select(number)
index = number.to_i
toggle_selection(index) if valid_index?(index)
end
def get_selected
@selected.dup
end
def get_names
raise NotImplementedError, "Implement this method in a subclass"
end
def get_data
raise NotImplementedError, "Implement this method in a subclass"
end
private
def valid_index?(index)
index.between?(0, @items.size - 1)
end
def toggle_selection(index)
@selected.include?(index) ? @selected.delete(index) : @selected << index
end
end