Sha256: e9c8869e35d5a676742a657b0f31c2d4c8e092f23bd2063f3e2d815901f2fcf9
Contents?: true
Size: 995 Bytes
Versions: 5
Compression:
Stored size: 995 Bytes
Contents
module Decisive class Renderer < Struct.new(:records, :block) include Enumerable def each &block (header + body).each(&block) end private def header [keys] end def body hashes.map do |hash| hash.values_at(*keys) end end def keys @keys ||= hashes.flat_map(&:keys).uniq end def hashes @hashes ||= records.map do |record| Row.new(record, block).to_hash end end class Row < Struct.new(:record, :block) module Nothing; end def to_hash @hash = {} instance_exec record, &block @hash end private def column key, value=Nothing, &block @hash[key] = if block_given? block.call(record) elsif value.is_a?(Symbol) record.send(value) elsif value == Nothing record.send(key.parameterize.underscore.to_sym) else value end.to_s end end end end
Version data entries
5 entries across 5 versions & 1 rubygems