dbf 2.0.7 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/dbf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '2.0.7'
3
- end
2
+ VERSION = '2.0.8'
3
+ end
@@ -3,9 +3,10 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe DBF::Column::Dbase do
6
+ let(:table) { DBF::Table.new fixture_path('dbase_30.dbf')}
6
7
 
7
8
  context "when initialized" do
8
- let(:column) { DBF::Column::Dbase.new "ColumnName", "N", 1, 0, "30" }
9
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "N", 1, 0 }
9
10
 
10
11
  it "sets :name accessor" do
11
12
  expect(column.name).to eq "ColumnName"
@@ -25,19 +26,19 @@ describe DBF::Column::Dbase do
25
26
 
26
27
  describe 'with length of 0' do
27
28
  it 'raises DBF::Column::LengthError' do
28
- expect { DBF::Column::Dbase.new "ColumnName", "N", 0, 0, "30" }.to raise_error(DBF::Column::LengthError)
29
+ expect { DBF::Column::Dbase.new table, "ColumnName", "N", 0, 0 }.to raise_error(DBF::Column::LengthError)
29
30
  end
30
31
  end
31
32
 
32
33
  describe 'with length less than 0' do
33
34
  it 'raises DBF::Column::LengthError' do
34
- expect { DBF::Column::Dbase.new "ColumnName", "N", -1, 0, "30" }.to raise_error(DBF::Column::LengthError)
35
+ expect { DBF::Column::Dbase.new table, "ColumnName", "N", -1, 0 }.to raise_error(DBF::Column::LengthError)
35
36
  end
36
37
  end
37
38
 
38
39
  describe 'with empty column name' do
39
40
  it 'raises DBF::Column::NameError' do
40
- expect { DBF::Column::Dbase.new "\xFF\xFC", "N", 1, 0, "30" }.to raise_error(DBF::Column::NameError)
41
+ expect { DBF::Column::Dbase.new table, "\xFF\xFC", "N", 1, 0 }.to raise_error(DBF::Column::NameError)
41
42
  end
42
43
  end
43
44
  end
@@ -47,7 +48,7 @@ describe DBF::Column::Dbase do
47
48
  context 'and 0 decimals' do
48
49
  it 'casts value to Fixnum' do
49
50
  value = '135'
50
- column = DBF::Column::Dbase.new "ColumnName", "N", 3, 0, "30"
51
+ column = DBF::Column::Dbase.new table, "ColumnName", "N", 3, 0
51
52
  expect(column.type_cast(value)).to be_a(Fixnum)
52
53
  expect(column.type_cast(value)).to eq 135
53
54
  end
@@ -56,7 +57,7 @@ describe DBF::Column::Dbase do
56
57
  context 'and more than 0 decimals' do
57
58
  it 'casts value to Float' do
58
59
  value = '13.5'
59
- column = DBF::Column::Dbase.new "ColumnName", "N", 2, 1, "30"
60
+ column = DBF::Column::Dbase.new table, "ColumnName", "N", 2, 1
60
61
  expect(column.type_cast(value)).to be_a(Float)
61
62
  expect(column.type_cast(value)).to eq 13.5
62
63
  end
@@ -66,7 +67,7 @@ describe DBF::Column::Dbase do
66
67
  context 'with type F (float)' do
67
68
  it 'casts value to Float' do
68
69
  value = '135'
69
- column = DBF::Column::Dbase.new "ColumnName", "F", 3, 0, "30"
70
+ column = DBF::Column::Dbase.new table, "ColumnName", "F", 3, 0
70
71
  expect(column.type_cast(value)).to be_a(Float)
71
72
  expect(column.type_cast(value)).to eq 135.0
72
73
  end
@@ -75,32 +76,34 @@ describe DBF::Column::Dbase do
75
76
  context 'with type I (integer)' do
76
77
  it "casts value to Fixnum" do
77
78
  value = "\203\171\001\000"
78
- column = DBF::Column::Dbase.new "ColumnName", "I", 3, 0, "30"
79
+ column = DBF::Column::Dbase.new table, "ColumnName", "I", 3, 0
80
+ expect(column.type_cast(value)).to be_a(Fixnum)
79
81
  expect(column.type_cast(value)).to eq 96643
80
82
  end
81
83
  end
82
84
 
83
85
  context 'with type L (logical/boolean)' do
84
- let(:column) { DBF::Column::Dbase.new "ColumnName", "L", 1, 0, "30" }
86
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "L", 1, 0 }
85
87
 
86
88
  it "casts 'y' to true" do
87
- expect(column.type_cast('y')).to eq true
89
+ expect(column.type_cast('y')).to be true
88
90
  end
89
91
 
90
92
  it "casts 't' to true" do
91
- expect(column.type_cast('t')).to eq true
93
+ expect(column.type_cast('t')).to be true
92
94
  end
93
95
 
94
96
  it "casts value other than 't' or 'y' to false" do
95
- expect(column.type_cast('n')).to eq false
97
+ expect(column.type_cast('n')).to be false
96
98
  end
97
99
  end
98
100
 
99
101
  context 'with type T (datetime)' do
100
- let(:column) { DBF::Column::Dbase.new "ColumnName", "T", 16, 0, "30" }
102
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "T", 16, 0 }
101
103
 
102
104
  context 'with valid datetime' do
103
105
  it "casts to DateTime" do
106
+ expect(column.type_cast("Nl%\000\300Z\252\003")).to be_a(DateTime)
104
107
  expect(column.type_cast("Nl%\000\300Z\252\003")).to eq DateTime.parse("2002-10-10T17:04:56+00:00")
105
108
  end
106
109
  end
@@ -112,6 +115,7 @@ describe DBF::Column::Dbase do
112
115
  require 'mathn'
113
116
  column.type_cast("Nl%\000\300Z\252\003")
114
117
  end
118
+ expect(with_mathn.call).to be_a(DateTime)
115
119
  expect(with_mathn.call).to eq DateTime.parse("2002-10-10T17:04:56+00:00")
116
120
  end
117
121
  end
@@ -119,22 +123,25 @@ describe DBF::Column::Dbase do
119
123
 
120
124
  context 'with invalid datetime' do
121
125
  it "casts to nil" do
126
+ expect(column.type_cast("Nl%\000\000A\000\999")).to be_a(NilClass)
122
127
  expect(column.type_cast("Nl%\000\000A\000\999")).to be_nil
123
128
  end
124
129
  end
125
130
  end
126
131
 
127
132
  context 'with type D (date)' do
128
- let(:column) { DBF::Column::Dbase.new "ColumnName", "D", 8, 0, "30" }
133
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "D", 8, 0 }
129
134
 
130
135
  context 'with valid date' do
131
136
  it "casts to Date" do
137
+ expect(column.type_cast("20050712")).to be_a(Date)
132
138
  expect(column.type_cast("20050712")).to eq Date.new(2005,7,12)
133
139
  end
134
140
  end
135
141
 
136
142
  context 'with invalid date' do
137
143
  it "casts to nil" do
144
+ expect(column.type_cast("0")).to be_a(NilClass)
138
145
  expect(column.type_cast("0")).to be_nil
139
146
  end
140
147
  end
@@ -142,21 +149,24 @@ describe DBF::Column::Dbase do
142
149
 
143
150
  context 'with type M (memo)' do
144
151
  it "casts to string" do
145
- column = DBF::Column::Dbase.new "ColumnName", "M", 3, 0, "30"
152
+ column = DBF::Column::Dbase.new table, "ColumnName", "M", 3, 0
146
153
  expect(column.type_cast('abc')).to be_a(String)
154
+ expect(column.type_cast('abc')).to eq 'abc'
147
155
  end
148
156
 
149
157
  it 'casts nil to nil' do
150
- column = DBF::Column::Dbase.new "ColumnName", "M", 3, 0, "30"
158
+ column = DBF::Column::Dbase.new table, "ColumnName", "M", 3, 0
159
+ expect(column.type_cast(nil)).to be_a(NilClass)
151
160
  expect(column.type_cast(nil)).to be_nil
152
161
  end
153
162
  end
154
163
  end
155
164
 
156
165
  context 'with type Y (currency)' do
157
- let(:column) { DBF::Column::Dbase.new "ColumnName", "Y", 8, 4, "31" }
166
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "Y", 8, 4 }
158
167
 
159
168
  it 'casts to float' do
169
+ expect(column.type_cast(" \xBF\x02\x00\x00\x00\x00\x00")).to be_a(Float)
160
170
  expect(column.type_cast(" \xBF\x02\x00\x00\x00\x00\x00")).to eq 18.0
161
171
  end
162
172
  end
@@ -164,7 +174,7 @@ describe DBF::Column::Dbase do
164
174
  context "#schema_definition" do
165
175
  context 'with type N (number)' do
166
176
  it "outputs an integer column" do
167
- column = DBF::Column::Dbase.new "ColumnName", "N", 1, 0, "30"
177
+ column = DBF::Column::Dbase.new table, "ColumnName", "N", 1, 0
168
178
  expect(column.schema_definition).to eq "\"column_name\", :integer\n"
169
179
  end
170
180
  end
@@ -173,14 +183,14 @@ describe DBF::Column::Dbase do
173
183
  context "with Foxpro dbf" do
174
184
  context "when decimal is greater than 0" do
175
185
  it "outputs an float column" do
176
- column = DBF::Column::Dbase.new "ColumnName", "B", 1, 2, "f5"
186
+ column = DBF::Column::Dbase.new table, "ColumnName", "B", 1, 2
177
187
  expect(column.schema_definition).to eq "\"column_name\", :float\n"
178
188
  end
179
189
  end
180
190
 
181
191
  context "when decimal is 0" do
182
192
  it "outputs an integer column" do
183
- column = DBF::Column::Dbase.new "ColumnName", "B", 1, 0, "f5"
193
+ column = DBF::Column::Dbase.new table, "ColumnName", "B", 1, 0
184
194
  expect(column.schema_definition).to eq "\"column_name\", :integer\n"
185
195
  end
186
196
  end
@@ -188,50 +198,50 @@ describe DBF::Column::Dbase do
188
198
  end
189
199
 
190
200
  it "defines a float colmn if type is (N)umber with more than 0 decimals" do
191
- column = DBF::Column::Dbase.new "ColumnName", "N", 1, 2, "30"
201
+ column = DBF::Column::Dbase.new table, "ColumnName", "N", 1, 2
192
202
  expect(column.schema_definition).to eq "\"column_name\", :float\n"
193
203
  end
194
204
 
195
205
  it "defines a date column if type is (D)ate" do
196
- column = DBF::Column::Dbase.new "ColumnName", "D", 8, 0, "30"
206
+ column = DBF::Column::Dbase.new table, "ColumnName", "D", 8, 0
197
207
  expect(column.schema_definition).to eq "\"column_name\", :date\n"
198
208
  end
199
209
 
200
210
  it "defines a datetime column if type is (D)ate" do
201
- column = DBF::Column::Dbase.new "ColumnName", "T", 16, 0, "30"
211
+ column = DBF::Column::Dbase.new table, "ColumnName", "T", 16, 0
202
212
  expect(column.schema_definition).to eq "\"column_name\", :datetime\n"
203
213
  end
204
214
 
205
215
  it "defines a boolean column if type is (L)ogical" do
206
- column = DBF::Column::Dbase.new "ColumnName", "L", 1, 0, "30"
216
+ column = DBF::Column::Dbase.new table, "ColumnName", "L", 1, 0
207
217
  expect(column.schema_definition).to eq "\"column_name\", :boolean\n"
208
218
  end
209
219
 
210
220
  it "defines a text column if type is (M)emo" do
211
- column = DBF::Column::Dbase.new "ColumnName", "M", 1, 0, "30"
221
+ column = DBF::Column::Dbase.new table, "ColumnName", "M", 1, 0
212
222
  expect(column.schema_definition).to eq "\"column_name\", :text\n"
213
223
  end
214
224
 
215
225
  it "defines a string column with length for any other data types" do
216
- column = DBF::Column::Dbase.new "ColumnName", "X", 20, 0, "30"
226
+ column = DBF::Column::Dbase.new table, "ColumnName", "X", 20, 0
217
227
  expect(column.schema_definition).to eq "\"column_name\", :string, :limit => 20\n"
218
228
  end
219
229
  end
220
230
 
221
231
  context "#name" do
222
232
  it "contains only ASCII characters" do
223
- column = DBF::Column::Dbase.new "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", "N", 1, 0, "30"
233
+ column = DBF::Column::Dbase.new table, "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", "N", 1, 0
224
234
  expect(column.name).to eq "---hello world---"
225
235
  end
226
236
 
227
237
  it "is truncated at the null character" do
228
- column = DBF::Column::Dbase.new "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", "N", 1, 0, "30"
238
+ column = DBF::Column::Dbase.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", "N", 1, 0
229
239
  expect(column.name).to eq "---hello "
230
240
  end
231
241
  end
232
242
 
233
243
  context '#decode_date' do
234
- let(:column) { DBF::Column::Dbase.new "ColumnName", "N", 1, 0, "30" }
244
+ let(:column) { DBF::Column::Dbase.new table, "ColumnName", "N", 1, 0 }
235
245
 
236
246
  it 'is nil if value is blank' do
237
247
  expect(column.send(:decode_date, '')).to be_nil
@@ -9,7 +9,9 @@ shared_examples_for 'DBF' do
9
9
  end
10
10
 
11
11
  specify "records should be instances of DBF::Record" do
12
- expect(table.all? {|record| record.is_a?(DBF::Record)}).to be_true
12
+ table.each do |record|
13
+ expect(record).to be_kind_of(DBF::Record)
14
+ end
13
15
  end
14
16
 
15
17
  specify "record count should be the same as reported in the header" do
@@ -17,35 +19,47 @@ shared_examples_for 'DBF' do
17
19
  end
18
20
 
19
21
  specify "column names should not be blank" do
20
- expect(table.columns.all? {|column| !column.name.empty?}).to be_true
22
+ table.columns.each do |column|
23
+ expect(column.name).not_to be_empty
24
+ end
21
25
  end
22
26
 
23
27
  specify "column types should be valid" do
24
28
  valid_column_types = %w(C N L D M F B G P Y T I V X @ O + 0)
25
- expect(table.columns.all? {|column| valid_column_types.include?(column.type)}).to be_true
29
+ table.columns.each do |column|
30
+ expect(valid_column_types).to include(column.type)
31
+ end
26
32
  end
27
33
 
28
34
  specify "column lengths should be instances of Fixnum" do
29
- expect(table.columns.all? {|column| column.length.is_a?(Fixnum)}).to be_true
35
+ table.columns.each do |column|
36
+ expect(column.length).to be_kind_of(Fixnum)
37
+ end
30
38
  end
31
39
 
32
40
  specify "column lengths should be larger than 0" do
33
- expect(table.columns.all? {|column| column.length > 0}).to be_true
41
+ table.columns.each do |column|
42
+ expect(column.length).to be > 0
43
+ end
34
44
  end
35
45
 
36
46
  specify "column decimals should be instances of Fixnum" do
37
- expect(table.columns.all? {|column| column.decimal.is_a?(Fixnum)}).to be_true
47
+ table.columns.each do |column|
48
+ expect(column.decimal).to be_kind_of(Fixnum)
49
+ end
38
50
  end
39
51
  end
40
52
 
41
53
  shared_examples_for 'Foxpro DBF' do
42
54
  specify "columns should be instances of DBF::FoxproColumn" do
43
- expect(table.columns.all? {|column| column.is_a?(DBF::Column::Foxpro)}).to be_true
55
+ table.columns.each do |column|
56
+ expect(column).to be_kind_of(DBF::Column::Foxpro)
57
+ end
44
58
  end
45
59
  end
46
60
 
47
61
  describe DBF, "of type 03 (dBase III without memo file)" do
48
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_03.dbf" }
62
+ let(:table) { DBF::Table.new fixture_path('dbase_03.dbf') }
49
63
 
50
64
  it_should_behave_like "DBF"
51
65
 
@@ -63,7 +77,7 @@ describe DBF, "of type 03 (dBase III without memo file)" do
63
77
  end
64
78
 
65
79
  describe DBF, "of type 30 (Visual FoxPro)" do
66
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_30.dbf" }
80
+ let(:table) { DBF::Table.new fixture_path('dbase_30.dbf') }
67
81
 
68
82
  it_should_behave_like "DBF"
69
83
 
@@ -85,7 +99,7 @@ describe DBF, "of type 30 (Visual FoxPro)" do
85
99
  end
86
100
 
87
101
  describe DBF, "of type 31 (Visual FoxPro with AutoIncrement field)" do
88
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_31.dbf" }
102
+ let(:table) { DBF::Table.new fixture_path('dbase_31.dbf') }
89
103
 
90
104
  it_should_behave_like "DBF"
91
105
 
@@ -103,7 +117,7 @@ describe DBF, "of type 31 (Visual FoxPro with AutoIncrement field)" do
103
117
  end
104
118
 
105
119
  describe DBF, "of type 83 (dBase III with memo file)" do
106
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_83.dbf" }
120
+ let(:table) { DBF::Table.new fixture_path('dbase_83.dbf') }
107
121
 
108
122
  it_should_behave_like "DBF"
109
123
 
@@ -121,7 +135,7 @@ describe DBF, "of type 83 (dBase III with memo file)" do
121
135
  end
122
136
 
123
137
  describe DBF, "of type 8b (dBase IV with memo file)" do
124
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_8b.dbf" }
138
+ let(:table) { DBF::Table.new fixture_path('dbase_8b.dbf') }
125
139
 
126
140
  it_should_behave_like "DBF"
127
141
 
@@ -139,7 +153,7 @@ describe DBF, "of type 8b (dBase IV with memo file)" do
139
153
  end
140
154
 
141
155
  describe DBF, "of type f5 (FoxPro with memo file)" do
142
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_f5.dbf" }
156
+ let(:table) { DBF::Table.new fixture_path('dbase_f5.dbf') }
143
157
 
144
158
  it_should_behave_like "DBF"
145
159
  it_should_behave_like "Foxpro DBF"
@@ -157,6 +171,6 @@ describe DBF, "of type f5 (FoxPro with memo file)" do
157
171
  end
158
172
 
159
173
  it "reads memo data" do
160
- expect(table.record(3).obse).to match(/\Ajos.*pare\.\Z/m)
174
+ expect(table.record(3).datn.to_s).to eq '1870-06-30'
161
175
  end
162
176
  end
@@ -3,7 +3,8 @@ require "spec_helper"
3
3
  describe DBF::Record do
4
4
 
5
5
  describe '#to_a' do
6
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_83.dbf" }
6
+ let(:table) { DBF::Table.new fixture_path('dbase_83.dbf') }
7
+
7
8
  it 'should return an ordered array of attribute values' do
8
9
  record = table.record(0)
9
10
  expect(record.to_a).to eq [87, 2, 0, 0, 87, "1", "Assorted Petits Fours", "graphics/00000001/t_1.jpg", "graphics/00000001/1.jpg", 0.0, 0.0, "Our Original assortment...a little taste of heaven for everyone. Let us\r\nselect a special assortment of our chocolate and pastel favorites for you.\r\nEach petit four is its own special hand decorated creation. Multi-layers of\r\nmoist cake with combinations of specialty fillings create memorable cake\r\nconfections. Varietes include; Luscious Lemon, Strawberry Hearts, White\r\nChocolate, Mocha Bean, Roasted Almond, Triple Chocolate, Chocolate Hazelnut,\r\nGrand Orange, Plum Squares, Milk chocolate squares, and Raspberry Blanc.", 5.51, true, true]
@@ -13,7 +14,7 @@ describe DBF::Record do
13
14
  end
14
15
 
15
16
  describe 'with missing memo file' do
16
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_83_missing_memo.dbf" }
17
+ let(:table) { DBF::Table.new fixture_path('dbase_83_missing_memo.dbf') }
17
18
 
18
19
  it 'returns nil values for memo fields' do
19
20
  record = table.record(0)
@@ -23,75 +24,75 @@ describe DBF::Record do
23
24
  end
24
25
 
25
26
  describe '#==' do
26
- let :record do
27
- table = DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"
28
- table.record(9)
29
- end
27
+ let(:table) { DBF::Table.new fixture_path('dbase_8b.dbf') }
28
+ let(:record) { table.record(9) }
30
29
 
31
30
  describe 'when other does not have attributes' do
32
- it 'is false' do
33
- expect((record == double('other'))).to be_false
31
+ it 'returns false' do
32
+ expect((record == double('other'))).to be_falsey
34
33
  end
35
34
  end
36
35
 
37
36
  describe 'if other attributes match' do
38
- it 'is true' do
39
- attributes = {:x => 1, :y => 2}
40
- record.stub(:attributes).and_return(attributes)
41
- other = double('object', :attributes => attributes)
42
- expect((record == other)).to be_true
37
+ let(:attributes) { {:x => 1, :y => 2} }
38
+ let(:other) { double('object', :attributes => attributes) }
39
+
40
+ before do
41
+ allow(record).to receive(:attributes).and_return(attributes)
42
+ end
43
+
44
+ it 'returns true' do
45
+ expect(record == other).to be_truthy
43
46
  end
44
47
  end
45
48
 
46
49
  end
47
50
 
48
51
  describe 'column accessors' do
49
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"}
52
+ let(:table) { DBF::Table.new fixture_path('dbase_8b.dbf') }
50
53
  let(:record) { table.find(0) }
51
54
 
52
- it 'should have dynamic accessors for the columns' do
53
- expect(record).to respond_to(:character)
54
- expect(record.character).to eq 'One'
55
- expect(record.float).to eq 1.23456789012346
56
- expect(record.logical).to eq true
57
- end
55
+ %w(character numerical date logical float memo).each do |column_name|
56
+
57
+ it "defines accessor method for '#{column_name}' column" do
58
+ expect(record).to respond_to(column_name.to_sym)
59
+ end
58
60
 
59
- it 'should not define accessor methods on the base class' do
60
- second_table = DBF::Table.new "#{DB_PATH}/dbase_03.dbf"
61
- second_record = second_table.find(0)
62
- expect(record.character).to eq 'One'
63
- expect { second_record.character }.to raise_error(NoMethodError)
64
61
  end
65
62
  end
66
63
 
67
64
  describe 'column data for table' do
68
65
  describe 'using specified in dbf encoding' do
69
- let(:table) { DBF::Table.new "#{DB_PATH}/cp1251.dbf"}
70
-
66
+ let(:table) { DBF::Table.new fixture_path('cp1251.dbf') }
71
67
  let(:record) { table.find(0) }
68
+
72
69
  it 'should automatically encodes to default system encoding' do
73
- if table.supports_encoding?
70
+ if table.supports_string_encoding?
74
71
  expect(record.name.encoding).to eq Encoding.default_external
75
- expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d0b0"] # russian a
72
+
73
+ # russian a
74
+ expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d0b0"]
76
75
  end
77
76
  end
78
77
  end
79
78
 
80
79
  describe 'overriding specified in dbf encoding' do
81
- let(:table) { DBF::Table.new "#{DB_PATH}/cp1251.dbf", nil, 'cp866'}
82
-
80
+ let(:table) { DBF::Table.new fixture_path('cp1251.dbf'), nil, 'cp866'}
83
81
  let(:record) { table.find(0) }
82
+
84
83
  it 'should transcode from manually specified encoding to default system encoding' do
85
- if table.supports_encoding?
84
+ if table.supports_string_encoding?
86
85
  expect(record.name.encoding).to eq Encoding.default_external
87
- expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d180"] # russian а encoded in cp1251 and read as if it was encoded in cp866
86
+
87
+ # russian а encoded in cp1251 and read as if it was encoded in cp866
88
+ expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d180"]
88
89
  end
89
90
  end
90
91
  end
91
92
  end
92
93
 
93
94
  describe '#attributes' do
94
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"}
95
+ let(:table) { DBF::Table.new fixture_path('dbase_8b.dbf') }
95
96
  let(:record) { table.find(0) }
96
97
 
97
98
  it 'is a hash of attribute name/value pairs' do