Sha256: 4eb63fee4addf29ae9f9861f34b86a2fbe0518cb5d9c0f5d0a874a03e8c0179b
Contents?: true
Size: 858 Bytes
Versions: 5
Compression:
Stored size: 858 Bytes
Contents
require "csv" require "active_support/core_ext/string/inflections" module Decisive class StreamCSVContext < Struct.new(:records, :filename, :block) class Column < Struct.new(:label, :block); end def initialize *args super @columns = [] instance_eval &block end attr_reader :columns def column label, value=nil, &block # field, label: field.to_s.humanize, &block value ||= label.parameterize.underscore.to_sym block ||= ->(record) { record.send(value) } columns << Column.new(label, block) end def each yield header records.map do |record| row = columns.map do |column| column.block.call(record).to_s end yield row end end def csv? true end private def header columns.map(&:label) end end end
Version data entries
5 entries across 5 versions & 1 rubygems