Sha256: 13ca31846157185d5c140bec87e78b4e11705938e16275570df47507ccf7d3da

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

module AbAdmin
  module Utils
    # CSVBuilder stores CSV configuration
    #
    # Usage example:
    #
    #   csv_builder = CSVBuilder.new
    #   csv_builder.column :id
    #   csv_builder.column("Name") { |resource| resource.full_name }
    #
    #   csv_builder = CSVBuilder.new :separator => ";"
    #   csv_builder.column :id
    #
    #
    class CSVBuilder

      # Return a default CSVBuilder for a resource
      # The CSVBuilder's columns would be Id followed by this
      # resource's content columns
      def self.default_for_resource(resource)
        new.tap do |csv_builder|
          csv_builder.column(:id)
          resource.content_columns.each do |content_column|
            csv_builder.column(content_column.name.to_sym)
          end
        end
      end

      attr_reader :columns, :column_separator

      def initialize(options={}, &block)
        @columns = []
        @column_separator = options.delete(:separator)
        instance_eval &block if block_given?
      end

      # Add a column
      def column(name, &block)
        @columns << Column.new(name, block)
      end

      class Column
        attr_reader :name, :data

        def initialize(name, block = nil)
          @name = name.is_a?(Symbol) ? name.to_s.titleize : name
          @data = block || name.to_sym
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ab_admin-0.1.2 lib/ab_admin/utils/csv_builder.rb
ab_admin-0.1.1 lib/ab_admin/utils/csv_builder.rb
ab_admin-0.1.0 lib/ab_admin/utils/csv_builder.rb