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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fadab12ca4c3e6f7b7be026f240c816f1905336e
4
- data.tar.gz: 2a3ad835ee60fa8be62ecdf901fc16fdc22e7bb3
3
+ metadata.gz: f839e25e2db42fd66421537fca0ec61feda2672a
4
+ data.tar.gz: 11e90371ab59a88dfd30545c733d82735ed78d30
5
5
  SHA512:
6
- metadata.gz: 7460b41c54bcfa6ad7bf1dff4cbd1070a1923b38cc41b87b65a5211fcc0c31e00b1fa1786d40a854f7c42d4b8d1989707ee8777307dda1324c58a14dbcde76b4
7
- data.tar.gz: 5dfed269798a64d07509b3cfa6f86f7363b8f9e0b4990d7673d9b1795876c4def3cda1254c7054b5f013bf75c5f75efec7c7af6477c8159c418330620ac0e968
6
+ metadata.gz: 5a6741db87de74a98529687373a2b3193ac806791cae21e4b1b4f7e8d78d683919b27b6645f4e049e76c8b4fb905c03fd01c89f1250051ee36577a567a510a90
7
+ data.tar.gz: b8b8bd2074c16570b9a2fe5effa2f02c564636d9a2c08e326cdf2c2e8c870ac78411af11389e1856746292fa7a5c53303972c90a7c498fa05f9fcbaa6e5bbe0b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.0.13
2
+ - Support 64-bit currency signed currency values
3
+ (see https://github.com/infused/dbf/pull/71)
4
+
1
5
  # 2.0.12
2
6
  - Parse (I) values as signed
3
7
  (see https://github.com/infused/dbf/pull/70)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dbf (2.0.11)
4
+ dbf (2.0.12)
5
5
  fastercsv (~> 1.5)
6
6
 
7
7
  GEM
@@ -111,7 +111,7 @@ module DBF
111
111
  end
112
112
 
113
113
  def unpack_currency(value) # nodoc
114
- (unpack_signed_long(value) / 10_000.0).to_f
114
+ (value.unpack('q<')[0] / 10_000.0).to_f
115
115
  end
116
116
 
117
117
  def unpack_signed_long(value) # nodoc
data/lib/dbf/memo/base.rb CHANGED
@@ -40,7 +40,7 @@ module DBF
40
40
  @block_content_size ||= block_size - BLOCK_HEADER_SIZE
41
41
  end
42
42
 
43
- def block_size
43
+ def block_size #nodoc
44
44
  BLOCK_SIZE
45
45
  end
46
46
  end
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
- until ["\0", "\r"].include?(first_byte = @data.read(1))
233
- column_data = first_byte + @data.read(DBF_HEADER_SIZE - 1)
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
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '2.0.12'
2
+ VERSION = '2.0.13'
3
3
  end
@@ -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 'supports negative Float' do
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 'supports negative Float' do
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\xFF\xFF\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,11 @@
1
+
2
+ Database: cp1251.dbf
3
+ Type: (30) Visual FoxPro
4
+ Memo File: false
5
+ Records: 4
6
+
7
+ Fields:
8
+ Name Type Length Decimal
9
+ ------------------------------------------------------------------------------
10
+ RN N 4 0
11
+ NAME C 100 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.12
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-02 00:00:00.000000000 Z
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