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.
61 lines
1.5 KiB
61 lines
1.5 KiB
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 |