# Riif A simple DSL to generate IIF file. [![Build Status](https://travis-ci.org/linjunpop/riif.svg?branch=master)](https://travis-ci.org/linjunpop/riif) [![Gem Version](https://badge.fury.io/rb/riif.svg)](http://badge.fury.io/rb/riif) [![Code Climate](https://codeclimate.com/github/linjunpop/riif.svg)](https://codeclimate.com/github/linjunpop/riif) [![Coverage Status](https://coveralls.io/repos/linjunpop/riif/badge.svg?branch=master)](https://coveralls.io/r/linjunpop/riif) ## Installation Add this line to your application's Gemfile: gem 'riif' And then execute: $ bundle Or install it yourself as: $ gem install riif ## Limitation You have to use `klass` for `class` and `_1099` for `1099` ## Usage ### With Rails With a custom template handler, it works with Rails. ```ruby # invoices_controller.rb class InvoicesController < ApplicationController def show respond_to do |format| format.iif { render iif: render_to_string, filename: 'batman'} format.html end end end ``` ```ruby # show.iif.riif iif.trns do row do trnsid 123 trnstype 'INVOICE' date '8/31/1988' accnt 'Accounts Receivable' name 'Customer' amount 20 docnum invoice.id clear 'N' toprint 'N' addr1 'Baker' addr2 'Customer' end spl do row do splid '777' trnstype 'INVOICE' date '8/31/1988' accnt 'Income Account' amount '-20' clear 'N' qnty '-2' price 10 invitem 'Sales Item' taxable 'N' end end spl do row do splid '888' end end end ``` ### Without Rails ```ruby Riif::IIF.new do trns do row do trnsid 123 trnstype 'INVOICE' date '8/31/1988' accnt 'Accounts Receivable' name 'Customer' amount 20 docnum 1 clear 'N' toprint 'N' addr1 'Baker' addr2 'Customer' end spl do row do splid '777' trnstype 'INVOICE' date '8/31/1988' accnt 'Income Account' amount '-20' clear 'N' qnty '-2' price 10 invitem 'Sales Item' taxable 'N' end end spl do row do splid '888' end end end end ``` Result: ``` !TRNS TRNSID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO CLEAR TOPRINT ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 DUEDATE TERMS PAID SHIPDATE !SPL SPLID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO CLEAR QNTY PRICE INVITEM PAYMETH TAXABLE REIMBEXP EXTRA !ENDTRNS TRNS 123 INVOICE 8/31/1988 Accounts Receivable Customer 20 1 N N Baker Customer SPL 777 INVOICE 8/31/1988 Income Account -20 N -2 10 Sales Item N SPL 888 ENDTRNS ``` If you prefer, you can pass an argument along with your block: ```ruby Riif::IIF.new do |riif| riif.trns do |trns| trns.row do |row| row.trnsid 123 row.trnstype 'INVOICE' row.date '8/31/1988' row.accnt 'Accounts Receivable' row.name 'Customer' end end end ``` ## Editors ### Vim ```VimL au BufWinEnter,BufRead,BufNewFile *.riif set filetype=ruby ``` ## Resources [Use Intuit Interchange Format (.iif) files](http://support.quickbooks.intuit.com/support/articles/HOW12778) ## Contributing 1. Fork it 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 new Pull Request ## Contributors :beers: https://github.com/linjunpop/riif/graphs/contributors ## Changes See [CHANGELOG.md](CHANGELOG.md)