riif 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +21 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +157 -0
  8. data/Rakefile +6 -0
  9. data/lib/riif.rb +6 -0
  10. data/lib/riif/dsl/accnt.rb +15 -0
  11. data/lib/riif/dsl/base.rb +51 -0
  12. data/lib/riif/dsl/bud.rb +14 -0
  13. data/lib/riif/dsl/ctype.rb +9 -0
  14. data/lib/riif/dsl/cust.rb +51 -0
  15. data/lib/riif/dsl/emp.rb +31 -0
  16. data/lib/riif/dsl/invitem.rb +32 -0
  17. data/lib/riif/dsl/invmemo.rb +9 -0
  18. data/lib/riif/dsl/klass.rb +9 -0
  19. data/lib/riif/dsl/othername.rb +25 -0
  20. data/lib/riif/dsl/paymeth.rb +9 -0
  21. data/lib/riif/dsl/shipmeth.rb +10 -0
  22. data/lib/riif/dsl/spl.rb +29 -0
  23. data/lib/riif/dsl/terms.rb +13 -0
  24. data/lib/riif/dsl/timeact.rb +17 -0
  25. data/lib/riif/dsl/trns.rb +46 -0
  26. data/lib/riif/dsl/vend.rb +39 -0
  27. data/lib/riif/dsl/vtype.rb +9 -0
  28. data/lib/riif/iif.rb +38 -0
  29. data/lib/riif/rails/template_handler.rb +19 -0
  30. data/lib/riif/railtie.rb +16 -0
  31. data/lib/riif/version.rb +3 -0
  32. data/riif.gemspec +23 -0
  33. data/spec/fixtures/accnt.iif +2 -0
  34. data/spec/fixtures/bud.iif +2 -0
  35. data/spec/fixtures/ctype.iif +2 -0
  36. data/spec/fixtures/cust.iif +2 -0
  37. data/spec/fixtures/emp.iif +2 -0
  38. data/spec/fixtures/invitem.iif +2 -0
  39. data/spec/fixtures/invmemo.iif +2 -0
  40. data/spec/fixtures/klass.iif +2 -0
  41. data/spec/fixtures/othername.iif +2 -0
  42. data/spec/fixtures/paymeth.iif +2 -0
  43. data/spec/fixtures/shipmeth.iif +2 -0
  44. data/spec/fixtures/terms.iif +2 -0
  45. data/spec/fixtures/timeact.iif +2 -0
  46. data/spec/fixtures/trns.iif +7 -0
  47. data/spec/fixtures/vend.iif +2 -0
  48. data/spec/fixtures/vtype.iif +2 -0
  49. data/spec/riif/dsl/accnt_spec.rb +20 -0
  50. data/spec/riif/dsl/bud_spec.rb +21 -0
  51. data/spec/riif/dsl/ctype_spec.rb +17 -0
  52. data/spec/riif/dsl/cust_spec.rb +18 -0
  53. data/spec/riif/dsl/emp_spec.rb +23 -0
  54. data/spec/riif/dsl/invitem_spec.rb +19 -0
  55. data/spec/riif/dsl/invmemo_spec.rb +17 -0
  56. data/spec/riif/dsl/klass_spec.rb +18 -0
  57. data/spec/riif/dsl/othername_spec.rb +21 -0
  58. data/spec/riif/dsl/paymeth_spec.rb +17 -0
  59. data/spec/riif/dsl/shipmeth_spec.rb +17 -0
  60. data/spec/riif/dsl/terms_spec.rb +21 -0
  61. data/spec/riif/dsl/timeact_spec.rb +24 -0
  62. data/spec/riif/dsl/trns_spec.rb +49 -0
  63. data/spec/riif/dsl/vend_spec.rb +19 -0
  64. data/spec/riif/dsl/vtype_spec.rb +17 -0
  65. data/spec/spec_helper.rb +21 -0
  66. metadata +191 -0
@@ -0,0 +1,9 @@
1
+ module Riif::DSL
2
+ class Invmemo < Base
3
+ HEADER_COLUMNS = [
4
+ :name
5
+ ]
6
+ START_COLUMN = 'INVMEMO'
7
+ END_COLUMN = ''
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Riif::DSL
2
+ class Klass < Base
3
+ HEADER_COLUMNS = [
4
+ :name
5
+ ]
6
+ START_COLUMN = 'CLASS'
7
+ END_COLUMN = ''
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ module Riif::DSL
2
+ class Othername < Base
3
+ HEADER_COLUMNS = [
4
+ :name,
5
+ :baddr1,
6
+ :baddr2,
7
+ :baddr3,
8
+ :baddr4,
9
+ :baddr5,
10
+ :phone1,
11
+ :phone2,
12
+ :faxnum,
13
+ :cont1,
14
+ :notepad,
15
+ :salutation,
16
+ :companyname,
17
+ :firstname,
18
+ :midinit,
19
+ :lastname,
20
+ :note
21
+ ]
22
+ START_COLUMN = 'OTHERNAME'
23
+ END_COLUMN = ''
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ module Riif::DSL
2
+ class Paymeth < Base
3
+ HEADER_COLUMNS = [
4
+ :name
5
+ ]
6
+ START_COLUMN = 'PAYMETH'
7
+ END_COLUMN = ''
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Riif::DSL
2
+ class Shipmeth < Base
3
+ HEADER_COLUMNS = [
4
+ :name
5
+ ]
6
+ START_COLUMN = 'SHIPMETH'
7
+ END_COLUMN = ''
8
+ end
9
+ end
10
+
@@ -0,0 +1,29 @@
1
+ module Riif::DSL
2
+ class Spl < Base
3
+ HEADER_COLUMNS = [
4
+ :splid,
5
+ :trnstype,
6
+ :date,
7
+ :accnt,
8
+ :name,
9
+ :class,
10
+ :amount,
11
+ :docnum,
12
+ :memo,
13
+ :clear,
14
+ :qnty,
15
+ :price,
16
+ :invitem,
17
+ :paymeth,
18
+ :taxable,
19
+ :reimbexp,
20
+ :extra
21
+ ]
22
+ START_COLUMN = 'SPL'
23
+ END_COLUMN = ''
24
+
25
+ def headers
26
+ []
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module Riif::DSL
2
+ class Terms < Base
3
+ HEADER_COLUMNS = [
4
+ :name,
5
+ :duedays,
6
+ :discper,
7
+ :discdays,
8
+ :termstype,
9
+ ]
10
+ START_COLUMN = 'TERMS'
11
+ END_COLUMN = ''
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Riif::DSL
2
+ class Timeact < Base
3
+ HEADER_COLUMNS = [
4
+ :date,
5
+ :job,
6
+ :emp,
7
+ :item,
8
+ :pitem,
9
+ :duration,
10
+ :proj,
11
+ :note,
12
+ :billingstatus
13
+ ]
14
+ START_COLUMN = 'TIMEACT'
15
+ END_COLUMN = ''
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ module Riif::DSL
2
+ class Trns < Base
3
+ HEADER_COLUMNS = [
4
+ :trnsid,
5
+ :trnstype,
6
+ :date,
7
+ :accnt,
8
+ :name,
9
+ :class,
10
+ :amount,
11
+ :docnum,
12
+ :memo,
13
+ :clear,
14
+ :toprint,
15
+ :addr1,
16
+ :addr2,
17
+ :addr3,
18
+ :addr4,
19
+ :addr5,
20
+ :duedate,
21
+ :terms,
22
+ :paid,
23
+ :shipdate
24
+ ]
25
+ START_COLUMN = 'TRNS'
26
+ END_COLUMN = 'ENDTRNS'
27
+
28
+ def headers
29
+ [
30
+ ["!#{START_COLUMN}"].concat(HEADER_COLUMNS.map(&:upcase)),
31
+ ["!SPL"].concat(Spl::HEADER_COLUMNS.map(&:upcase)),
32
+ ["!#{END_COLUMN}"]
33
+ ]
34
+ end
35
+
36
+ def rows
37
+ @rows << [END_COLUMN]
38
+ end
39
+
40
+ def spl(&block)
41
+ Spl.new.build(&block)[:rows].each do |row|
42
+ @rows << row
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ module Riif::DSL
2
+ class Vend < Base
3
+ HEADER_COLUMNS = [
4
+ :name,
5
+ :printas,
6
+ :addr1,
7
+ :addr2,
8
+ :addr3,
9
+ :addr4,
10
+ :addr5,
11
+ :vtype,
12
+ :cont1,
13
+ :phone1,
14
+ :phone2,
15
+ :faxnum,
16
+ :note,
17
+ :taxid,
18
+ :limit,
19
+ :terms,
20
+ :notepad,
21
+ :salutation,
22
+ :companyname,
23
+ :firstname,
24
+ :midinit,
25
+ :lastname,
26
+ :custfld1,
27
+ :custfld2,
28
+ :custfld3,
29
+ :custfld4,
30
+ :custfld5,
31
+ :custfld6,
32
+ :custfld7,
33
+ :_1099,
34
+ :note
35
+ ]
36
+ START_COLUMN = 'VEND'
37
+ END_COLUMN = ''
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ module Riif::DSL
2
+ class Vtype < Base
3
+ HEADER_COLUMNS = [
4
+ :name
5
+ ]
6
+ START_COLUMN = 'VTYPE'
7
+ END_COLUMN = ''
8
+ end
9
+ end
data/lib/riif/iif.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'csv'
2
+
3
+ require 'riif/dsl/base'
4
+
5
+ require 'riif/dsl/accnt'
6
+ require 'riif/dsl/bud'
7
+ require 'riif/dsl/ctype'
8
+ require 'riif/dsl/cust'
9
+ require 'riif/dsl/emp'
10
+ require 'riif/dsl/invitem'
11
+ require 'riif/dsl/invmemo'
12
+ require 'riif/dsl/klass'
13
+ require 'riif/dsl/othername'
14
+ require 'riif/dsl/paymeth'
15
+ require 'riif/dsl/shipmeth'
16
+ require 'riif/dsl/spl'
17
+ require 'riif/dsl/terms'
18
+ require 'riif/dsl/timeact'
19
+ require 'riif/dsl/trns'
20
+ require 'riif/dsl/vend'
21
+ require 'riif/dsl/vtype'
22
+
23
+ module Riif
24
+ class IIF
25
+ def method_missing(method_name, *args, &block)
26
+ result = eval("::Riif::DSL::#{method_name.capitalize}").new.build(&block)
27
+
28
+ CSV.generate(col_sep: "\t") do |tsv|
29
+ result[:headers].each do |header|
30
+ tsv << header
31
+ end
32
+ result[:rows].each do |row|
33
+ tsv << row
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,19 @@
1
+ module Riif
2
+ module Rails
3
+ class TemplateHandler
4
+ cattr_accessor :default_format
5
+ self.default_format = Mime::IIF
6
+
7
+ def self.call(template)
8
+ <<-RUBY
9
+ iif = ::Riif::IIF.new
10
+
11
+ #{template.source}
12
+
13
+ RUBY
14
+ end
15
+
16
+ ActionView::Template.register_template_handler :riif, self
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ require 'rails'
2
+
3
+ module Riif
4
+ class Railtie < ::Rails::Railtie
5
+ initializer 'riif' do
6
+ ::ActiveSupport.on_load(:action_view) do
7
+ unless ::Mime::Type.lookup_by_extension(:iif)
8
+ ::Mime::Type.register "application/qbooks", :iif,
9
+ %w(application/qbookspro text/iif)
10
+ end
11
+
12
+ require 'riif/rails/template_handler'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module Riif
2
+ VERSION = "0.0.1"
3
+ end
data/riif.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'riif/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "riif"
8
+ gem.version = Riif::VERSION
9
+ gem.authors = ["Jun Lin"]
10
+ gem.email = ["linjunpop@gmail.com"]
11
+ gem.description = "DSL to generate IIF file"
12
+ gem.summary = "A simple DSL to generate iif file"
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency 'pry'
21
+ gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'awesome_print'
23
+ end
@@ -0,0 +1,2 @@
1
+ !ACCNT NAME ACCNTTYPE OBAMOUNT DESC SCD ACCNUM EXTRA
2
+ ACCNT Jun Lin AR 47
@@ -0,0 +1,2 @@
1
+ !BUD ACCNT PERIOD AMOUNT STARTDATE CLASS CUSTOMER
2
+ BUD Accounts Receivable MONTH foo 3/14/12
@@ -0,0 +1,2 @@
1
+ !CTYPE NAME
2
+ CTYPE Bar
@@ -0,0 +1,2 @@
1
+ !CUST NAME BADDR1 BADDR2 BADDR3 BADDR4 BADDR5 SADDR1 SADDR2 SADDR3 SADDR4 SADDR5 PHONE1 PHONE2 FAXNUM CONT1 CONT2 CTYPE TERMS TAXABLE LIMIT RESALENUM REP TAXITEM NOTEPAD SALUTATION COMPANYNAME FIRSTNAME MIDINIT LASTNAME CUSTFLD1 CUSTFLD2 CUSTFLD3 CUSTFLD4 CUSTFLD5 CUSTFLD6 CUSTFLD7 JOBDESC JOBTYPE JOBSTATUS JOBSTART JOBPROJEND JOBEND NOTE
2
+ CUST Jun Lin 12312323242
@@ -0,0 +1,2 @@
1
+ !EMP NAME INIT ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 SSNO PHONE1 PHONE2 NOTEPAD FIRSTNAME MIDINIT LASTNAME SALUTATION CUSTFLD1 CUSTFLD2 CUSTFLD3 CUSTFLD4 CUSTFLD5 CUSTFLD6 CUSTFLD7 NOTE
2
+ EMP Alfred Master Backer 37 Doctor
@@ -0,0 +1,2 @@
1
+ !INVITEM NAME INVITEMTYPE DESC PURCHASEDESC ACCNT ASSETACCNT COGSACCNT PRICE COST TAXABLE PAYMETH TAXVEND TAXDIST TOPRINT PREFVEND REORDERPOINT EXTRA CUSTFLD1 CUSTFLD2 CUSTFLD3 CUSTFLD4 CUSTFLD5 DEP_TYPE ISPASSEDTHRU
2
+ INVITEM invitem 1 INVENTORY 1
@@ -0,0 +1,2 @@
1
+ !INVMEMO NAME
2
+ INVMEMO invmemo 1
@@ -0,0 +1,2 @@
1
+ !CLASS NAME
2
+ CLASS Foo
@@ -0,0 +1,2 @@
1
+ !OTHERNAME NAME BADDR1 BADDR2 BADDR3 BADDR4 BADDR5 PHONE1 PHONE2 FAXNUM CONT1 NOTEPAD SALUTATION COMPANYNAME FIRSTNAME MIDINIT LASTNAME NOTE
2
+ OTHERNAME Alfred Backer 37 123
@@ -0,0 +1,2 @@
1
+ !PAYMETH NAME
2
+ PAYMETH paymeth 1
@@ -0,0 +1,2 @@
1
+ !SHIPMETH NAME
2
+ SHIPMETH shipmeth 1
@@ -0,0 +1,2 @@
1
+ !TERMS NAME DUEDAYS DISCPER DISCDAYS TERMSTYPE
2
+ TERMS terms 1 10 0.3 1 0
@@ -0,0 +1,2 @@
1
+ !TIMEACT DATE JOB EMP ITEM PITEM DURATION PROJ NOTE BILLINGSTATUS
2
+ TIMEACT 06/21/97 job 1 Jun item 1 13:40 klass 1 0
@@ -0,0 +1,7 @@
1
+ !TRNS TRNSID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO CLEAR TOPRINT ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 DUEDATE TERMS PAID SHIPDATE
2
+ !SPL SPLID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO CLEAR QNTY PRICE INVITEM PAYMETH TAXABLE REIMBEXP EXTRA
3
+ !ENDTRNS
4
+ TRNS 123 INVOICE 8/31/1988 Accounts Receivable Customer 20 1 N N Baker Customer
5
+ SPL 777 INVOICE 8/31/1988 Income Account -20 N -2 10 Sales Item N
6
+ SPL 888
7
+ ENDTRNS
@@ -0,0 +1,2 @@
1
+ !VEND NAME PRINTAS ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 VTYPE CONT1 PHONE1 PHONE2 FAXNUM NOTE TAXID LIMIT TERMS NOTEPAD SALUTATION COMPANYNAME FIRSTNAME MIDINIT LASTNAME CUSTFLD1 CUSTFLD2 CUSTFLD3 CUSTFLD4 CUSTFLD5 CUSTFLD6 CUSTFLD7 _1099 NOTE
2
+ VEND Jun Lin 12312323242 Y
@@ -0,0 +1,2 @@
1
+ !VTYPE NAME
2
+ VTYPE vtype 1
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Riif::DSL::Accnt do
4
+
5
+ let(:expected) { File.read('spec/fixtures/accnt.iif') }
6
+
7
+ let(:accnt) {
8
+ Riif::IIF.new.accnt do
9
+ row do
10
+ name 'Jun Lin'
11
+ accnttype 'AR'
12
+ accnum 47
13
+ end
14
+ end
15
+ }
16
+
17
+ subject { accnt }
18
+
19
+ it { should eq expected }
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Riif::DSL::Bud do
4
+
5
+ let(:expected) { File.read('spec/fixtures/bud.iif') }
6
+
7
+ let(:bud) {
8
+ Riif::IIF.new.bud do
9
+ row do
10
+ accnt 'Accounts Receivable'
11
+ period 'MONTH'
12
+ amount 'foo'
13
+ startdate '3/14/12'
14
+ end
15
+ end
16
+ }
17
+
18
+ subject { bud }
19
+
20
+ it { should eq expected }
21
+ end