textutils 0.8.2 → 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/textutils/reader/values_reader.rb +29 -5
- data/lib/textutils/version.rb +1 -1
- data/test/test_values_reader.rb +62 -5
- metadata +8 -8
@@ -43,7 +43,7 @@ class ValuesReaderV2
|
|
43
43
|
end
|
44
44
|
|
45
45
|
## fix: move Prop table to props gem - why? why not??
|
46
|
-
WorldDb::
|
46
|
+
WorldDb::Model::Prop.create_from_fixture!( name, path )
|
47
47
|
end
|
48
48
|
|
49
49
|
end # class ValuesReaderV2
|
@@ -59,7 +59,7 @@ class ValuesReader
|
|
59
59
|
|
60
60
|
def initialize( path, more_attribs={} )
|
61
61
|
@more_attribs = more_attribs
|
62
|
-
|
62
|
+
|
63
63
|
### workaround/hack
|
64
64
|
# if path includes newline assume it's a string buffer not a file name
|
65
65
|
# fix: use from_file an from_string etc. for ctor
|
@@ -89,6 +89,16 @@ class ValuesReader
|
|
89
89
|
blank_counter = 0 # count of number of blank lines (note: 1+ blank lines clear multi-line record)
|
90
90
|
values = []
|
91
91
|
|
92
|
+
# keep track of last header
|
93
|
+
# e.g. lines like
|
94
|
+
# ___________________________________
|
95
|
+
# - Brauerei Schwechat (Brau Union)
|
96
|
+
#
|
97
|
+
# laster_header will be 'Brauerei Schwechat (Brau Union)'
|
98
|
+
# gets passed along as an attribue e.g. more_attribs[:header]='Brauerei Schwechat (Brau Union)'
|
99
|
+
last_header = nil
|
100
|
+
|
101
|
+
|
92
102
|
@data.each_line do |line|
|
93
103
|
|
94
104
|
## allow alternative comment lines
|
@@ -126,8 +136,20 @@ class ValuesReader
|
|
126
136
|
line = line.strip
|
127
137
|
|
128
138
|
|
129
|
-
if line =~ /^-\s
|
130
|
-
|
139
|
+
if line =~ /^-\s+/ # check for group headers e.g. - St. James Brewery
|
140
|
+
if values.length > 0 # check if we already processed a record? if yes; yield last record (before reset)
|
141
|
+
attribs, more_values = find_key_n_title( values )
|
142
|
+
attribs = attribs.merge( @more_attribs ) # e.g. merge country_id and other defaults if present
|
143
|
+
attribs[:header] = last_header unless last_header.nil? # add optional header attrib
|
144
|
+
yield( attribs, more_values )
|
145
|
+
values = []
|
146
|
+
end
|
147
|
+
inside_record = false
|
148
|
+
blank_counter = 0
|
149
|
+
|
150
|
+
# update last_header
|
151
|
+
last_header = line.gsub( /^-\s/, '' ) # cut-off leading marker and space
|
152
|
+
logger.info " update group header >#{last_header}<"
|
131
153
|
next
|
132
154
|
elsif line =~ /^\[([a-z][a-z]+)\]/
|
133
155
|
### check for multiline record
|
@@ -137,10 +159,10 @@ class ValuesReader
|
|
137
159
|
if values.length > 0 # check if we already processed a record? if yes; yield last record (before reset)
|
138
160
|
attribs, more_values = find_key_n_title( values )
|
139
161
|
attribs = attribs.merge( @more_attribs ) # e.g. merge country_id and other defaults if present
|
162
|
+
attribs[:header] = last_header unless last_header.nil? # add optional header attrib
|
140
163
|
yield( attribs, more_values )
|
141
164
|
values = []
|
142
165
|
end
|
143
|
-
|
144
166
|
inside_record = true
|
145
167
|
blank_counter = 0
|
146
168
|
|
@@ -160,6 +182,7 @@ class ValuesReader
|
|
160
182
|
if values.length > 0
|
161
183
|
attribs, more_values = find_key_n_title( values )
|
162
184
|
attribs = attribs.merge( @more_attribs ) # e.g. merge country_id and other defaults if present
|
185
|
+
attribs[:header] = last_header unless last_header.nil? # add optional header attrib
|
163
186
|
yield( attribs, more_values )
|
164
187
|
values = []
|
165
188
|
end
|
@@ -175,6 +198,7 @@ class ValuesReader
|
|
175
198
|
if values.length > 0
|
176
199
|
attribs, more_values = find_key_n_title( values )
|
177
200
|
attribs = attribs.merge( @more_attribs ) # e.g. merge country_id and other defaults if present
|
201
|
+
attribs[:header] = last_header unless last_header.nil? # add optional header attrib
|
178
202
|
yield( attribs, more_values )
|
179
203
|
end
|
180
204
|
|
data/lib/textutils/version.rb
CHANGED
data/test/test_values_reader.rb
CHANGED
@@ -10,6 +10,63 @@ require 'helper'
|
|
10
10
|
|
11
11
|
class TestValuesReader < MiniTest::Unit::TestCase
|
12
12
|
|
13
|
+
def test_header
|
14
|
+
txt =<<EOS
|
15
|
+
|
16
|
+
Wieselburger Gold, 5.0%, 11.8°
|
17
|
+
____________________________________________
|
18
|
+
- Zwettler Brauerei|Privatbrauerei Zwettl
|
19
|
+
|
20
|
+
Zwettler Original, 5.1 %, 11.9°
|
21
|
+
Zwettler Export Lager, 5.0 %, 11.8°
|
22
|
+
|
23
|
+
______________________________________
|
24
|
+
- Brauerei Schwechat (Brau Union)
|
25
|
+
|
26
|
+
Schwechater, 5.0%, 11.5°, 41.0 kcal/100ml
|
27
|
+
Schwechater Zwickl, 5.4%, 12.5°, 45.0 kcal/100ml
|
28
|
+
|
29
|
+
EOS
|
30
|
+
|
31
|
+
reader = ValuesReader.new( txt )
|
32
|
+
|
33
|
+
i = 0
|
34
|
+
reader.each_line do |attribs, values|
|
35
|
+
i += 1
|
36
|
+
|
37
|
+
puts "attribs:"
|
38
|
+
pp attribs
|
39
|
+
puts "values:"
|
40
|
+
pp values
|
41
|
+
|
42
|
+
if i == 1
|
43
|
+
assert_equal attribs[:header], nil
|
44
|
+
assert_equal attribs[:key], 'wieselburgergold'
|
45
|
+
assert_equal attribs[:title], 'Wieselburger Gold'
|
46
|
+
elsif i == 2
|
47
|
+
assert_equal attribs[:header], 'Zwettler Brauerei|Privatbrauerei Zwettl'
|
48
|
+
assert_equal attribs[:key], 'zwettleroriginal'
|
49
|
+
assert_equal attribs[:title], 'Zwettler Original'
|
50
|
+
elsif i == 3
|
51
|
+
assert_equal attribs[:header], 'Zwettler Brauerei|Privatbrauerei Zwettl'
|
52
|
+
assert_equal attribs[:key], 'zwettlerexportlager'
|
53
|
+
assert_equal attribs[:title], 'Zwettler Export Lager'
|
54
|
+
elsif i == 4
|
55
|
+
assert_equal attribs[:header], 'Brauerei Schwechat (Brau Union)'
|
56
|
+
assert_equal attribs[:key], 'schwechater'
|
57
|
+
assert_equal attribs[:title], 'Schwechater'
|
58
|
+
elsif i == 5
|
59
|
+
assert_equal attribs[:header], 'Brauerei Schwechat (Brau Union)'
|
60
|
+
assert_equal attribs[:key], 'schwechaterzwickl'
|
61
|
+
assert_equal attribs[:title], 'Schwechater Zwickl'
|
62
|
+
else
|
63
|
+
assert false # should not get here
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end # test_header
|
68
|
+
|
69
|
+
|
13
70
|
def test_escape_comma
|
14
71
|
# note: double espace comma e.g. \\, becomes literal \,
|
15
72
|
txt =<<EOS
|
@@ -52,7 +109,7 @@ EOS
|
|
52
109
|
assert_equal values[0], '1845'
|
53
110
|
assert_equal values[1], 'The Griffin Brewery // Chiswick Lane South // London, W4 2QB'
|
54
111
|
else
|
55
|
-
|
112
|
+
assert false # should not get here
|
56
113
|
end
|
57
114
|
end
|
58
115
|
end # test_escape_comma
|
@@ -150,7 +207,7 @@ EOS
|
|
150
207
|
assert_equal values[1], 'www.egger-bier.at'
|
151
208
|
assert_equal values[2], '3105 Unterradlberg // Tiroler Straße 18'
|
152
209
|
else
|
153
|
-
|
210
|
+
assert false # should not get here
|
154
211
|
end
|
155
212
|
end
|
156
213
|
end # test_mixed
|
@@ -212,7 +269,7 @@ EOS
|
|
212
269
|
assert_equal values[2], '3910 Zwettl // Syrnauer Straße 22-25'
|
213
270
|
assert_equal values[3], 'brands: Zwettler'
|
214
271
|
else
|
215
|
-
|
272
|
+
assert false # should not get here
|
216
273
|
end
|
217
274
|
end
|
218
275
|
end # test_multi_line_records
|
@@ -247,7 +304,7 @@ EOS
|
|
247
304
|
elsif i == 2
|
248
305
|
elsif i == 3
|
249
306
|
else
|
250
|
-
|
307
|
+
assert false # should not get here
|
251
308
|
end
|
252
309
|
end
|
253
310
|
end # test_classic_csv_records
|
@@ -302,7 +359,7 @@ EOS
|
|
302
359
|
assert_equal values[1], '11.8°'
|
303
360
|
assert_equal values[-1], 'bio'
|
304
361
|
else
|
305
|
-
|
362
|
+
assert false # should not get here
|
306
363
|
end
|
307
364
|
end
|
308
365
|
end # test_autogen_keys
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: logutils
|
16
|
-
requirement: &
|
16
|
+
requirement: &21298812 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.5'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *21298812
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rdoc
|
27
|
-
requirement: &
|
27
|
+
requirement: &21298416 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '4.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *21298416
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: hoe
|
38
|
-
requirement: &
|
38
|
+
requirement: &21297996 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '3.7'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *21297996
|
47
47
|
description: textutils - Text Filters, Helpers, Readers and More
|
48
48
|
email: ruby-talk@ruby-lang.org
|
49
49
|
executables: []
|