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.
64 lines
1.1 KiB
64 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, column_names = [])
|
|
@items = items.dup.freeze
|
|
@selected = []
|
|
@column_names = column_names
|
|
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
|
|
@column_names
|
|
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 |