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_list_student_short.rb

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