Files
danbooru/app/logical/table_builder.rb
2019-11-17 22:35:53 -06:00

39 lines
860 B
Ruby

class TableBuilder
class Column
attr_reader :attribute, :name, :block, :html_attributes
def initialize(attribute = nil, name: attribute.to_s.titleize, **html_attributes, &block)
@attribute = attribute
@html_attributes = html_attributes
@name = name
@block = block
end
def value(item)
if block.present?
block.call(item, self)
nil
else
item.send(attribute)
end
end
end
attr_reader :columns, :html_attributes, :items
def initialize(items, **html_attributes)
@items = items
@columns = []
@html_attributes = html_attributes
yield self if block_given?
end
def column(*options, &block)
@columns << Column.new(*options, &block)
end
def row_attributes(item)
{ id: "#{item.model_name.singular}-#{item.id}", "data-id": item.id }
end
end