class ActiveAdmin::CSVBuilder
CSVBuilder
stores CSV configuration
Usage example:
csv_builder = CSVBuilder.new csv_builder.column :id csv_builder.column("Name") { |resource| resource.full_name } csv_builder.column(:name, humanize_name: false) csv_builder.column("name", humanize_name: false) { |resource| resource.full_name } csv_builder = CSVBuilder.new col_sep: ";" csv_builder = CSVBuilder.new humanize_name: false csv_builder.column :id
Constants
- COLUMN_TRANSITIVE_OPTIONS
Attributes
columns[R]
options[R]
view_context[R]
Public Class Methods
default_for_resource(resource)
click to toggle source
Return a default CSVBuilder
for a resource The CSVBuilder's columns would be Id followed by this resource's content columns
# File lib/active_admin/csv_builder.rb, line 22 def self.default_for_resource(resource) new resource: resource do column :id resource.content_columns.each { |c| column c } end end
new(options = {}, &block)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 33 def initialize(options = {}, &block) @resource = options.delete(:resource) @columns, @options, @block = [], options, block end
Public Instance Methods
build(controller, csv)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 42 def build(controller, csv) @collection = controller.send :find_collection, except: :pagination columns = exec_columns controller.view_context options = ActiveAdmin.application.csv_options.merge self.options bom = options.delete :byte_order_mark column_names = options.delete(:column_names) { true } csv_options = options.except :encoding_options, :humanize_name csv << bom if bom if column_names csv << CSV.generate_line(columns.map{ |c| encode c.name, options }, csv_options) end ActiveRecord::Base.uncached do (1..paginated_collection.total_pages).each do |page| paginated_collection(page).each do |resource| resource = controller.send :apply_decorator, resource csv << CSV.generate_line(build_row(resource, columns, options), csv_options) end end end csv end
build_row(resource, columns, options)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 75 def build_row(resource, columns, options) columns.map do |column| encode call_method_or_proc_on(resource, column.data), options end end
column(name, options = {}, &block)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 38 def column(name, options = {}, &block) @columns << Column.new(name, @resource, column_transitive_options.merge(options), block) end
encode(content, options)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 81 def encode(content, options) if options[:encoding] content.to_s.encode options[:encoding], options[:encoding_options] else content end end
exec_columns(view_context = nil)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 68 def exec_columns(view_context = nil) @view_context = view_context @columns = [] # we want to re-render these every instance instance_exec &@block if @block.present? columns end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/active_admin/csv_builder.rb, line 89 def method_missing(method, *args, &block) if @view_context.respond_to? method @view_context.public_send method, *args, &block else super end end
Private Instance Methods
batch_size()
click to toggle source
# File lib/active_admin/csv_builder.rb, line 127 def batch_size 1000 end
column_transitive_options()
click to toggle source
# File lib/active_admin/csv_builder.rb, line 119 def column_transitive_options @column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS) end
paginated_collection(page_no = 1)
click to toggle source
# File lib/active_admin/csv_builder.rb, line 123 def paginated_collection(page_no = 1) @collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size) end