No commit activity in last 3 years
No release in over 3 years
Export from your Rails app to CSV in no time.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.14
>= 0
~> 10.0
~> 3.0

Runtime

 Project Readme

LpCSVExportable

What is LpCSVExportable?

LpCSVExportable makes it really easy to export your data into a CSV. It is easy to implement, but also highly extendable.

Installation

gem 'lp_csv_exportable'
bundle

Basic Usage

Create a class that includes the module LpCSVExportable::CanExportAsCSV

class ExportUsers
  include LpCSVExportable::CanExportAsCSV

  column :first_name
  column :last_name
  column :email
  column 'User Role', model_methods: %i[membership name]
end

Note: the header argument can be either a symbol or a string.

And then to export, simply instantiate your class and pass in your collection, then call to_csv. For example, in a Rails controller action, you would do:

  def index
    users = User.all

    respond_to do |format|
      format.csv do
        export = ExportUsers.new
        export.collection = users
        send_data export.to_csv
      end
    end
  end

The Column Method

Every column in a CSV contains (1) a header, and (2) data for each row. The first argument to our column method is the header name. The second argument is an options hash which includes the following:

model_method
model_methods

model_method is used to determine how to access the data on the object. Let's say we are exporting a CSV of users and our User object has a first_name database column. In order to access the first name of a user, we need to call first_name on an instance of User. Therefore, the following would suffice:

column 'First Name', model_method: :first_name

When the first argument to column is a symbol and no value is passed for model_method or model_methods, we will assume it is both the header and the model method. That's why the following will work:

column :first_name

You can also chain methods by using model_methods like so:

column 'First Name', model_methods: [:names, :first]

Finally, you can use custom methods on your Export class like so:

class ExportUsers
  include LpCSVExportable::CanExportAsCSV

  column 'Full Name', model_method: :full_name

  def full_name(obj)
    [obj.first_name, obj.last_name].compact.join(' ')
  end
end

If you would like to default a column to a specific value if the model method returns nil, use the default_value key when defining the column.

column 'Email', model_method: :email, default_value: 'N/A'

TODO

  • Readme: More complex examples
  • Readme: Ways to extend