dbf 2.0.12 → 2.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/dbf/column/base.rb +1 -1
- data/lib/dbf/memo/base.rb +1 -1
- data/lib/dbf/table.rb +9 -2
- data/lib/dbf/version.rb +1 -1
- data/spec/dbf/column_spec.rb +8 -3
- data/spec/fixtures/cp1251_summary.txt +11 -0
- data/spec/fixtures/dbase_03_summary.txt +40 -0
- data/spec/fixtures/dbase_30_summary.txt +154 -0
- data/spec/fixtures/dbase_31_summary.txt +20 -0
- data/spec/fixtures/dbase_83_summary.txt +24 -0
- data/spec/fixtures/dbase_8b_summary.txt +15 -0
- data/spec/fixtures/dbase_f5_summary.txt +68 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f839e25e2db42fd66421537fca0ec61feda2672a
|
4
|
+
data.tar.gz: 11e90371ab59a88dfd30545c733d82735ed78d30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a6741db87de74a98529687373a2b3193ac806791cae21e4b1b4f7e8d78d683919b27b6645f4e049e76c8b4fb905c03fd01c89f1250051ee36577a567a510a90
|
7
|
+
data.tar.gz: b8b8bd2074c16570b9a2fe5effa2f02c564636d9a2c08e326cdf2c2e8c870ac78411af11389e1856746292fa7a5c53303972c90a7c498fa05f9fcbaa6e5bbe0b
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/lib/dbf/column/base.rb
CHANGED
data/lib/dbf/memo/base.rb
CHANGED
data/lib/dbf/table.rb
CHANGED
@@ -229,14 +229,21 @@ module DBF
|
|
229
229
|
def build_columns # nodoc
|
230
230
|
columns = []
|
231
231
|
@data.seek(DBF_HEADER_SIZE)
|
232
|
-
|
233
|
-
column_data =
|
232
|
+
while !end_of_record?
|
233
|
+
column_data = @data.read(DBF_HEADER_SIZE)
|
234
234
|
name, type, length, decimal = column_data.unpack('a10 x a x4 C2')
|
235
235
|
columns << column_class.new(self, name, type, length, decimal)
|
236
236
|
end
|
237
237
|
columns
|
238
238
|
end
|
239
239
|
|
240
|
+
def end_of_record? # nodoc
|
241
|
+
pos = @data.pos
|
242
|
+
byte = @data.read(1)
|
243
|
+
@data.seek(pos)
|
244
|
+
byte[0].ord == 13
|
245
|
+
end
|
246
|
+
|
240
247
|
def foxpro? # nodoc
|
241
248
|
FOXPRO_VERSIONS.keys.include? version
|
242
249
|
end
|
data/lib/dbf/version.rb
CHANGED
data/spec/dbf/column_spec.rb
CHANGED
@@ -75,7 +75,7 @@ describe DBF::Column::Dbase do
|
|
75
75
|
expect(column.type_cast(value)).to eq 13.5
|
76
76
|
end
|
77
77
|
|
78
|
-
it '
|
78
|
+
it 'casts negative value to Float' do
|
79
79
|
value = '-13.5'
|
80
80
|
column = DBF::Column::Dbase.new table, "ColumnName", "N", 2, 1
|
81
81
|
expect(column.type_cast(value)).to be_a(Float)
|
@@ -99,7 +99,7 @@ describe DBF::Column::Dbase do
|
|
99
99
|
expect(column.type_cast(value)).to eq 135.0
|
100
100
|
end
|
101
101
|
|
102
|
-
it '
|
102
|
+
it 'casts negative value to Float' do
|
103
103
|
value = '-135'
|
104
104
|
column = DBF::Column::Dbase.new table, "ColumnName", "F", 3, 0
|
105
105
|
expect(column.type_cast(value)).to be_a(Float)
|
@@ -145,7 +145,7 @@ describe DBF::Column::Dbase do
|
|
145
145
|
end
|
146
146
|
|
147
147
|
it "supports negative Fixnum" do
|
148
|
-
value = "\x24\xE1\xFF\xFF
|
148
|
+
value = "\x24\xE1\xFF\xFF"
|
149
149
|
column = DBF::Column::Dbase.new table, "ColumnName", "I", 3, 0
|
150
150
|
expect(column.type_cast(value)).to be_a(Fixnum)
|
151
151
|
expect(column.type_cast(value)).to eq -7900
|
@@ -273,6 +273,11 @@ describe DBF::Column::Dbase do
|
|
273
273
|
expect(column.type_cast("\xFC\xF0\xF0\xFE\xFF\xFF\xFF\xFF")).to eq -1776.41
|
274
274
|
end
|
275
275
|
|
276
|
+
it 'supports 64bit negative currency' do
|
277
|
+
expect(column.type_cast("pN'9\xFF\xFF\xFF\xFF")).to be_a(Float)
|
278
|
+
expect(column.type_cast("pN'9\xFF\xFF\xFF\xFF")).to eq -333609.0
|
279
|
+
end
|
280
|
+
|
276
281
|
context 'and 0 length' do
|
277
282
|
it 'returns nil' do
|
278
283
|
column = DBF::Column::Dbase.new table, "ColumnName", "Y", 0, 0
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
Database: dbase_03.dbf
|
3
|
+
Type: (03) dBase III without memo file
|
4
|
+
Memo File: false
|
5
|
+
Records: 14
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
Point_ID C 12 0
|
11
|
+
Type C 20 0
|
12
|
+
Shape C 20 0
|
13
|
+
Circular_D C 20 0
|
14
|
+
Non_circul C 60 0
|
15
|
+
Flow_prese C 20 0
|
16
|
+
Condition C 20 0
|
17
|
+
Comments C 60 0
|
18
|
+
Date_Visit D 8 0
|
19
|
+
Time C 10 0
|
20
|
+
Max_PDOP N 5 1
|
21
|
+
Max_HDOP N 5 1
|
22
|
+
Corr_Type C 36 0
|
23
|
+
Rcvr_Type C 36 0
|
24
|
+
GPS_Date D 8 0
|
25
|
+
GPS_Time C 10 0
|
26
|
+
Update_Sta C 36 0
|
27
|
+
Feat_Name C 20 0
|
28
|
+
Datafile C 20 0
|
29
|
+
Unfilt_Pos N 10 0
|
30
|
+
Filt_Pos N 10 0
|
31
|
+
Data_Dicti C 20 0
|
32
|
+
GPS_Week N 6 0
|
33
|
+
GPS_Second N 12 3
|
34
|
+
GPS_Height N 16 3
|
35
|
+
Vert_Prec N 16 1
|
36
|
+
Horz_Prec N 16 1
|
37
|
+
Std_Dev N 16 6
|
38
|
+
Northing N 16 3
|
39
|
+
Easting N 16 3
|
40
|
+
Point_ID N 9 0
|
@@ -0,0 +1,154 @@
|
|
1
|
+
|
2
|
+
Database: dbase_30.dbf
|
3
|
+
Type: (30) Visual FoxPro
|
4
|
+
Memo File: true
|
5
|
+
Records: 34
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
ACCESSNO C 15 0
|
11
|
+
ACQVALUE N 12 2
|
12
|
+
APPNOTES M 4 0
|
13
|
+
APPRAISOR C 75 0
|
14
|
+
CABINET C 25 0
|
15
|
+
CAPTION C 30 0
|
16
|
+
CAT C 1 0
|
17
|
+
CATBY C 25 0
|
18
|
+
CATDATE D 8 0
|
19
|
+
CATTYPE C 15 0
|
20
|
+
CLASSES M 4 0
|
21
|
+
COLLECTION C 75 0
|
22
|
+
CONDDATE D 8 0
|
23
|
+
CONDEXAM C 25 0
|
24
|
+
CONDITION C 35 0
|
25
|
+
CONDNOTES M 4 0
|
26
|
+
CONTAINER C 40 0
|
27
|
+
COPYRIGHT M 4 0
|
28
|
+
CREATOR C 80 0
|
29
|
+
CREDIT M 4 0
|
30
|
+
CURVALMAX N 12 2
|
31
|
+
CURVALUE N 12 2
|
32
|
+
DATASET C 15 0
|
33
|
+
DATE C 50 0
|
34
|
+
DESCRIP M 4 0
|
35
|
+
DIMNOTES M 4 0
|
36
|
+
DISPVALUE C 10 0
|
37
|
+
DRAWER C 20 0
|
38
|
+
EARLYDATE N 4 0
|
39
|
+
EVENT C 80 0
|
40
|
+
EXHIBITID C 36 0
|
41
|
+
EXHIBITNO N 7 0
|
42
|
+
EXHLABEL1 M 4 0
|
43
|
+
EXHLABEL2 M 4 0
|
44
|
+
EXHLABEL3 M 4 0
|
45
|
+
EXHLABEL4 M 4 0
|
46
|
+
EXHSTART D 8 0
|
47
|
+
FILMSIZE C 35 0
|
48
|
+
FLAGDATE T 8 0
|
49
|
+
FLAGNOTES M 4 0
|
50
|
+
FLAGREASON C 20 0
|
51
|
+
FRAME C 75 0
|
52
|
+
FRAMENO C 25 0
|
53
|
+
GPARENT C 45 0
|
54
|
+
HOMELOC C 60 0
|
55
|
+
IMAGEFILE C 60 0
|
56
|
+
IMAGENO N 3 0
|
57
|
+
INSCOMP C 30 0
|
58
|
+
INSDATE D 8 0
|
59
|
+
INSPHONE C 25 0
|
60
|
+
INSPREMIUM C 20 0
|
61
|
+
INSREP C 30 0
|
62
|
+
INSVALUE N 10 2
|
63
|
+
INVNBY C 25 0
|
64
|
+
INVNDATE D 8 0
|
65
|
+
LATEDATE N 4 0
|
66
|
+
LEGAL M 4 0
|
67
|
+
LOANCOND M 4 0
|
68
|
+
LOANDATE D 8 0
|
69
|
+
LOANDUE D 8 0
|
70
|
+
LOANID C 36 0
|
71
|
+
LOANINNO C 15 0
|
72
|
+
MAINTCYCLE C 10 0
|
73
|
+
MAINTDATE D 8 0
|
74
|
+
MAINTNOTE M 4 0
|
75
|
+
MEDIUM C 75 0
|
76
|
+
NEGLOC C 60 0
|
77
|
+
NEGNO C 25 0
|
78
|
+
NOTES M 4 0
|
79
|
+
OBJECTID C 25 0
|
80
|
+
OBJNAME C 40 0
|
81
|
+
OLDNO C 25 0
|
82
|
+
ORIGCOPY C 15 0
|
83
|
+
OTHERNO C 25 0
|
84
|
+
OUTDATE D 8 0
|
85
|
+
PARENT C 40 0
|
86
|
+
PEOPLE M 4 0
|
87
|
+
PLACE C 100 0
|
88
|
+
POLICYNO C 20 0
|
89
|
+
PRINTSIZE C 35 0
|
90
|
+
PROCESS C 75 0
|
91
|
+
PROVENANCE M 4 0
|
92
|
+
PUBNOTES M 4 0
|
93
|
+
RECAS C 20 0
|
94
|
+
RECDATE C 10 0
|
95
|
+
RECFROM C 120 0
|
96
|
+
RELATION C 36 0
|
97
|
+
RELNOTES M 4 0
|
98
|
+
ROOM C 25 0
|
99
|
+
SGFLAG C 1 0
|
100
|
+
SHELF C 20 0
|
101
|
+
SITE C 40 0
|
102
|
+
SITENO C 12 0
|
103
|
+
SLIDENO C 25 0
|
104
|
+
STATUS C 20 0
|
105
|
+
STATUSBY C 25 0
|
106
|
+
STATUSDATE D 8 0
|
107
|
+
STERMS M 4 0
|
108
|
+
STUDIO C 60 0
|
109
|
+
SUBJECTS M 4 0
|
110
|
+
TCABINET C 25 0
|
111
|
+
TCONTAINER C 40 0
|
112
|
+
TDRAWER C 20 0
|
113
|
+
TEMPAUTHOR C 25 0
|
114
|
+
TEMPBY C 25 0
|
115
|
+
TEMPDATE D 8 0
|
116
|
+
TEMPLOC C 60 0
|
117
|
+
TEMPNOTES M 4 0
|
118
|
+
TEMPREASON C 50 0
|
119
|
+
TEMPUNTIL C 10 0
|
120
|
+
TITLE M 4 0
|
121
|
+
TITLESORT C 100 0
|
122
|
+
TROOM C 25 0
|
123
|
+
TSHELF C 20 0
|
124
|
+
TWALL C 20 0
|
125
|
+
UDF1 C 75 0
|
126
|
+
UDF10 C 75 0
|
127
|
+
UDF11 C 20 0
|
128
|
+
UDF12 C 20 0
|
129
|
+
UDF13 N 12 0
|
130
|
+
UDF14 N 12 2
|
131
|
+
UDF15 N 12 2
|
132
|
+
UDF16 N 12 3
|
133
|
+
UDF17 N 12 3
|
134
|
+
UDF18 D 8 0
|
135
|
+
UDF19 D 8 0
|
136
|
+
UDF20 D 8 0
|
137
|
+
UDF21 M 4 0
|
138
|
+
UDF22 M 4 0
|
139
|
+
UDF2 C 75 0
|
140
|
+
UDF3 C 75 0
|
141
|
+
UDF4 C 75 0
|
142
|
+
UDF5 C 75 0
|
143
|
+
UDF6 C 75 0
|
144
|
+
UDF7 C 75 0
|
145
|
+
UDF8 C 75 0
|
146
|
+
UDF9 C 75 0
|
147
|
+
UPDATED T 8 0
|
148
|
+
UPDATEDBY C 25 0
|
149
|
+
VALUEDATE D 8 0
|
150
|
+
WALL C 20 0
|
151
|
+
WEBINCLUDE L 1 0
|
152
|
+
ZSORTER C 69 0
|
153
|
+
ZSORTERX C 44 0
|
154
|
+
PPID C 36 0
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
Database: dbase_31.dbf
|
3
|
+
Type: (31) Visual FoxPro with AutoIncrement field
|
4
|
+
Memo File: false
|
5
|
+
Records: 77
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
PRODUCTID I 4 0
|
11
|
+
PRODUCTNAM C 40 0
|
12
|
+
SUPPLIERID I 4 0
|
13
|
+
CATEGORYID I 4 0
|
14
|
+
QUANTITYPE C 20 0
|
15
|
+
UNITPRICE Y 8 4
|
16
|
+
UNITSINSTO I 4 0
|
17
|
+
UNITSONORD I 4 0
|
18
|
+
REORDERLEV I 4 0
|
19
|
+
DISCONTINU L 1 0
|
20
|
+
_NullFlags 0 1 0
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
Database: dbase_83.dbf
|
3
|
+
Type: (83) dBase III with memo file
|
4
|
+
Memo File: true
|
5
|
+
Records: 67
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
ID N 19 0
|
11
|
+
CATCOUNT N 19 0
|
12
|
+
AGRPCOUNT N 19 0
|
13
|
+
PGRPCOUNT N 19 0
|
14
|
+
ORDER N 19 0
|
15
|
+
CODE C 50 0
|
16
|
+
NAME C 100 0
|
17
|
+
THUMBNAIL C 254 0
|
18
|
+
IMAGE C 254 0
|
19
|
+
PRICE N 13 2
|
20
|
+
COST N 13 2
|
21
|
+
DESC M 10 0
|
22
|
+
WEIGHT N 13 2
|
23
|
+
TAXABLE L 1 0
|
24
|
+
ACTIVE L 1 0
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
Database: dbase_8b.dbf
|
3
|
+
Type: (8b) dBase IV with memo file
|
4
|
+
Memo File: true
|
5
|
+
Records: 10
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
CHARACTER C 100 0
|
11
|
+
NUMERICAL N 20 2
|
12
|
+
DATE D 8 0
|
13
|
+
LOGICAL L 1 0
|
14
|
+
FLOAT F 20 18
|
15
|
+
MEMO M 10 0
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
Database: dbase_f5.dbf
|
3
|
+
Type: (f5) FoxPro with memo file
|
4
|
+
Memo File: true
|
5
|
+
Records: 975
|
6
|
+
|
7
|
+
Fields:
|
8
|
+
Name Type Length Decimal
|
9
|
+
------------------------------------------------------------------------------
|
10
|
+
NF N 5 0
|
11
|
+
SEXE C 1 0
|
12
|
+
NOM C 20 0
|
13
|
+
COG1 C 15 0
|
14
|
+
COG2 C 15 0
|
15
|
+
TELEFON C 9 0
|
16
|
+
RENOM C 15 0
|
17
|
+
NFP N 5 0
|
18
|
+
NFM N 5 0
|
19
|
+
ARXN C 10 0
|
20
|
+
DATN D 8 0
|
21
|
+
LLON C 15 0
|
22
|
+
MUNN C 15 0
|
23
|
+
COMN C 15 0
|
24
|
+
PROV C 15 0
|
25
|
+
PAIN C 15 0
|
26
|
+
OFIC C 15 0
|
27
|
+
ARXB C 10 0
|
28
|
+
DATB D 8 0
|
29
|
+
LLOB C 15 0
|
30
|
+
MUNB C 15 0
|
31
|
+
COMB C 15 0
|
32
|
+
PAIB C 15 0
|
33
|
+
DRIB C 30 0
|
34
|
+
INAB C 30 0
|
35
|
+
OFTB C 10 0
|
36
|
+
OFNB C 20 0
|
37
|
+
AXC1 C 10 0
|
38
|
+
DTC1 D 8 0
|
39
|
+
LLC1 C 15 0
|
40
|
+
NFC1 N 5 0
|
41
|
+
TCA1 C 10 0
|
42
|
+
OTC1 C 10 0
|
43
|
+
ONC1 C 20 0
|
44
|
+
AXC2 C 10 0
|
45
|
+
DTC2 D 8 0
|
46
|
+
LLC2 C 15 0
|
47
|
+
NFC2 N 5 0
|
48
|
+
TCA2 C 10 0
|
49
|
+
OTC2 C 10 0
|
50
|
+
ONC2 C 20 0
|
51
|
+
AXC3 C 10 0
|
52
|
+
DTC3 D 8 0
|
53
|
+
LLC3 C 15 0
|
54
|
+
NFC3 N 5 0
|
55
|
+
TCA3 C 10 0
|
56
|
+
OTC3 C 10 0
|
57
|
+
ONC3 C 20 0
|
58
|
+
ARXD C 10 0
|
59
|
+
DATD D 8 0
|
60
|
+
LLOD C 15 0
|
61
|
+
OFTD C 10 0
|
62
|
+
OFND C 20 0
|
63
|
+
OBS1 C 70 0
|
64
|
+
OBS2 C 70 0
|
65
|
+
OBS3 C 70 0
|
66
|
+
OBS4 C 70 0
|
67
|
+
OBSE M 10 0
|
68
|
+
GHD C 15 0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastercsv
|
@@ -69,10 +69,14 @@ files:
|
|
69
69
|
- spec/dbf/record_spec.rb
|
70
70
|
- spec/dbf/table_spec.rb
|
71
71
|
- spec/fixtures/cp1251.dbf
|
72
|
+
- spec/fixtures/cp1251_summary.txt
|
72
73
|
- spec/fixtures/dbase_03.dbf
|
74
|
+
- spec/fixtures/dbase_03_summary.txt
|
73
75
|
- spec/fixtures/dbase_30.dbf
|
74
76
|
- spec/fixtures/dbase_30.fpt
|
77
|
+
- spec/fixtures/dbase_30_summary.txt
|
75
78
|
- spec/fixtures/dbase_31.dbf
|
79
|
+
- spec/fixtures/dbase_31_summary.txt
|
76
80
|
- spec/fixtures/dbase_83.dbf
|
77
81
|
- spec/fixtures/dbase_83.dbt
|
78
82
|
- spec/fixtures/dbase_83_missing_memo.dbf
|
@@ -80,10 +84,13 @@ files:
|
|
80
84
|
- spec/fixtures/dbase_83_record_0.yml
|
81
85
|
- spec/fixtures/dbase_83_record_9.yml
|
82
86
|
- spec/fixtures/dbase_83_schema.txt
|
87
|
+
- spec/fixtures/dbase_83_summary.txt
|
83
88
|
- spec/fixtures/dbase_8b.dbf
|
84
89
|
- spec/fixtures/dbase_8b.dbt
|
90
|
+
- spec/fixtures/dbase_8b_summary.txt
|
85
91
|
- spec/fixtures/dbase_f5.dbf
|
86
92
|
- spec/fixtures/dbase_f5.fpt
|
93
|
+
- spec/fixtures/dbase_f5_summary.txt
|
87
94
|
- spec/fixtures/foxprodb/FOXPRO-DB-TEST.DBC
|
88
95
|
- spec/fixtures/foxprodb/FOXPRO-DB-TEST.DCT
|
89
96
|
- spec/fixtures/foxprodb/FOXPRO-DB-TEST.DCX
|