textutils 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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::Models::Prop.create_from_fixture!( name, path )
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/ # check for group headers e.g. - St. James Brewery
130
- logger.info " skip group header #{line} for now (fix/add soon)"
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
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  module TextUtils
3
3
 
4
- VERSION = '0.8.2'
4
+ VERSION = '0.8.3'
5
5
 
6
6
  end # module TextUtils
7
7
 
@@ -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
- assert_equal true, false # should not get here
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
- assert_equal true, false # should not get here
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
- assert_equal true, false # should not get here
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
- assert_equal true, false # should not get here
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
- assert_equal true, false # should not get here
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.2
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-22 00:00:00.000000000 Z
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: &20656452 !ruby/object:Gem::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: *20656452
24
+ version_requirements: *21298812
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &20655864 !ruby/object:Gem::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: *20655864
35
+ version_requirements: *21298416
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hoe
38
- requirement: &20655132 !ruby/object:Gem::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: *20655132
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: []