class TableCreator::Col

Attributes

anchor[RW]
colspan[RW]
data[RW]
data_type[RW]
options[RW]
row[RW]
type[RW]

Public Class Methods

new(data, row, type = nil) click to toggle source
# File lib/table_creator/col.rb, line 7
def initialize(data, row, type = nil)
  @row = row
  @options = {}
  if data.is_a? Hash
    @colspan = data[:colspan]
    @data = data[:data]
    @link_to = data[:link_to]
    @anchor = data[:anchor]
    @options = data.except(:colspan, :data, :link_to, :anchor)
  else
    @data = data
  end

  @data_type = case @data.class.to_s.to_sym
  when :Integer
    :number
  when :String
    :text
  else
    nil
  end
  @type = type || :data
  self
end

Public Instance Methods

quote(data) click to toggle source
# File lib/table_creator/col.rb, line 44
def quote(data)
  formatted_data = format_csv(data)
  quoted = formatted_data.to_s.gsub('"', '\"')
  if formatted_data.to_s.include?(',')
    '"'+quoted+'"'
  else
    quoted
  end
end
to_csv() click to toggle source
# File lib/table_creator/col.rb, line 32
def to_csv
  if @colspan && @colspan > 1
    cols = [quote(@data)]
    (@colspan-1).times do
      cols << ''
    end
    cols
  else
    quote(@data)
  end
end
to_html() click to toggle source
# File lib/table_creator/col.rb, line 54
def to_html
  formatter = TableCreator.formatters(:html)[@data.class]
  content = if formatter
    result = formatter.is_a?(Symbol) ? @data.send(formatter) : formatter.call(@data)
    if result.is_a?(Hash)
      link_to = result[:link_to]
      anchor  = result[:anchor]
      @options[:class] ||= @data.class.name.underscore
      result.fetch(:data)
    else
      @options[:class] ||= @data.class.name.underscore
      result
    end
  else
    @data
  end

  # Links are passed in manually too
  link_to ||= @link_to

  col_tag = type == :header ? :th : :td
  content = content_tag :a, content, :href => link_to if link_to
  content = content_tag :a, content, :name => anchor if anchor
  tag_class = [options[:class].presence, data_type.presence].compact.join(' ')
  attributes = options.except(:type).merge(:class => tag_class, :colspan => colspan)

  content_tag col_tag, content.to_s.gsub(/\n/, tag(:br)).html_safe, attributes
end

Private Instance Methods

format_csv(data) click to toggle source
# File lib/table_creator/col.rb, line 85
def format_csv(data)
  formatter = TableCreator.formatters(:csv)[data.class]
  return data unless formatter
  result = formatter.is_a?(Symbol) ? @data.send(formatter) : formatter.call(@data)
  if result.is_a?(Hash)
    result.fetch(:data)
  else
    result
  end
end