censive 0.17 → 0.18

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 -3
  3. data/lib/censive.rb +33 -25
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88b2018e7ca027d44e36061d9cdc983b56e510632bc125ca632b85fbdc15999b
4
- data.tar.gz: 3ec807310f681afdec72505269c23a6a6d9b0262134dbbcd0b16cc6406c9fc50
3
+ metadata.gz: d3e3d32cc23e58416e6d9c2f962be016beff4f1555af801e969032162fcb9f95
4
+ data.tar.gz: 405c48fba04cbf797354d0732a6ccc9238a5d198469a6d927fc37de86da5eaa7
5
5
  SHA512:
6
- metadata.gz: b0110e0ff7dc4f902ede1c7086e6431d3671f1c5886c6947e493bc85ad48bda3232d3604b269703ad3bfdb0d7b1d180cb55ea12fdf06bcc9729a1d67d2cd85a7
7
- data.tar.gz: 90dbb68deed9124a723eba91574f46829bf870277f874433ad34fc63dfb4376a8bda243b9fdbb86fbfee90e18bd169e4b8cc97fa6f6f3dac43bbc2125dac877d
6
+ metadata.gz: 5afd52cdd519854a78977d778c05f0f9bad02bad177523e79c4f3fc96e4291178a2186f021d8a40d1be8ec16d1bc659a3a18a49721994d4c7326a90006362398
7
+ data.tar.gz: 378b0f4a3e289a0a1244d0a69ade975d15e6fae99b000d00d507e8ebd1ae0d29605b43bbb08e25b18f0306d3e54eb327f75f94e390de0fe3cb02da2fafe7185b
data/censive.gemspec CHANGED
@@ -1,8 +1,6 @@
1
- # encoding: utf-8
2
-
3
1
  Gem::Specification.new do |s|
4
2
  s.name = "censive"
5
- s.version = "0.17"
3
+ s.version = "0.18"
6
4
  s.author = "Steve Shreeve"
7
5
  s.email = "steve.shreeve@gmail.com"
8
6
  s.summary =
data/lib/censive.rb CHANGED
@@ -22,6 +22,9 @@
22
22
  require "strscan"
23
23
 
24
24
  class Censive < StringScanner
25
+ def self.parse(...)
26
+ new(...).parse
27
+ end
25
28
 
26
29
  def self.writer(obj=nil, **opts, &code)
27
30
  case obj
@@ -31,34 +34,32 @@ class Censive < StringScanner
31
34
  end
32
35
  end
33
36
 
34
- def initialize(str=nil,
35
- drop: false , # drop trailing empty fields?
36
- excel: false , # literals ="01" formulas =A1 + B2 http://bit.ly/3Y7jIvc
37
- mode: :compact, # export mode: compact or full
38
- out: $stdout , # output stream, needs to respond to <<
39
- quote: '"' , # quote character
40
- relax: false , # relax quote parsing so ,"Fo"o, => ,"Fo""o",
41
- rowsep: "\n" , # row separator for export
42
- sep: "," , # column separator character
43
- strip: false , # strip fields when reading
37
+ def initialize(str="",
38
+ drop: false , # drop trailing empty fields?
39
+ encoding: "utf-8" , # character encoding
40
+ excel: false , # literals ="01" formulas =A1 + B2 http://bit.ly/3Y7jIvc
41
+ mode: :compact, # export mode: compact or full
42
+ out: $stdout , # output stream, needs to respond to <<
43
+ quote: '"' , # quote character
44
+ relax: false , # relax quote parsing so ,"Fo"o, => ,"Fo""o",
45
+ rowsep: "\n" , # row separator for export
46
+ sep: "," , # column separator character
47
+ strip: false , # strip fields when reading
44
48
  **opts # grab bag
45
49
  )
46
- str = File.read(str) if str =~ /\A.{,100}\z/
47
- super(str || "")
48
- reset
49
-
50
50
  # options
51
- @drop = drop
52
- @excel = excel
53
- @mode = mode
54
- @out = out
55
- @quote = quote
56
- @relax = relax
57
- @rowsep = rowsep
58
- @sep = sep
59
- @strip = strip
60
-
61
- # determined
51
+ @drop = drop
52
+ @encoding = encoding
53
+ @excel = excel
54
+ @mode = mode
55
+ @out = out
56
+ @quote = quote
57
+ @relax = relax
58
+ @rowsep = rowsep
59
+ @sep = sep
60
+ @strip = strip
61
+
62
+ # definitions
62
63
  @cr = "\r"
63
64
  @lf = "\n"
64
65
  @es = ""
@@ -66,6 +67,13 @@ class Censive < StringScanner
66
67
  @esc = (@quote * 2)
67
68
  @eol = /#{@cr}#{@lf}?|#{@lf}|\z/o # end of line
68
69
  @eoc = /(?=#{"\\" + @sep}|#{@cr}|#{@lf}|\z)/o # end of cell
70
+
71
+ # data source
72
+ if str.size < 100 && File.readable?(str)
73
+ str = File.open(str, "r:#{encoding}").read
74
+ end
75
+ super(str)
76
+ reset
69
77
  end
70
78
 
71
79
  def reset(str=nil)
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.17'
4
+ version: '0.18'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Shreeve