dbf 2.0.12 → 2.0.13

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,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