csvgen 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README.markdown +11 -12
  2. data/lib/csvgen.rb +17 -1
  3. metadata +3 -3
data/README.markdown CHANGED
@@ -1,15 +1,14 @@
1
- # AnyAP Ruby Export Tool
1
+ # CSV generation library
2
2
 
3
- This tool lets us write customer data exports in Ruby instead of XSLT.
3
+ This tool lets us write customer data exports in Ruby instead of
4
+ XSLT. It's publicly hosted just for fun.
4
5
 
5
- Most exports are going to use the `nokogiri` gem.
6
+ Example usage:
6
7
 
7
- Compare:
8
-
9
- <xsl:text disable-output-escaping="yes">,&quot;</xsl:text>
10
- <xsl:value-of disable-output-escaping="yes" select="AP_Vendor_no"/>
11
- <xsl:text disable-output-escaping="yes">&quot;,</xsl:text>
12
-
13
- vs.
14
-
15
- row[3] = invoice.xpath("AP_Vendor_no").text
8
+ require 'csvgen'
9
+ doc = CSVDoc.new
10
+ doc.quote = "'"
11
+
12
+ doc.row { |r| r[0] = "hey"; r[3] = "ho" }
13
+ doc.row { |r| r[1] = "let's"; r[2] = "go" }
14
+ puts doc.to_s
data/lib/csvgen.rb CHANGED
@@ -1,11 +1,14 @@
1
- # classes to support CSV exports form AnyAP
2
1
 
2
+ # Extensions to Date for our export purposes
3
3
  class Date
4
+ # Print date as Month/Day/Year style
4
5
  def mdy
5
6
  strftime("%m/%d/%y")
6
7
  end
7
8
  end
8
9
 
10
+ # CSV document class. Extend this class to add custom behavior, such
11
+ # as special quoting rules.
9
12
  class CSVDoc
10
13
  attr_accessor :newline
11
14
  attr_accessor :sep
@@ -18,6 +21,9 @@ class CSVDoc
18
21
  self.quote = '"'
19
22
  end
20
23
 
24
+ # Append a row to the document, using the given fixed length, or
25
+ # array of headers. Expects a block, which will be passed the new
26
+ # (empty) row object.
21
27
  def row(len_or_headers)
22
28
  r = CSVRow.new(self, len_or_headers)
23
29
  yield(r)
@@ -29,10 +35,14 @@ class CSVDoc
29
35
  @rows.collect { |r| r.to_s }.join(@newline)
30
36
  end
31
37
 
38
+ # Override this method if you need to implement special quoting
39
+ # rules. By default it only quotes data which contains the quote
40
+ # character itself.
32
41
  def needs_quote(val)
33
42
  val.include?(quote) || val.include?(sep)
34
43
  end
35
44
 
45
+ # Return quoted CSV value string for val.
36
46
  def enquote(val)
37
47
  val_s = val.to_s
38
48
  if needs_quote(val_s) then
@@ -43,6 +53,7 @@ class CSVDoc
43
53
  end
44
54
  end
45
55
 
56
+ # Represents a single CSV row.
46
57
  class CSVRow
47
58
  def initialize(file, len_or_headers)
48
59
  @file = file
@@ -56,12 +67,14 @@ class CSVRow
56
67
  end
57
68
  end
58
69
 
70
+ # Set the header array
59
71
  def headers=(hdrs)
60
72
  hdrs.each_with_index do |h, ii|
61
73
  @headers[h] = ii
62
74
  end
63
75
  end
64
76
 
77
+ # Append columns
65
78
  def push(*args)
66
79
  args.each do |x|
67
80
  @cols.push(x)
@@ -69,10 +82,13 @@ class CSVRow
69
82
  self
70
83
  end
71
84
 
85
+ # Set the fixed column length, for when you don't have headers
72
86
  def length=(n)
73
87
  @cols = (0..(n - 1)).map { |idx| @cols[idx] || nil }
74
88
  end
75
89
 
90
+ # Set value by numeric index or by header (should be a value from
91
+ # header array)
76
92
  def []=(idx, val)
77
93
  if idx.is_a? Numeric then
78
94
  @cols[idx] = val
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csvgen
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 2
10
+ version: 1.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - John Cromartie