censive 0.11 → 0.13

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/censive.gemspec +1 -1
  3. data/lib/censive.rb +13 -7
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91f3884b92c79f8cca37066a420c872b612c37ed736f61fa7d11c0f0fd861d8e
4
- data.tar.gz: 71789d006309c1d87e681a7078e718342cb36e1f8a18690c59e51595c49d2e59
3
+ metadata.gz: f3d6b5bd88adf5c40972cd5a978b49e57a7a8724780eeaaf80b0cb749323dc1d
4
+ data.tar.gz: c24b0efa60901ca6d8de7e8314a3b137c981601b866d837123a96722acf826db
5
5
  SHA512:
6
- metadata.gz: d5fe33889abe08bc6aa57bb4dec2d65ef3e8935da5aa209a0bcb6060696de07cf44189ad9be6f43ffcd2897672668bd3aff7e8b713f5070199627e40edd3704f
7
- data.tar.gz: 2c79d30b4682da07800c19eb93067c5c72d471f9abc7b824f7525b3d36b8fb1108d0e733706852f750baac57360af2d5b77527a1daab871e2313d558928ce240
6
+ metadata.gz: 3584864597a1631179212563d29ad188a55c2ed90dd1d36c6464e641ee6b5a85c01437516cdf2865c39e9f4f9bfc96605ae318ca456d722afc544e31d87e1801
7
+ data.tar.gz: a7c59e427ca7014e0207dc8c3bb8eb1647c41f9193de021dc4a0ee98b913cfa54105f5bbf5301c2ec852feace0ed7d69622008acc2c09697b5ab1e9560fd89d3
data/censive.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "censive"
5
- s.version = "0.11"
5
+ s.version = "0.13"
6
6
  s.author = "Steve Shreeve"
7
7
  s.email = "steve.shreeve@gmail.com"
8
8
  s.summary =
data/lib/censive.rb CHANGED
@@ -22,14 +22,14 @@
22
22
  # 3. Support CSV headers in first row
23
23
  # ============================================================================
24
24
 
25
- require 'bundler/setup'
26
- require 'strscan'
25
+ require "bundler/setup"
26
+ require "strscan"
27
27
 
28
28
  class Censive < StringScanner
29
29
 
30
30
  def self.writer(obj=nil, **opts, &code)
31
31
  case obj
32
- when String then File.open(path, 'w') {|file| yield new(out: obj, **opts, &code) }
32
+ when String then File.open(obj, "w") {|io| yield new(out: io, **opts, &code) }
33
33
  when IO,nil then new(out: obj, **opts, &code)
34
34
  else abort "#{File.basename($0)}: invalid #{obj.class} object in writer"
35
35
  end
@@ -43,10 +43,10 @@ class Censive < StringScanner
43
43
  out: nil , # output stream, needs to respond to <<
44
44
  quote: '"' , # quote character
45
45
  relax: false , # relax quote parsing so ,"Fo"o, => ,"Fo""o",
46
- sep: ',' , # column separator character
46
+ sep: "," , # column separator character
47
47
  **opts # grab bag
48
48
  )
49
- super(str || '')
49
+ super(str || "")
50
50
  reset
51
51
 
52
52
  @drop = drop
@@ -143,7 +143,7 @@ class Censive < StringScanner
143
143
 
144
144
  # returns 2 (must be quoted and escaped), 1 (must be quoted), 0 (neither)
145
145
  def grok(str)
146
- if idx = str.index(/(#{@quote})|#{@sep}|#{@cr}|#{@lf}/o) #!# FIXME: regex injection is possible
146
+ if idx = str.index(/(#{@quote})|#{@sep}|#{@cr}|#{@lf}/o) #!# FIXME: regex injection?
147
147
  $1 ? 2 : str.index(/#{@quote}/o, idx) ? 2 : 1
148
148
  else
149
149
  0
@@ -177,7 +177,13 @@ class Censive < StringScanner
177
177
  end
178
178
  end
179
179
  when :full
180
- row.map {|col| "#{q}#{col.gsub(q, @esc)}#{q}" }
180
+ if @excel
181
+ row.map do |col|
182
+ col =~ /\A0\d*\z/ ? "=#{q}#{col}#{q}" : "#{q}#{col.gsub(q, @esc)}#{q}"
183
+ end
184
+ else
185
+ row.map {|col| "#{q}#{col.gsub(q, @esc)}#{q}" }
186
+ end
181
187
  end.join(s)
182
188
 
183
189
  @out << out + @eol
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: censive
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.11'
4
+ version: '0.13'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Shreeve
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  requirements: []
57
- rubygems_version: 3.4.5
57
+ rubygems_version: 3.4.6
58
58
  signing_key:
59
59
  specification_version: 4
60
60
  summary: A quick and lightweight CSV handling library for Ruby