lib/table.rb in table_pal-0.3.1 vs lib/table.rb in table_pal-0.3.2
- old
+ new
@@ -1,14 +1,16 @@
module TablePal
class Table
- attr_reader :rows, :columns, :cells
+ attr_reader :validations, :rows, :columns, :cells_by_row_and_column, :cells_by_column
- def initialize
- @rows = []
- @columns = []
- @cells = []
+ def initialize(validations: false)
+ @validations = validations
+ @rows = []
+ @columns = []
+ @cells_by_column = {}
+ @cells_by_row_and_column = {}
end
def create_row(options = {})
Validate.new(__method__, options)
@@ -20,35 +22,49 @@
def create_underline
Row.new(table: self).cells_as_underline
end
def create_column(options = {})
- Validate.new(__method__, options)
+ Validate.new(__method__, options) if validations
Column.new(options.merge(table: self)).tap do |column|
+ cells_by_column[column] = []
@columns << column
end
end
def create_cell(options = {})
- Validate.new(__method__, options)
+ Validate.new(__method__, options) if validations
- ensure_cell_does_not_exist(options.slice(:row, :column))
+ row = options[:row]
+ column = options[:column]
+ ensure_cell_does_not_exist(row: row, column: column)
+
Cell.new(options).tap do |cell|
- @cells << cell
+ cells_by_column[column] << cell
+ cells_by_row_and_column[key(options)] = cell
end
end
- def find_cell(row:, column:)
- cells.find { |cell| cell.row == row && cell.column == column }
+ def find_cell(options)
+ cells_by_row_and_column[key(options)]
end
+ def key(options)
+ {
+ row: options[:row],
+ column: options[:column]
+ }
+ end
+
def select_cells(column:)
- cells.select { |cell| cell.column == column }
+ cells_by_column[column]
end
def ensure_cell_does_not_exist(row:, column:)
+ return unless validations
+
cell = find_cell(row: row, column: column)
return unless cell
raise TablePalError, "Cell with content: '#{cell.content}' already exists at this row and column."