class ActiveAdmin::Views::AttributesTable

def build(record, *attrs)

def build(record, *attrs)
  @record = record
  super(:for => @record)
  @table = table
  rows(*attrs)
end

def content_for(attr_or_proc)

def content_for(attr_or_proc)
  value = case attr_or_proc
          when Proc
            attr_or_proc.call(@record)
          else
            content_for_attribute(attr_or_proc)
          end
  value = pretty_format(value)
  value == "" || value.nil? ? empty_value : value
end

def content_for_attribute(attr)

def content_for_attribute(attr)
  if attr.to_s =~ /^([\w]+)_id$/ && @record.respond_to?($1.to_sym)
    content_for_attribute($1)
  else
    @record.send(attr.to_sym)
  end
end

def default_id_for_prefix

def default_id_for_prefix
  'attributes_table'
end

def empty_value

def empty_value
  span I18n.t('active_admin.empty'), :class => "empty"
end

def header_content_for(attr)

def header_content_for(attr)
  if @record.class.respond_to?(:human_attribute_name)
    @record.class.human_attribute_name(attr, :default => attr.to_s.titleize)
  else
    attr.to_s.titleize
  end
end

def row(attr, &block)

def row(attr, &block)
  @table << tr do
    th do
      header_content_for(attr)
    end
    td do
      content_for(block || attr)
    end
  end
end

def rows(*attrs)

def rows(*attrs)
  attrs.each {|attr| row(attr) }
end