Sha256: 636b799de3a3e88d744c3a6b08355f280497f4a8ca97ce42dda5f691dabfe1a5

Contents?: true

Size: 1.59 KB

Versions: 7

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

require 'source/repositories/containers/data_table'

class DataList
  # Это "абстрактный" класс
  private_class_method :new

  attr_writer :objects

  # Конструктор, принимает массив любых объектов
  def initialize(objects)
    self.objects = objects
    @listeners = []
  end

  def add_listener(listener)
    @listeners << listener
  end

  def remove_listener(listener)
    @listeners.delete(listener)
  end

  def notify
    @listeners.each { |lst| lst.on_datalist_changed(data_table) }
  end

  # Выбрать элемент по номеру
  def select_element(number)
    self.selected_num = number < objects.size ? number : nil
  end

  def selected_id
    objects[selected_num].id
  end

  # Получить DataTable со всеми элементами.
  def data_table
    result = []
    counter = 0
    objects.each do |obj|
      row = []
      row << counter
      row.push(*table_fields(obj))
      result << row
      counter += 1
    end
    DataTable.new(result)
  end

  # Добавить элементы в конец списка
  def replace_objects(objects)
    self.objects = objects.dup
    notify
  end

  protected

  # Список значений полей для DataTable. Переопределить в наследниках
  def table_fields(_obj)
    []
  end

  # Имена атрибутов объектов по порядку. Переопределить в наследниках
  def column_names
    []
  end

  private

  attr_reader :objects
  attr_accessor :selected_num
end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
rybish_code-1.1.4 lib/source/repositories/containers/data_list.rb
shnaider_code-1.1.6 lib/source/repositories/containers/data_list.rb
rubbish_code-1.1.4 lib/source/repositories/containers/data_list.rb
rubbish_code-1.1.3 lib/source/repositories/containers/data_list.rb
rubbish_code-1.1.2 lib/source/repositories/containers/data_list.rb
rubbish_code-1.1.1 lib/source/repositories/containers/data_list.rb
rubbish_code-1.1.0 lib/source/repositories/containers/data_list.rb