Sha256: 5a3f8463e1af13bdf6e9786a04ee2e2c0b1fd78f0ab1f4606713fc4d4a0048cb

Contents?: true

Size: 839 Bytes

Versions: 2

Compression:

Stored size: 839 Bytes

Contents

require 'csv'

module Julia
  class Builder
    attr_reader :collection, :csv_options

    def initialize(collection, csv_options = Hash.new)
      @collection, @csv_options = collection, csv_options
    end

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

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

    def build
      CSV.generate(csv_options) 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

2 entries across 2 versions & 1 rubygems

Version Path
julia_builder-0.1.2 lib/julia/builder.rb
julia_builder-0.1.1 lib/julia/builder.rb