require_relative './data_table' class DataListStudentShort < DataList def initialize(items) column_names = ['№', 'Фамилия и инициалы', 'Телефон', 'Telegram', 'Email'] filtered = items.select { |item| item.is_a?(StudentShort) } super(filtered, column_names) end def items=(new_items) filtered = new_items.select { |item| item.is_a?(StudentShort) } @items = filtered.dup end def get_names column_names end def get_data data = prepare_table_data DataTable.new(data) end private def column_names ['№', 'Фамилия и инициалы', 'Телефон', 'Telegram', 'Email'] end def prepare_table_data @items.each_with_index.map do |item, index| prepare_row(item, index) end end def prepare_row(item, index) [ index + 1, # id item.surname_initials, # Фамилия и инициалы item.phone || '-', # Телефон (или прочерк) item.telegram || '-', # Telegram (или прочерк) item.email || '-' # Email (или прочерк) ] end def extract_surname_initials(item) item.respond_to?(:surname_initials) ? item.surname_initials : 'N/A' end def extract_phone(item) item.respond_to?(:phone) ? item.phone : nil end def extract_telegram(item) item.respond_to?(:telegram) ? item.telegram : nil end def extract_email(item) item.respond_to?(:email) ? item.email : nil end end