hflr 1.2.7 → 1.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 96088c4d808e7b80169eb4a35f8f1d2c3dfdeeee
4
- data.tar.gz: 3448f6407fa4183406a5cac570eb4cf5bb167418
5
- SHA512:
6
- metadata.gz: 47bc6a9a0da6c91a25ede03171a575998f06088fd16bffd07385cfc743fec5aa164054cdb1994a65f94a801fd0822cb28b84f4ada3b498e42d7e622910596052
7
- data.tar.gz: f4f92e60637a3635ce332ef2f41d9461fd4e8adf18597223ef77bb553c4cfdb463e8de2791ec962bd3f37800b92cfe9af4eb77fee751e37979315fac9a833e10
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YTdiYzdiZTFiMGEyMzg2YTE5YWZkM2FjN2U5ZjU5NDVlNmM5M2Y5ZA==
5
+ data.tar.gz: !binary |-
6
+ NTlhZGNiZWFmNDI4NTA4OTU3NzU5NGFiYThlN2FhMmZiY2JmODAyMA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MDZlMjZmZjZlOGViYjYwMGM1NDRlMzhkY2QwMDcyYTY3YmVhMmQ5ZGIxZjhj
10
+ Y2IwOWNkYzFlNDBlMTE5ZTQ3OTFiYTJlNmQyN2I5Mjk4N2U3NDRhMTljYTgw
11
+ NDEwN2Y1OTBjODQ5YzBjYTk3MjlkYjhlNWE0OTJiZmY5ZjJjNjc=
12
+ data.tar.gz: !binary |-
13
+ Mjg2MmFhMzFlMzI2NGY5OGI2MTBlNWRhZDAyNDAxODRjZDAxYWQzMGU3Mjhj
14
+ NzFlZDViYzZhYmMyYmZkZDE3OGNjMDc4MWI2MzU3MzFiNDExODk1MGFhOWFj
15
+ YTA1N2QxZGRiMzkyZmI4MGJlZTIzMjgzOWM4MGVmZDJlMTRlZTY=
data/History.txt CHANGED
@@ -1,14 +1,27 @@
1
1
  == 1.0.1 / 2010-01-21
2
2
 
3
- * Fixed warnings
4
- * Added better exception handling for badly formatted output data
5
-
3
+ * Fixed warnings
4
+ * Added better exception handling for badly formatted output data
6
5
 
7
6
  == 0.11.0 / 2009-08-04
8
7
 
9
- * Removed useless files
10
- * Corrected version number
8
+ * Removed useless files
9
+ * Corrected version number
11
10
 
12
11
  == 1.0.1 / 2011-02-09
12
+
13
13
  * Added ability to specify file format in Ruby with Range class (see example.rb in /test.)
14
-
14
+
15
+ == 1.2.6
16
+
17
+ * NHGIS had been using this version for a long time until the Ruby 1.9 conversion
18
+ and the related work to get character-encoding to function properly.
19
+
20
+ == 1.4.0
21
+
22
+ * support for Ruby 1.9 character encoding
23
+ * Note: I saw that Colin had a series of 1.3 "releases" on his computer, but apparently
24
+ not released anywhere; so I jumped ahead in the version numbering to 1.4
25
+ * Deal with Latin-1 character encoding when using String#pack, force to Latin-1 since
26
+ that's the only encoding that makes sense for fixed width files (one byte per char).
27
+
data/README.txt CHANGED
@@ -7,7 +7,8 @@
7
7
  HFLR -- Hierarchical Fixed Length Records
8
8
 
9
9
  Allows you to read and write files of fixed width records when the file contains one or more
10
- than one type of record.
10
+ than one type of record. Version 1.4 has better support for Ruby 1.9 character encoding, by
11
+ assuming Latin-1 (ISO-8859-1).
11
12
 
12
13
  Install with 'gem install hflr'
13
14
 
data/hflr.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hflr}
5
- s.version = "1.2.7"
5
+ s.version = "1.4.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Colin Davis"]
9
- s.date = %q{2011-02-09}
8
+ s.authors = ["Colin Davis", "Wade Stebbings"]
9
+ s.date = %q{2013-03-08}
10
10
  s.description = %q{HFLR -- Hierarchical Fixed Length Records
11
11
 
12
12
  Allows you to read and write files of fixed width records when the file contains one or more
@@ -20,12 +20,12 @@ See the tests and examples bundled with this gem.}
20
20
  s.files = ["History.txt", "README.txt", "hflr.gemspec",
21
21
  "lib/hflr.rb", "lib/hflr/fl_record_file.rb", "lib/hflr/hflr.rb", "lib/hflr/record_template.rb",
22
22
  "test/customer_orders.dat", "test/customers.dat", "test/examples.rb", "test/flrfile_test.rb","test/record_template_test.rb",
23
- "test/sample.dat", "test/sample2_out.dat", "test/sample_activities.dat", "test/sample_out.dat", "test/test_helper.rb", "test/test_hflr.rb"]
23
+ "test/sample.dat", "test/sample_latin1.dat", "test/sample2_out.dat", "test/sample_activities.dat", "test/sample_out.dat", "test/test_helper.rb", "test/test_hflr.rb"]
24
24
  #s.homepage = %q{http://rubygems.org}
25
25
  #s.rdoc_options = ["--main", "README.txt"]
26
26
  s.require_paths = ["lib"]
27
27
 
28
- s.rubygems_version = %q{1.3.4}
28
+ s.rubygems_version = %q{1.4.0}
29
29
  s.summary = %q{HFLR -- Hierarchical Fixed Length Records Allows you to read and write files of fixed width records when the file contains one or more than one type of record}
30
30
  s.test_files = ["test/test_hflr.rb", "test/test_helper.rb"]
31
31
  end
@@ -44,10 +44,7 @@ private
44
44
  def self.add_extra_columns(names, extra)
45
45
  new_names = names.dup
46
46
  # names are not case sensitive
47
-
48
- extra.each{|n|new_names << n unless names.map{|m| m.to_s.upcase}.include? n.to_s.upcase}
49
-
50
-
47
+ extra.each{|n|new_names << n unless names.map{|m| m.to_s.upcase}.include? n.to_s.upcase}
51
48
 
52
49
  # No matter what, include 'record_type'
53
50
  unless new_names.map{|n| n.to_s.upcase}.include?("RECORD_TYPE")
@@ -75,7 +72,7 @@ public
75
72
  end
76
73
 
77
74
  def build_line(record)
78
- line = format_fields(record).pack(@field_pattern)
75
+ line = format_fields(record).pack(@field_pattern).force_encoding("ISO-8859-1")
79
76
  line[0] = @record_type_label unless @record_type_label == :none
80
77
  line.tr!("\0",UnfilledChar)
81
78
  return line
@@ -109,7 +106,6 @@ def self.check_record_layouts(layouts)
109
106
  end
110
107
 
111
108
  def self.create_template_class(record_type, record_type_label, layout, first_column_location, extra_columns = nil)
112
- begin
113
109
  names = layout.map {|l| l.name.to_sym}
114
110
  names = add_extra_columns(names, extra_columns)
115
111
  structure = Struct.new(*names)
@@ -118,10 +114,6 @@ begin
118
114
  structure,
119
115
  self.get_pattern(layout, first_column_location),
120
116
  layout.map{|v| v.len})
121
- rescue Exception=>msg
122
- raise "Problem creating record of type #{record_type} labeled #{record_type_label} with exception #{msg.to_s} #{msg.backtrace}"
123
- end
124
-
125
117
  end
126
118
 
127
119
 
data/test/flrfile_test.rb CHANGED
@@ -1,265 +1,274 @@
1
+ # encoding: iso-8859-1
2
+ require File.dirname(__FILE__) + "/../lib/hflr"
3
+ require 'test/unit'
1
4
 
2
5
 
3
-
4
- class FLRFileTest < Test::Unit::TestCase
5
-
6
-
6
+ class FLRFileTest < Test::Unit::TestCase
7
7
 
8
8
  def setup
9
9
  var_type = Struct.new(:name,:start,:len)
10
-
10
+
11
11
  # Split up your metadata by record type.
12
-
13
- @layouts =
12
+ @layouts =
14
13
  {:household=>[var_type.new(:rectypeh,1,1), var_type.new(:phone,2,1), var_type.new("mortgage",3,1)],
15
14
  :person=>[var_type.new(:rectypep,1,1), var_type.new("age",2,3), var_type.new("sex",5,1), var_type.new("marst",6,1)]}
16
-
17
- # Give the values used in the data for each record type
18
- @record_types ={"H"=>:household,"P"=>:person}
15
+
16
+ # Give the values used in the data for each record type
17
+ @record_types ={"H"=>:household,"P"=>:person}
18
+
19
+ # @latin_layout = [var_type.new(:prefix,1,6), var_type.new(:lang,7,2),
20
+ # var_type.new(:mountain,9,10), var_type.new(:trailer,19,4)]
19
21
  end
20
-
22
+
21
23
  def teardown
22
24
  end
23
-
24
-
25
+
26
+
25
27
  def test_initialize
26
- sample_data_path = File.dirname(__FILE__)
28
+ sample_data_path = File.dirname(__FILE__)
27
29
  fwf = FLRFile.new(
28
30
  File.new("#{sample_data_path}/sample.dat"),
29
- @record_types, # Record types to read from the file, all others will be ignored
31
+ @record_types, # Record types to read from the file, all others will be ignored
30
32
  @layouts,# metadata for all record types
31
- 1, # column 0 starts at logical location 1
33
+ 1, # column 0 starts at logical location 1
32
34
  {:household=>[:people],:person=>[:household_id,:pserial]} # extra columns by record type
33
35
  )
34
-
35
- # Extra columns + record_type accessors should have been created
36
- hh_struct = fwf.record_template[:household].record_structure.new
37
- assert hh_struct.respond_to?(:record_type),"household record should have record_type method"
38
- p_struct = fwf.record_template[:person].record_structure.new
39
- assert p_struct.respond_to?(:household_id),"Should have household_id as an extra column"
40
- assert p_struct.respond_to?(:record_type),"Should have record_type method"
41
-
42
-
43
- fwf = FLRFile.new(
36
+
37
+ # Extra columns + record_type accessors should have been created
38
+ hh_struct = fwf.record_template[:household].record_structure.new
39
+ assert hh_struct.respond_to?(:record_type),"household record should have record_type method"
40
+ p_struct = fwf.record_template[:person].record_structure.new
41
+ assert p_struct.respond_to?(:household_id),"Should have household_id as an extra column"
42
+ assert p_struct.respond_to?(:record_type),"Should have record_type method"
43
+
44
+ fwf = FLRFile.new(
44
45
  File.new("#{sample_data_path}/sample.dat"),
45
- @record_types, # Record types to read from the file, all others will be ignored
46
+ @record_types, # Record types to read from the file, all others will be ignored
46
47
  @layouts,# metadata for all record types
47
48
  1 )
48
-
49
- # Should still have added the record_type method but none of the others
50
- hh_struct = fwf.record_template[:household].record_structure.new
51
- assert hh_struct.respond_to?(:record_type),"Should have record_type method"
52
- assert !hh_struct.respond_to?(:people)
49
+
50
+ # Should still have added the record_type method but none of the others
51
+ hh_struct = fwf.record_template[:household].record_structure.new
52
+ assert hh_struct.respond_to?(:record_type),"Should have record_type method"
53
+ assert !hh_struct.respond_to?(:people)
53
54
  end
54
-
55
+
55
56
  def test_get_record_type
56
- sample_data_path = File.dirname(__FILE__)
57
+ sample_data_path = File.dirname(__FILE__)
57
58
  fwf = FLRFile.new(
58
59
  File.new("#{sample_data_path}/sample.dat"),
59
- @record_types, # Record types to read from the file, all others will be ignored
60
+ @record_types, # Record types to read from the file, all others will be ignored
60
61
  @layouts,# metadata for all record types
61
- 1, # column 0 starts at logical location 1
62
+ 1, # column 0 starts at logical location 1
62
63
  {:household=>[:people],:person=>[:household_id,:pserial]} # extra columns by record type
63
64
  )
64
65
  assert_nil fwf.get_record_type(nil)
65
66
  assert_equal :household,fwf.get_record_type("H123")
66
67
  assert_equal :person,fwf.get_record_type("P1234")
67
- assert_equal nil, fwf.get_record_type("C123")
68
-
68
+ assert_equal nil, fwf.get_record_type("C123")
69
69
  end
70
-
71
-
72
-
73
-
70
+
74
71
  def test_build_record
75
- sample_data_path = File.dirname(__FILE__)
72
+ sample_data_path = File.dirname(__FILE__)
76
73
  fwf = FLRFile.new(
77
74
  File.new("#{sample_data_path}/sample.dat"),
78
- @record_types, # Record types to read from the file, all others will be ignored
75
+ @record_types, # Record types to read from the file, all others will be ignored
79
76
  @layouts,# metadata for all record types
80
- 1, # column 0 starts at logical location 1
77
+ 1, # column 0 starts at logical location 1
81
78
  {:household=>[:people],:person=>[:household_id,:pserial]} # extra columns by record type
82
79
  )
83
-
80
+
84
81
  assert_equal nil, fwf.build_record(nil)
85
82
  rec = fwf.build_record("H012345666665555444333")
86
83
  assert_equal :household,rec[:record_type]
87
-
88
- assert_raise RuntimeError do
84
+
85
+ assert_raise RuntimeError do
89
86
  fwf.build_record("c23abbbc")
90
87
  end
91
-
92
88
  end
93
89
 
94
- def test_fast_next_record
95
- sample_data_path = File.dirname(__FILE__)
96
-
97
- layout = {:customer=>{
98
- :name=>1..25,
99
- :zip=>26..30,
100
- :balance=>31..35
101
- }
102
- }
103
-
104
- customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
105
- customer_file.set_fast
106
- customer_file.ranges=[(0..2)]
107
-
108
- records = []
109
- while !customer_file.finished?
110
- record = customer_file.next_record
111
-
112
- puts record.inspect
113
- records << record
114
- end
115
-
116
- assert_equal 3, records.size
90
+ def test_fast_next_record
91
+ sample_data_path = File.dirname(__FILE__)
92
+ layout = {:customer=>{
93
+ :name=>1..25,
94
+ :zip=>26..30,
95
+ :balance=>31..35
96
+ }
97
+ }
117
98
 
118
- # Check that the records aren't off by one
119
- assert_equal "Jane Smith",records[1].name
120
- assert_equal "John Smith",records.last.name
99
+ customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
100
+ customer_file.set_fast
101
+ customer_file.ranges=[(0..2)]
121
102
 
122
- end
103
+ records = []
104
+ while !customer_file.finished?
105
+ record = customer_file.next_record
106
+ puts record.inspect
107
+ records << record
108
+ end
109
+
110
+ assert_equal 3, records.size
123
111
 
124
- def test_partial_fast_next_line
125
- sample_data_path = File.dirname(__FILE__)
126
-
127
- layout = {:customer=>{
128
- :name=>1..25,
129
- :zip=>26..30,
130
- :balance=>31..35
131
- }
132
- }
133
-
134
- customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
135
- customer_file.set_fast
136
- customer_file.ranges=[(0..1)]
137
-
138
- records = []
139
- while !customer_file.finished?
140
- record = customer_file.next_record
141
- puts record.inspect
142
- records << record
112
+ # Check that the records aren't off by one
113
+ assert_equal "Jane Smith",records[1].name
114
+ assert_equal "John Smith",records.last.name
143
115
  end
144
-
145
- assert_equal 2, records.size
146
116
 
147
- # Check that the records aren't off by one
148
- assert_equal "Jane Smith",records[1].name
117
+ def test_partial_fast_next_line
118
+ sample_data_path = File.dirname(__FILE__)
149
119
 
150
- end
120
+ layout = {:customer=>{
121
+ :name=>1..25,
122
+ :zip=>26..30,
123
+ :balance=>31..35
124
+ }
125
+ }
151
126
 
152
- def test_fast_each
153
- sample_data_path = File.dirname(__FILE__)
154
-
155
- layout = {:customer=>{
156
- :name=>1..25,
157
- :zip=>26..30,
158
- :balance=>31..35
159
- }
160
- }
161
-
162
- customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
163
- customer_file.set_fast
164
- customer_file.ranges=[(0..1)]
165
-
166
- records = []
167
- customer_file.each do |record|
168
-
169
- puts record.inspect
170
- records << record
127
+ customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
128
+ customer_file.set_fast
129
+ customer_file.ranges=[(0..1)]
130
+
131
+ records = []
132
+ while !customer_file.finished?
133
+ record = customer_file.next_record
134
+ puts record.inspect
135
+ records << record
136
+ end
137
+
138
+ assert_equal 2, records.size
139
+ # Check that the records aren't off by one
140
+ assert_equal "Jane Smith",records[1].name
171
141
  end
172
-
173
- assert_equal 2, records.size
174
142
 
175
- # Check that the records aren't off by one
176
- assert_equal "Jane Smith",records[1].name
143
+ def test_fast_each
144
+ sample_data_path = File.dirname(__FILE__)
177
145
 
178
- end
146
+ layout = {:customer=>{
147
+ :name=>1..25,
148
+ :zip=>26..30,
149
+ :balance=>31..35
150
+ }
151
+ }
179
152
 
153
+ customer_file = FLRFile.new(File.new(sample_data_path + "/customers.dat"), :customer, layout, 1)
154
+ customer_file.set_fast
155
+ customer_file.ranges=[(0..1)]
156
+
157
+ records = []
158
+ customer_file.each do |record|
159
+ puts record.inspect
160
+ records << record
161
+ end
162
+
163
+ assert_equal 2, records.size
164
+
165
+ # Check that the records aren't off by one
166
+ assert_equal "Jane Smith",records[1].name
167
+ end
180
168
 
181
-
182
169
  def test_each
183
- sample_data_path = File.dirname(__FILE__)
184
- fwf = FLRFile.new(
170
+ sample_data_path = File.dirname(__FILE__)
171
+ fwf = FLRFile.new(
185
172
  File.new("#{sample_data_path}/sample.dat"),
186
- @record_types,
173
+ @record_types,
187
174
  @layouts,
188
175
  1,
189
176
  {:household=>[:record_type,:people],:person=>[:household_id,:pserial,:record_type]})
190
-
177
+
191
178
  records = []
192
-
193
- fwf.each do |record|
194
- records << record
195
- end
196
- assert records.first.respond_to?(:record_type)
197
- assert_equal :person, records.last.record_type
198
- assert_equal :household,records[0].record_type
199
- assert_equal :person, records[1].record_type
200
-
179
+
180
+ fwf.each do |record|
181
+ records << record
182
+ end
183
+ assert records.first.respond_to?(:record_type)
184
+ assert_equal :person, records.last.record_type
185
+ assert_equal :household,records[0].record_type
186
+ assert_equal :person, records[1].record_type
201
187
  end
202
-
188
+
203
189
  def test_next_record
204
- sample_data_path = File.dirname(__FILE__)
190
+ sample_data_path = File.dirname(__FILE__)
205
191
  fwf = FLRFile.new(
206
192
  File.new("#{sample_data_path}/sample.dat"), # data is in this file
207
- @record_types, # Records of different types have these labels
193
+ @record_types, # Records of different types have these labels
208
194
  @layouts, # metadata for creating record structs
209
195
  1, # All metadata starting column locations are to be shifted 1 left
210
196
  {:household=>[:people],:person=>[:household_id,:pserial]}) # Extra columns not to come from metadata
211
-
212
- records = []
213
- while rec = fwf.next_record do
197
+
198
+ records = []
199
+ while rec = fwf.next_record do
214
200
  records << rec
201
+ end
215
202
 
216
- end
217
-
218
- assert_equal :household, records.first.record_type
219
-
220
- assert records.first.respond_to?(:record_type)
221
-
222
- # The last record is a person type and should not have a 'people' accessor
223
- assert !records.last.respond_to?(:people)
224
-
225
- # Should have added these accessors from the extra_columns argument above
226
- assert records.first.respond_to?(:people)
227
- assert records.last.respond_to?(:household_id)
228
-
229
- assert_equal :household,records[0].record_type
230
- assert_equal :person, records[1].record_type
231
-
203
+ assert_equal :household, records.first.record_type
204
+
205
+ assert records.first.respond_to?(:record_type)
206
+
207
+ # The last record is a person type and should not have a 'people' accessor
208
+ assert !records.last.respond_to?(:people)
209
+
210
+ # Should have added these accessors from the extra_columns argument above
211
+ assert records.first.respond_to?(:people)
212
+ assert records.last.respond_to?(:household_id)
213
+
214
+ assert_equal :household,records[0].record_type
215
+ assert_equal :person, records[1].record_type
232
216
  end
233
-
234
- def test_open
217
+
218
+ def test_open
235
219
  record = Struct.new(:rectypeh,:phone,:mortgage,:record_type)
236
-
237
- sample_data_path = File.dirname(__FILE__)
238
- FLRFile.open(
239
- "#{sample_data_path}/sample_out.dat", # data is in this file
240
- "w",# open file for writing
241
- @record_types, # Records of different types have these labels
220
+
221
+ sample_data_path = File.dirname(__FILE__)
222
+ FLRFile.open(
223
+ "#{sample_data_path}/sample_out.dat", # data is in this file
224
+ "w",# open file for writing
225
+ @record_types, # Records of different types have these labels
242
226
  @layouts, # metadata for creating record structs
243
- 1) do |fwf|# All metadata starting column locations are to be shifted 1 left
244
- assert_equal FLRFile, fwf.class
245
- fwf << record.new("H",1,2,:household)
246
- fwf << ["H",1,3,:household]
247
- end
248
-
227
+ 1) do |fwf| # All metadata starting column locations are to be shifted 1 left
228
+ assert_equal FLRFile, fwf.class
229
+ fwf << record.new("H",1,2,:household)
230
+ fwf << ["H",1,3,:household]
231
+ end
232
+
249
233
  assert File.exists?("#{sample_data_path}/sample.dat") # data is in this file
250
-
234
+
251
235
  var = Struct.new(:name,:start,:len)
252
236
  l = {:customer=>[var.new("name",1,25),var.new("age",26,3)]}
253
237
  fwf = FLRFile.new(File.new("sample2_out.dat","w"),
254
- :customer, l,1)
255
-
238
+ :customer, l,1)
239
+
256
240
  fwf << ["joe",25,:customer]
257
241
  fwf.close
258
-
259
242
  end
260
-
261
243
 
262
- def test_line_type
244
+ def test_latin1
245
+ record = Struct.new(:rectypeh,:phone,:mortgage,:record_type)
246
+
247
+ sample_data_path = File.dirname(__FILE__)
248
+ FLRFile.open(
249
+ "#{sample_data_path}/sample_out.dat", # data is in this file
250
+ "w",# open file for writing
251
+ @record_types, # Records of different types have these labels
252
+ @layouts, # metadata for creating record structs
253
+ 1) do |fwf| # All metadata starting column locations are to be shifted 1 left
254
+ assert_equal FLRFile, fwf.class
255
+ fwf << record.new("H",1,2,:household)
256
+ fwf << ["H",1,3,:household]
257
+ end
258
+
259
+ assert File.exists?("#{sample_data_path}/sample.dat") # data is in this file
260
+
261
+ var = Struct.new(:name,:start,:len)
262
+ l = {:customer=>[var.new("name",1,25),var.new("age",26,3)]}
263
+ fwf = FLRFile.new(File.new("sample2_out.dat","w",:encoding=>"ISO-8859-1"),
264
+ :customer, l,1)
265
+
266
+ latin1_name = "joe do#{241.chr}a".force_encoding("ISO-8859-1")
267
+ fwf << [latin1_name,25,:customer]
268
+ fwf.close
269
+ end
270
+
271
+ def test_line_type
263
272
  sample_data_path = File.dirname(__FILE__)
264
273
  fwf = FLRFile.new(
265
274
  File.new("#{sample_data_path}/sample.dat"),
@@ -269,42 +278,35 @@ def test_line_type
269
278
  {:household=>[:people],:person=>[:household_id,:pserial]} # extra columns by record type
270
279
  )
271
280
 
272
- assert_equal :unknown, fwf.line_type(nil)
273
- assert_equal :household,fwf.line_type("H123")
274
- assert_equal :person,fwf.line_type("P123")
275
- assert_equal :unknown, fwf.line_type("C123")
276
- end
277
-
278
- def test_ranges
279
- end
281
+ assert_equal :unknown, fwf.line_type(nil)
282
+ assert_equal :household,fwf.line_type("H123")
283
+ assert_equal :person,fwf.line_type("P123")
284
+ assert_equal :unknown, fwf.line_type("C123")
285
+ end
280
286
 
281
- def test_in_range
282
- end
287
+ def test_ranges
288
+ end
283
289
 
290
+ def test_in_range
291
+ end
284
292
 
285
-
286
293
  def test_get_next_known_line_type
287
294
  sample_data_path = File.dirname(__FILE__)
288
- fwf = FLRFile.new(
295
+ fwf = FLRFile.new(
289
296
  File.new("#{sample_data_path}/sample_activities.dat"),
290
297
  @record_types, # Record types to read from the file, all others will be ignored
291
298
  @layouts,# metadata for all record types
292
299
  1, # column 0 starts at logical location 1
293
300
  {:household=>[:people],:person=>[:household_id,:pserial]} # extra columns by record type
294
301
  )
295
- # By reading the sample_activities file with only the household and person record types know
296
- # we should get the activity and who records to be skipped.
297
- while rec=fwf.get_next_known_line_type
298
-
299
- unless rec.strip.empty?
300
-
301
- assert ["P","H"].include?(rec[0..0])
302
+ # By reading the sample_activities file with only the household and person record types know
303
+ # we should get the activity and who records to be skipped.
304
+ while rec=fwf.get_next_known_line_type
302
305
 
306
+ unless rec.strip.empty?
307
+ assert ["P","H"].include?(rec[0..0])
303
308
  end
309
+ end
304
310
  end
305
-
306
- end
307
-
308
- end
309
-
310
311
 
312
+ end
@@ -0,0 +1,7 @@
1
+ A01059en mountain0010
2
+ A02326es monta�a0001
3
+ A05525fr montagne0033
4
+ A05525it montagna0034
5
+ A01059de berg0073
6
+ A01066no fjell0085
7
+ A03063po g�ra0089
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hflr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin Davis
8
- autorequire:
8
+ - Wade Stebbings
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2011-02-09 00:00:00.000000000 Z
12
+ date: 2013-03-08 00:00:00.000000000 Z
12
13
  dependencies: []
13
- description: "HFLR -- Hierarchical Fixed Length Records\n\nAllows you to read and\
14
- \ write files of fixed width records when the file contains one or more\nthan one\
15
- \ type of record. \n\nInstall with 'gem install hflr'\n\nSee the tests and examples\
16
- \ bundled with this gem."
14
+ description: ! "HFLR -- Hierarchical Fixed Length Records\n\nAllows you to read and
15
+ write files of fixed width records when the file contains one or more\nthan one
16
+ type of record. \n\nInstall with 'gem install hflr'\n\nSee the tests and examples
17
+ bundled with this gem."
17
18
  email: colin.c.davis@gmail.com
18
19
  executables: []
19
20
  extensions: []
@@ -34,34 +35,36 @@ files:
34
35
  - test/flrfile_test.rb
35
36
  - test/record_template_test.rb
36
37
  - test/sample.dat
38
+ - test/sample_latin1.dat
37
39
  - test/sample2_out.dat
38
40
  - test/sample_activities.dat
39
41
  - test/sample_out.dat
40
42
  - test/test_helper.rb
41
43
  - test/test_hflr.rb
42
- homepage:
44
+ homepage:
43
45
  licenses: []
44
46
  metadata: {}
45
- post_install_message:
47
+ post_install_message:
46
48
  rdoc_options: []
47
49
  require_paths:
48
50
  - lib
49
51
  required_ruby_version: !ruby/object:Gem::Requirement
50
52
  requirements:
51
- - - '>='
53
+ - - ! '>='
52
54
  - !ruby/object:Gem::Version
53
55
  version: '0'
54
56
  required_rubygems_version: !ruby/object:Gem::Requirement
55
57
  requirements:
56
- - - '>='
58
+ - - ! '>='
57
59
  - !ruby/object:Gem::Version
58
60
  version: '0'
59
61
  requirements: []
60
- rubyforge_project:
61
- rubygems_version: 2.1.9
62
- signing_key:
62
+ rubyforge_project:
63
+ rubygems_version: 2.0.2
64
+ signing_key:
63
65
  specification_version: 4
64
- summary: HFLR -- Hierarchical Fixed Length Records Allows you to read and write files of fixed width records when the file contains one or more than one type of record
66
+ summary: HFLR -- Hierarchical Fixed Length Records Allows you to read and write files
67
+ of fixed width records when the file contains one or more than one type of record
65
68
  test_files:
66
69
  - test/test_hflr.rb
67
70
  - test/test_helper.rb