# a mixin for your models to add default report behavior module Reportable extend ActiveSupport::Concern def to_csv self.class.csv_builder.columns.map do |column| CSVBuilder.call_method_or_proc_on self, column.data end end module ClassMethods def csv_builder CSVBuilder.default_for_resource(self) end def csv_columns csv_builder.columns.map(&:name) end def report_scope all end end end