Sha256: 2205b5646ebfe16407451b715e65fbcdc2108c133669d67124adebbaa2c0c6ac

Contents?: true

Size: 1008 Bytes

Versions: 11

Compression:

Stored size: 1008 Bytes

Contents

class Hirb::Helpers::ActiveRecordTable < Hirb::Helpers::ObjectTable
  # Rows are Rails' ActiveRecord::Base objects.
  # Takes same options as Hirb::Helpers::Table.render except as noted below.
  #
  # Options:
  #   :fields- Can be any attribute, column or not. If not given, this defaults to the database table's columns.
  def self.render(rows, options={})
    rows = [rows] unless rows.is_a?(Array)
    options[:fields] ||= 
      begin
        fields = rows.first.class.column_names
        fields.map {|e| e.to_sym }
      end
    if query_used_select?(rows)
      selected_columns = rows.first.attributes.keys
      sorted_columns = rows.first.class.column_names.dup.delete_if {|e| !selected_columns.include?(e) }
      sorted_columns += (selected_columns - sorted_columns)
      options[:fields] = sorted_columns.map {|e| e.to_sym}
    end
    super(rows, options)
  end

  def self.query_used_select?(rows) #:nodoc:
    rows.first.attributes.keys.sort != rows.first.class.column_names.sort
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
cldwalker-hirb-0.2.2 lib/hirb/helpers/active_record_table.rb
cldwalker-hirb-0.2.3 lib/hirb/helpers/active_record_table.rb
cldwalker-hirb-0.2.4 lib/hirb/helpers/active_record_table.rb
cldwalker-hirb-0.2.5 lib/hirb/helpers/active_record_table.rb
cldwalker-hirb-0.2.6 lib/hirb/helpers/active_record_table.rb
hirb-0.2.7 lib/hirb/helpers/active_record_table.rb
hirb-0.2.6 lib/hirb/helpers/active_record_table.rb
hirb-0.2.2 lib/hirb/helpers/active_record_table.rb
hirb-0.2.3 lib/hirb/helpers/active_record_table.rb
hirb-0.2.4 lib/hirb/helpers/active_record_table.rb
hirb-0.2.5 lib/hirb/helpers/active_record_table.rb