# rails_csv_renderer
Custom CSV renderer for ActiveRecord collections
## Rails & Ruby Versions Supported
*Rails:* 4.x
*Ruby:* 2.x
## Installation
Add this line to your application's Gemfile:
gem 'rails_csv_renderer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rails_csv_renderer
## Usage
The rails_csv_renderer allows you to render any collection as CSV data. Result CSV includes all columns of model with localized column's names
```ruby
class ReportsController < ApplicationController
def index
@reports = Report.all
respond_to do |format|
format.csv { render csv: @reports }
end
end
end
```
Will render a CSV file similar to:
Title | Content | Created at | Updated at |
House report | Report about house devices | 2014-07-14 01:00:42 UTC | 2014-07-14 01:00:42 UTC |
Work report | Report about work devices | 2014-07-14 12:42:42 UTC | 2014-07-14 12:42:42 UTC |
### Options
You can pass few options at call of rendrer:
* *:filename* - Name of file. Optional
* *:csv_options* - Options for CSV generator. [Availible options](http://www.ruby-doc.org/stdlib-2.1.2/libdoc/csv/rdoc/CSV.html#method-c-new). Optional
* *:columns* - Array of variables and methods. Name of columns will be created based on your translations. Optional
Example
```ruby
class ReportsController < ApplicationController
def index
@reports = Report.all
respond_to do |format|
format.csv { render csv: @reports, filename: 'custom-reports.csv', csv_options: { col_sep: '\t' }, columns: [:created_at, :title] }
end
end
end
```
### Localize column's names
If you have translations for model's attributes under scope [:activerecord, :attributes, \*model_name\*] names of columns will be
automatically translated.
### Customize CSV
To customize your CSV file with different methods and name of columns you should add next methods to model **csv_header**(class method), **csv_row**.
* **csv_header** should return array with column's titles.
* **csv_row** should return array with values for columns.
```ruby
class Cat < ActiveRecord::Base
def self.csv_header
["ID", "Cat's name"]
end
def csv_row
[id, name]
end
end
```
## Contributing
1. Fork it ( https://github.com/[my-github-username]/rails_csv_renderer/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request