censive 0.17 → 0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/censive.gemspec +1 -3
- data/lib/censive.rb +33 -25
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3e3d32cc23e58416e6d9c2f962be016beff4f1555af801e969032162fcb9f95
|
4
|
+
data.tar.gz: 405c48fba04cbf797354d0732a6ccc9238a5d198469a6d927fc37de86da5eaa7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5afd52cdd519854a78977d778c05f0f9bad02bad177523e79c4f3fc96e4291178a2186f021d8a40d1be8ec16d1bc659a3a18a49721994d4c7326a90006362398
|
7
|
+
data.tar.gz: 378b0f4a3e289a0a1244d0a69ade975d15e6fae99b000d00d507e8ebd1ae0d29605b43bbb08e25b18f0306d3e54eb327f75f94e390de0fe3cb02da2fafe7185b
|
data/censive.gemspec
CHANGED
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=
|
35
|
-
drop:
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
52
|
-
@
|
53
|
-
@
|
54
|
-
@
|
55
|
-
@
|
56
|
-
@
|
57
|
-
@
|
58
|
-
@
|
59
|
-
@
|
60
|
-
|
61
|
-
|
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)
|