csv_lazy 0.0.0 → 0.0.1
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.
- data/VERSION +1 -1
- data/csv_lazy.gemspec +1 -1
- data/lib/csv_lazy.rb +24 -15
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/csv_lazy.gemspec
CHANGED
data/lib/csv_lazy.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Csv_lazy
|
2
2
|
include Enumerable
|
3
3
|
|
4
|
-
def initialize(args, &blk)
|
4
|
+
def initialize(args = {}, &blk)
|
5
5
|
@args = {
|
6
6
|
:quote_char => '"',
|
7
7
|
:row_sep => "\n",
|
@@ -12,9 +12,11 @@ class Csv_lazy
|
|
12
12
|
@eof = false
|
13
13
|
@buffer = ""
|
14
14
|
@debug = @args[:debug]
|
15
|
+
@encode = @args[:encode]
|
16
|
+
@mutex = Mutex.new
|
15
17
|
#@debug = true
|
16
18
|
|
17
|
-
accepted = [:quote_char, :row_sep, :col_sep, :io]
|
19
|
+
accepted = [:encode, :quote_char, :row_sep, :col_sep, :io]
|
18
20
|
@args.each do |key, val|
|
19
21
|
if accepted.index(key) == nil
|
20
22
|
raise "Unknown argument: '#{key}'."
|
@@ -41,8 +43,10 @@ class Csv_lazy
|
|
41
43
|
|
42
44
|
#Yields each row as an array.
|
43
45
|
def each
|
44
|
-
|
45
|
-
|
46
|
+
@mutex.synchronize do
|
47
|
+
while row = read_row
|
48
|
+
yield(row)
|
49
|
+
end
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
@@ -50,10 +54,12 @@ class Csv_lazy
|
|
50
54
|
|
51
55
|
#Reads more content into the buffer.
|
52
56
|
def read_buffer
|
53
|
-
read = @io.
|
57
|
+
read = @io.gets
|
58
|
+
|
54
59
|
if !read
|
55
60
|
@eof = true
|
56
61
|
else
|
62
|
+
read = read.encode(@encode) if @encode
|
57
63
|
@buffer << read
|
58
64
|
end
|
59
65
|
end
|
@@ -113,7 +119,7 @@ class Csv_lazy
|
|
113
119
|
if !match_read
|
114
120
|
read_buffer
|
115
121
|
else
|
116
|
-
|
122
|
+
add_col(match_read[1])
|
117
123
|
break
|
118
124
|
end
|
119
125
|
end
|
@@ -132,29 +138,32 @@ class Csv_lazy
|
|
132
138
|
raise "Dont know what to do (#{@buffer.length}): #{@buffer}"
|
133
139
|
end
|
134
140
|
elsif match = read_remove_regex(@regex_read_until_col_sep)
|
135
|
-
|
141
|
+
add_col(match[1])
|
136
142
|
return true
|
137
143
|
elsif match = read_remove_regex(@regex_read_until_row_sep)
|
138
144
|
puts "csv_lazy: Row seperator reached." if @debug
|
139
|
-
|
145
|
+
add_col(match[1])
|
140
146
|
return false
|
141
147
|
elsif match = read_remove_regex(@regex_read_until_end)
|
148
|
+
#If the very end of the file has been reached, then add this data and stop parsing.
|
142
149
|
if @eof
|
143
|
-
|
150
|
+
add_col(match[1])
|
144
151
|
return false
|
145
152
|
end
|
146
153
|
|
154
|
+
#The end-of-file hasnt been reached. Add more data to buffer and try again.
|
147
155
|
@buffer << match[0]
|
148
156
|
read_buffer
|
149
|
-
raise
|
157
|
+
raise Errno::EAGAIN
|
150
158
|
else
|
151
159
|
raise "Dont know what to do with buffer: #{@buffer}"
|
152
160
|
end
|
153
|
-
rescue
|
161
|
+
rescue Errno::EAGAIN
|
154
162
|
retry
|
155
163
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
164
|
+
|
165
|
+
#Adds a new column to the current row.
|
166
|
+
def add_col(str)
|
167
|
+
@row << str
|
168
|
+
end
|
160
169
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: csv_lazy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -94,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
hash:
|
97
|
+
hash: 2827273816324907749
|
98
98
|
segments:
|
99
99
|
- 0
|
100
100
|
version: "0"
|