Class: Mayak::Csv::Header

Inherits:
T::Struct
  • Object
show all
Extended by:
T::Generic, T::Sig
Defined in:
lib/mayak/csv/header.rb

Constant Summary collapse

Value =
type_member

Instance Method Summary collapse

Instance Method Details

#build_body(values) ⇒ Object



29
30
31
32
33
34
# File 'lib/mayak/csv/header.rb', line 29

def build_body(values)
  rows = values.map do |value|
    Row.new(cells: columns.map { |column| [column, column.serializer.call(value)] })
  end
  Body.new(rows: rows)
end

#build_document(values) ⇒ Object



37
38
39
# File 'lib/mayak/csv/header.rb', line 37

def build_document(values)
  Document[Value].new(header: self, body: build_body(values))
end

#serialize_to_csv(separator: ",") ⇒ Object



42
43
44
# File 'lib/mayak/csv/header.rb', line 42

def serialize_to_csv(separator: ",")
  columns.map(&:name).join(separator)
end

#to_encoder(separator: ",") ⇒ Object



47
48
49
50
51
# File 'lib/mayak/csv/header.rb', line 47

def to_encoder(separator: ",")
  ::Mayak::Csv::Encoder::FromFunction[Value].new(
    fn: -> (values) { build_document(values).serialize_to_csv(separator: separator) }
  )
end

#with_column(name, &serializer) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/mayak/csv/header.rb', line 20

def with_column(name, &serializer)
  new_column = ::Mayak::Csv::Column[Value].new(
    name:       name,
    serializer: -> (value) { serializer.call(value) }
  )
  Header[Value].new(columns: columns.concat([new_column]))
end