ActiveExport
ActiveExport generate CSV/XML/YAML String or CSV/XML/YAML file.
You can write the logic of generating csv or xml, yaml to a YAML file.
Another Support:
- csv label adapt i18n.
- when the value of csv data is null or blank or true or false, change another label
ex) nil to '', blank to 'empty', true to 'Yes', false to 'No'
Installation
Add this line to your application's Gemfile:
gem 'active_export'
And then execute:
$ bundle
Or install it yourself as:
$ gem install active_export
Generate the config initializer file and default.yml
$ rails g active_export:install
Example
ActiveExport::Csv.export(Book.scoped, source_name, namespace)
# => csv string
# "Title","AuthorName","Price(in tax)","Published"
# "Ruby","Bob","28","2012-08-01"
# "Rails","Alice","18","2012-07-01"
Price(in tax) 28
is (book.price * 1.095).ceil.to_i
result.
YAML file:
namespace:
label_prefix: 'book'
methods:
- name
- author.name
- price: '(price * 1.095).ceil.to_i'
- created_at.strftime('%Y-%m-%d')
Write the same way without the ActiveExport:
CSV.generate do |csv|
csv << ['Title', 'Author', 'Price(in Tax)', 'Published Date']
Book.all.each do |book|
csv_data = []
csv_data << book.name.blank? ? '' : book.name
csv_data << book.author ? book.author.name : ''
csv_data << (book.price * 1.095).ceil.to_i
csv_data << book.created_at.blank? ? '' : book.created_at.strftime('%Y-%m-%d')
csv << csv_data
end
end
end
Usage
# Exporting Csv String
ActiveExport::Csv.export(Book.scoped, source_name, namespace)
# Exporting Csv File
ActiveExport::Csv.export_file(Book.scoped, source_name, namespace, filename)
# Exporting Xml String
ActiveExport::Xml.export(Book.scoped, source_name, namespace)
# Exporting Xml File
ActiveExport::Xml.export_file(Book.scoped, source_name, namespace, filename)
# Exporting Yaml String
ActiveExport::Yaml.export(Book.scoped, source_name, namespace)
# Exporting Yaml File
ActiveExport::Yaml.export_file(Book.scoped, source_name, namespace, filename)
ActiveExport::Csv
Support 2 methods:
-
export(data, source_name, namespace, options = {})
... Generate Csv string -
export_file(data, source_name, namespace, filename, options = {})
... Generate Csv file
options:
-
:eval_methods
... override export method from YAML file. -
:label_keys
... override csv header label from YAML file. -
:label_prefix
... override csv header label prefix from YAML file. -
:csv_options
... Csv generate options. -
:header
... false to not export Csv header labels.
features:
- Support encoding
ActiveExport::Xml
Support 2 methods:
-
ActiveExport::Xml.export(Book.scoped, source_name, namespace)
... Generate Xml string -
ActiveExport::Xml.export_file(Book.scoped, source_name, namespace, filename)
... Generate Xml file
options:
- TODO
features:
- Support encoding
ActiveExport::Yaml
Support 2 methods:
-
ActiveExport::Yaml.export(Book.scoped, source_name, namespace)
... Generate Yaml string -
ActiveExport::Yaml.export_file(Book.scoped, source_name, namespace, filename)
... Generate Yaml file
options:
- TODO
features:
- exporting i18n labels
YAML file format
namespace: label_prefix: label_prefix methods: - method_name - label_name: method_name # If using Xml export xml_format: encoding: 'UTF-8' header: | footer: | body: | %%label_name%% namespace_2: label_prefix: ... ... ````
xml_format:
TODO
I18n field priority
active_export.#{source_name}.#{namespace}.(label_prefix_)#{key}
activerecord.attributes.(label_prefix.)#{key}
activemodel.attributes.(label_prefix.)#{key}
#{key.to_s.gsub(".", "_").humanize}
ex)
key ... author.name label_prefix ... book source_name ... default namespace ... book_1 1. `active_export.default.book_1.author_name` 2. `activerecord.attributes.author.name` 3. `activemode.attributes.author.name` 4. `author_name".humanize # => Author name`
ex2)
key ... "name" label_prefix ... "book" source_name ... "default" namespace ... "book_1" 1. `active_export.default.book_1.book_name` 2. `activerecord.attributes.book.name` 3. `activemode.attributes.book.name` 4. `book_name`.humanize # => Book name
methods examples
book:
- "author.name" # call [instance].author.name
- "price > 0" # call [instance].price > 0 # => true or false
- "price.to_f / 2.0" # call [instance].price.to_f / 2.0
- "sprintf("%#b", price)" # call sprintf("%#b", [instance].price)
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request