Sha256: 84cd27cd142a0ccb02764c6b22f56b2ef69acb35dd7032b7a3f956f70db0a375

Contents?: true

Size: 761 Bytes

Versions: 1

Compression:

Stored size: 761 Bytes

Contents

require 'csv'

module Julia
  class Builder
    attr_reader :collection

    def initialize(collection)
      @collection = collection
    end

    def self.columns
      @columns ||= {}
    end

    def self.column(keyname, action = nil)
      self.columns[keyname] = action
    end

    def build
      CSV.generate do |csv|
        csv << columns.keys

        collection.each do |record|
          csv << columns.map do |key, action|
            get_value(record, key, action)
          end
        end
      end
    end

    protected

    def get_value(record, key, action)
      return record.instance_exec(&action) if action.is_a?(Proc)

      record.send([action, key].compact.first)
    end

    def columns
      self.class.columns
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
julia_builder-0.1.0 lib/julia/builder.rb