An open API service indexing awesome lists of open source software.

https://github.com/maceto/file_generator

Export information from your application as text files, generating these text files using a string format description.
https://github.com/maceto/file_generator

Last synced: about 1 year ago
JSON representation

Export information from your application as text files, generating these text files using a string format description.

Awesome Lists containing this project

README

          

# file_generator

## Description

Every time we need to export information from your application as text files, we are
writing code for every format we need to generate.

FileGenerator tries to minimize the ammount of code needed to perform this task.

## How does it work?

FileGenerator takes the header, body, and footer file formats as input
and additionally a hash with the data we want to export.

The format is expressed as string as follows:

each column has the next attributes

* Name: this name would match with the key in the hash
* Length: size of the column
* Value: dafult value in case that name doesn't match with any hash key
* Fill: for completing the space of length
* Align: align to Left or Right

as for instance:


"id:3:0:0:D,name:30:: :I,region_id:3:0:0:D"

and the data we want to export is:


[{"id"=>1, "region_id"=>7, "name"=>"les Escaldes"},{"id"=>2, "region_id"=>7, "name"=>"Lima"}]

FileGenerator will try to match the attribute names with the format
names, if they dont match, it will assign the value to the line of the
file to export, otherwise it will take the default value defined in the
format.

It also has names for the format which stablishes a special field as for
instance:

time: puts the current date with the format "YYYYMMDD"·

nreg : put the sum of records in the file in the body

## Usage

For example if you have a Ruby on Rails application and you need to export
diferents models like City, Region, Localities, Contacts, etc... you could define a controller Exports and for each model a method to export. Like the next example:

Add file_generator to your Gemfile.


gem 'file_generation'

Create the method in the Exports controller for generate the file


class ExportsController
def cities
headerformat = "treg:2:CC::I,csuc:3:193::I,time:8:0::I"
bodyformat = "id:3:0:0:D,name:30:: :I,region_id:3:0:0:D"
footerformat = "pie:2:CC::I,csuc:3:193::I,nreg:10:0:0:D"
cities = [{"id"=>1, "region_id"=>7, "name"=>"les Escaldes"},{"id"=>2, "region_id"=>7, "name"=>"Lima"}]
content = FileGenerator::Base.generate_file(cities, headerformat, bodyformat, footerformat)
send_data content, :filename => "cities.txt"
end

def contacts
...
end

end

Add the routes in config/routes.rb


resources :exports do
get 'cities', :on => :collection
end

and put the link in the view


link_to("Export Cities", cities_exports_path)

with this example you would get a file like this


CC19320120206
001les Escaldes 007
002Lima 007
CC1930000000002

# what next ?

* Make header and footer optional
* Add .csv format like a option
* Add more pre defined columns like "nreg" or "time"
* Add more format for the pre defined column "time"