dbf 4.1.3 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +166 -104
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +63 -52
  5. data/LICENSE +1 -1
  6. data/README.md +110 -16
  7. data/bin/dbf +2 -0
  8. data/docs/CNAME +1 -0
  9. data/docs/DBF.html +200 -0
  10. data/docs/DBF/Column.html +947 -0
  11. data/docs/DBF/Column/LengthError.html +124 -0
  12. data/docs/DBF/Column/NameError.html +124 -0
  13. data/docs/DBF/ColumnType.html +115 -0
  14. data/docs/DBF/ColumnType/Base.html +389 -0
  15. data/docs/DBF/ColumnType/Boolean.html +238 -0
  16. data/docs/DBF/ColumnType/Currency.html +238 -0
  17. data/docs/DBF/ColumnType/Date.html +242 -0
  18. data/docs/DBF/ColumnType/DateTime.html +246 -0
  19. data/docs/DBF/ColumnType/Double.html +238 -0
  20. data/docs/DBF/ColumnType/Float.html +238 -0
  21. data/docs/DBF/ColumnType/General.html +238 -0
  22. data/docs/DBF/ColumnType/Memo.html +246 -0
  23. data/docs/DBF/ColumnType/Nil.html +238 -0
  24. data/docs/DBF/ColumnType/Number.html +242 -0
  25. data/docs/DBF/ColumnType/SignedLong.html +238 -0
  26. data/docs/DBF/ColumnType/String.html +240 -0
  27. data/docs/DBF/Database.html +126 -0
  28. data/docs/DBF/Database/Foxpro.html +653 -0
  29. data/docs/DBF/Database/Table.html +346 -0
  30. data/docs/DBF/FileNotFoundError.html +124 -0
  31. data/docs/DBF/Header.html +723 -0
  32. data/docs/DBF/Memo.html +117 -0
  33. data/docs/DBF/Memo/Base.html +485 -0
  34. data/docs/DBF/Memo/Dbase3.html +242 -0
  35. data/docs/DBF/Memo/Dbase4.html +230 -0
  36. data/docs/DBF/Memo/Foxpro.html +268 -0
  37. data/docs/DBF/NoColumnsDefined.html +124 -0
  38. data/docs/DBF/Record.html +773 -0
  39. data/docs/DBF/Schema.html +980 -0
  40. data/docs/DBF/Table.html +1571 -0
  41. data/docs/_index.html +415 -0
  42. data/docs/class_list.html +51 -0
  43. data/docs/css/common.css +1 -0
  44. data/docs/css/full_list.css +58 -0
  45. data/docs/css/style.css +497 -0
  46. data/docs/file.README.html +359 -0
  47. data/docs/file_list.html +56 -0
  48. data/docs/frames.html +17 -0
  49. data/docs/index.html +359 -0
  50. data/docs/js/app.js +314 -0
  51. data/docs/js/full_list.js +216 -0
  52. data/docs/js/jquery.js +4 -0
  53. data/docs/method_list.html +675 -0
  54. data/docs/top-level-namespace.html +110 -0
  55. data/lib/dbf/column.rb +8 -7
  56. data/lib/dbf/column_type.rb +23 -0
  57. data/lib/dbf/database/foxpro.rb +7 -2
  58. data/lib/dbf/header.rb +11 -3
  59. data/lib/dbf/record.rb +5 -5
  60. data/lib/dbf/schema.rb +4 -3
  61. data/lib/dbf/table.rb +34 -11
  62. data/lib/dbf/version.rb +1 -1
  63. data/spec/dbf/column_spec.rb +3 -3
  64. data/spec/dbf/file_formats_spec.rb +54 -0
  65. data/spec/fixtures/dbase_02.dbf +0 -0
  66. data/spec/fixtures/dbase_02_summary.txt +23 -0
  67. data/spec/fixtures/dbase_32.dbf +0 -0
  68. data/spec/fixtures/dbase_32_summary.txt +11 -0
  69. data/spec/fixtures/dbase_8c.dbf +0 -0
  70. metadata +56 -6
  71. data/docs/supported_encodings.csv +0 -60
  72. data/docs/supported_types.markdown +0 -38
data/lib/dbf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '4.1.3'.freeze
2
+ VERSION = '4.2.0'.freeze
3
3
  end
@@ -286,13 +286,13 @@ RSpec.describe DBF::Column do
286
286
 
287
287
  describe '#name' do
288
288
  it 'contains only ASCII characters' do
289
- column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", 'N', 1, 0
289
+ column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00world-\x80--", 'N', 1, 0
290
290
  expect(column.name).to eq '---hello world---'
291
291
  end
292
292
 
293
293
  it 'is truncated at the null character' do
294
- column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", 'N', 1, 0
295
- expect(column.name).to eq '---hello '
294
+ column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00world-\x80--", 'N', 1, 0
295
+ expect(column.name).to eq '---hello world---'
296
296
  end
297
297
  end
298
298
  end
@@ -48,6 +48,24 @@ RSpec.shared_examples_for 'DBF' do
48
48
  end
49
49
  end
50
50
 
51
+ RSpec.describe DBF, 'of type 02 (FoxBase)' do
52
+ let(:table) { DBF::Table.new fixture('dbase_02.dbf') }
53
+
54
+ it_behaves_like 'DBF'
55
+
56
+ it 'reports the correct version number' do
57
+ expect(table.version).to eq '02'
58
+ end
59
+
60
+ it 'reports the correct version description' do
61
+ expect(table.version_description).to eq 'FoxBase'
62
+ end
63
+
64
+ it 'determines the number of records' do
65
+ expect(table.record_count).to eq 9
66
+ end
67
+ end
68
+
51
69
  RSpec.describe DBF, 'of type 03 (dBase III without memo file)' do
52
70
  let(:table) { DBF::Table.new fixture('dbase_03.dbf') }
53
71
 
@@ -106,6 +124,24 @@ RSpec.describe DBF, 'of type 31 (Visual FoxPro with AutoIncrement field)' do
106
124
  end
107
125
  end
108
126
 
127
+ RSpec.describe DBF, 'of type 32 (Visual FoxPro with field type Varchar or Varbinary)' do
128
+ let(:table) { DBF::Table.new fixture('dbase_32.dbf') }
129
+
130
+ it_behaves_like 'DBF'
131
+
132
+ it 'has a dBase version of 32' do
133
+ expect(table.version).to eq '32'
134
+ end
135
+
136
+ it 'reports the correct version description' do
137
+ expect(table.version_description).to eq 'Visual FoxPro with field type Varchar or Varbinary'
138
+ end
139
+
140
+ it 'determines the number of records' do
141
+ expect(table.record_count).to eq 1
142
+ end
143
+ end
144
+
109
145
  RSpec.describe DBF, 'of type 83 (dBase III with memo file)' do
110
146
  let(:table) { DBF::Table.new fixture('dbase_83.dbf') }
111
147
 
@@ -142,6 +178,24 @@ RSpec.describe DBF, 'of type 8b (dBase IV with memo file)' do
142
178
  end
143
179
  end
144
180
 
181
+ RSpec.describe DBF, 'of type 8c (unknown)' do
182
+ let(:table) { DBF::Table.new fixture('dbase_8c.dbf') }
183
+
184
+ it_behaves_like 'DBF'
185
+
186
+ it 'reports the correct version number' do
187
+ expect(table.version).to eq '8c'
188
+ end
189
+
190
+ it 'reports the correct version description' do
191
+ expect(table.version_description).to eq 'dBase 7'
192
+ end
193
+
194
+ it 'determines the number of records' do
195
+ expect(table.record_count).to eq 10
196
+ end
197
+ end
198
+
145
199
  RSpec.describe DBF, 'of type f5 (FoxPro with memo file)' do
146
200
  let(:table) { DBF::Table.new fixture('dbase_f5.dbf') }
147
201
 
Binary file
@@ -0,0 +1,23 @@
1
+
2
+ Database: dbase_02.dbf
3
+ Type: (02) FoxBase
4
+ Memo File: false
5
+ Records: 9
6
+
7
+ Fields:
8
+ Name Type Length Decimal
9
+ ------------------------------------------------------------------------------
10
+ EMP:NMBR N 3 0
11
+ LAST C 10 0
12
+ FIRST C 10 0
13
+ ADDR C 20 0
14
+ CITY C 15 0
15
+ ZIP:CODE C 10 0
16
+ PHONE C 9 0
17
+ SSN C 11 0
18
+ HIREDATE C 8 0
19
+ TERMDATE C 8 0
20
+ CLASS C 3 0
21
+ DEPT C 3 0
22
+ PAYRATE N 8 0
23
+ START:PAY N 8 0
Binary file
@@ -0,0 +1,11 @@
1
+
2
+ Database: dbase_32.dbf
3
+ Type: (32) Visual FoxPro with field type Varchar or Varbinary
4
+ Memo File: false
5
+ Records: 1
6
+
7
+ Fields:
8
+ Name Type Length Decimal
9
+ ------------------------------------------------------------------------------
10
+ NAME V 250 0
11
+ _NullFlags 0 1 0
Binary file
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: 4.1.3
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-29 00:00:00.000000000 Z
11
+ date: 2021-08-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
14
14
  files.
@@ -31,8 +31,53 @@ files:
31
31
  - Rakefile
32
32
  - bin/dbf
33
33
  - dbf.gemspec
34
- - docs/supported_encodings.csv
35
- - docs/supported_types.markdown
34
+ - docs/CNAME
35
+ - docs/DBF.html
36
+ - docs/DBF/Column.html
37
+ - docs/DBF/Column/LengthError.html
38
+ - docs/DBF/Column/NameError.html
39
+ - docs/DBF/ColumnType.html
40
+ - docs/DBF/ColumnType/Base.html
41
+ - docs/DBF/ColumnType/Boolean.html
42
+ - docs/DBF/ColumnType/Currency.html
43
+ - docs/DBF/ColumnType/Date.html
44
+ - docs/DBF/ColumnType/DateTime.html
45
+ - docs/DBF/ColumnType/Double.html
46
+ - docs/DBF/ColumnType/Float.html
47
+ - docs/DBF/ColumnType/General.html
48
+ - docs/DBF/ColumnType/Memo.html
49
+ - docs/DBF/ColumnType/Nil.html
50
+ - docs/DBF/ColumnType/Number.html
51
+ - docs/DBF/ColumnType/SignedLong.html
52
+ - docs/DBF/ColumnType/String.html
53
+ - docs/DBF/Database.html
54
+ - docs/DBF/Database/Foxpro.html
55
+ - docs/DBF/Database/Table.html
56
+ - docs/DBF/FileNotFoundError.html
57
+ - docs/DBF/Header.html
58
+ - docs/DBF/Memo.html
59
+ - docs/DBF/Memo/Base.html
60
+ - docs/DBF/Memo/Dbase3.html
61
+ - docs/DBF/Memo/Dbase4.html
62
+ - docs/DBF/Memo/Foxpro.html
63
+ - docs/DBF/NoColumnsDefined.html
64
+ - docs/DBF/Record.html
65
+ - docs/DBF/Schema.html
66
+ - docs/DBF/Table.html
67
+ - docs/_index.html
68
+ - docs/class_list.html
69
+ - docs/css/common.css
70
+ - docs/css/full_list.css
71
+ - docs/css/style.css
72
+ - docs/file.README.html
73
+ - docs/file_list.html
74
+ - docs/frames.html
75
+ - docs/index.html
76
+ - docs/js/app.js
77
+ - docs/js/full_list.js
78
+ - docs/js/jquery.js
79
+ - docs/method_list.html
80
+ - docs/top-level-namespace.html
36
81
  - lib/dbf.rb
37
82
  - lib/dbf/column.rb
38
83
  - lib/dbf/column_type.rb
@@ -54,6 +99,8 @@ files:
54
99
  - spec/dbf/table_spec.rb
55
100
  - spec/fixtures/cp1251.dbf
56
101
  - spec/fixtures/cp1251_summary.txt
102
+ - spec/fixtures/dbase_02.dbf
103
+ - spec/fixtures/dbase_02_summary.txt
57
104
  - spec/fixtures/dbase_03.dbf
58
105
  - spec/fixtures/dbase_03_summary.txt
59
106
  - spec/fixtures/dbase_30.dbf
@@ -61,6 +108,8 @@ files:
61
108
  - spec/fixtures/dbase_30_summary.txt
62
109
  - spec/fixtures/dbase_31.dbf
63
110
  - spec/fixtures/dbase_31_summary.txt
111
+ - spec/fixtures/dbase_32.dbf
112
+ - spec/fixtures/dbase_32_summary.txt
64
113
  - spec/fixtures/dbase_83.dbf
65
114
  - spec/fixtures/dbase_83.dbt
66
115
  - spec/fixtures/dbase_83_missing_memo.dbf
@@ -74,6 +123,7 @@ files:
74
123
  - spec/fixtures/dbase_8b.dbf
75
124
  - spec/fixtures/dbase_8b.dbt
76
125
  - spec/fixtures/dbase_8b_summary.txt
126
+ - spec/fixtures/dbase_8c.dbf
77
127
  - spec/fixtures/dbase_f5.dbf
78
128
  - spec/fixtures/dbase_f5.fpt
79
129
  - spec/fixtures/dbase_f5_summary.txt
@@ -112,13 +162,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
162
  - !ruby/object:Gem::Version
113
163
  version: 1.3.0
114
164
  requirements: []
115
- rubygems_version: 3.1.2
165
+ rubygems_version: 3.2.15
116
166
  signing_key:
117
167
  specification_version: 4
118
168
  summary: Read xBase files
119
169
  test_files:
170
+ - spec/dbf/column_spec.rb
120
171
  - spec/dbf/database/foxpro_spec.rb
121
172
  - spec/dbf/file_formats_spec.rb
122
- - spec/dbf/column_spec.rb
123
173
  - spec/dbf/record_spec.rb
124
174
  - spec/dbf/table_spec.rb
@@ -1,60 +0,0 @@
1
- "Code Page", "Encoding", "Description"
2
- "01", "cp437", "U.S. MS–DOS"
3
- "02", "cp850", "International MS–DOS"
4
- "03", "cp1252", "Windows ANSI"
5
- "08", "cp865", "Danish OEM"
6
- "09", "cp437", "Dutch OEM"
7
- "0a", "cp850", "Dutch OEM*"
8
- "0b", "cp437", "Finnish OEM"
9
- "0d", "cp437", "French OEM"
10
- "0e", "cp850", "French OEM*"
11
- "0f", "cp437", "German OEM"
12
- "10", "cp850", "German OEM*"
13
- "11", "cp437", "Italian OEM"
14
- "12", "cp850", "Italian OEM*"
15
- "13", "cp932", "Japanese Shift-JIS"
16
- "14", "cp850", "Spanish OEM*"
17
- "15", "cp437", "Swedish OEM"
18
- "16", "cp850", "Swedish OEM*"
19
- "17", "cp865", "Norwegian OEM"
20
- "18", "cp437", "Spanish OEM"
21
- "19", "cp437", "English OEM (Britain)"
22
- "1a", "cp850", "English OEM (Britain)*"
23
- "1b", "cp437", "English OEM (U.S.)"
24
- "1c", "cp863", "French OEM (Canada)"
25
- "1d", "cp850", "French OEM*"
26
- "1f", "cp852", "Czech OEM"
27
- "22", "cp852", "Hungarian OEM"
28
- "23", "cp852", "Polish OEM"
29
- "24", "cp860", "Portuguese OEM"
30
- "25", "cp850", "Portuguese OEM*"
31
- "26", "cp866", "Russian OEM"
32
- "37", "cp850", "English OEM (U.S.)*"
33
- "40", "cp852", "Romanian OEM"
34
- "4d", "cp936", "Chinese GBK (PRC)"
35
- "4e", "cp949", "Korean (ANSI/OEM)"
36
- "4f", "cp950", "Chinese Big5 (Taiwan)"
37
- "50", "cp874", "Thai (ANSI/OEM)"
38
- "57", "cp1252", "ANSI"
39
- "58", "cp1252", "Western European ANSI"
40
- "59", "cp1252", "Spanish ANSI"
41
- "64", "cp852", "Eastern European MS–DOS"
42
- "65", "cp866", "Russian MS–DOS"
43
- "66", "cp865", "Nordic MS–DOS"
44
- "67", "cp861", "Icelandic MS–DOS"
45
- "6a", "cp737", "Greek MS–DOS (437G)"
46
- "6b", "cp857", "Turkish MS–DOS"
47
- "6c", "cp863", "French–Canadian MS–DOS"
48
- "78", "cp950", "Taiwan Big 5"
49
- "79", "cp949", "Hangul (Wansung)"
50
- "7a", "cp936", "PRC GBK"
51
- "7b", "cp932", "Japanese Shift-JIS"
52
- "7c", "cp874", "Thai Windows/MS–DOS"
53
- "86", "cp737", "Greek OEM"
54
- "87", "cp852", "Slovenian OEM"
55
- "88", "cp857", "Turkish OEM"
56
- "c8", "cp1250", "Eastern European Windows"
57
- "c9", "cp1251", "Russian Windows"
58
- "ca", "cp1254", "Turkish Windows"
59
- "cb", "cp1253", "Greek Windows"
60
- "cc", "cp1257", "Baltic Windows"
@@ -1,38 +0,0 @@
1
- # DBF supported data types
2
-
3
- | Version | Description | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
4
- |---------|-----------------------------------|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5
- | 02 | FoxBase | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
6
- | 03 | dBase III without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
7
- | 04 | dBase IV without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
8
- | 05 | dBase V without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
9
- | 07 | Visual Objects 1.x | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
10
- | 30 | Visual FoxPro | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | - |
11
- | 31 | Visual FoxPro with AutoIncrement | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
12
- | 7b | dBase IV with memo file | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
13
- | 83 | dBase III with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
14
- | 87 | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
15
- | 8b | dBase IV with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
16
- | 8e | dBase IV with SQL table | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
17
- | f5 | FoxPro with memo file | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
18
- | fb | FoxPro without memo file | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
19
-
20
- Data type descriptions
21
-
22
- * C = Character
23
- * N = Number
24
- * L = Logical
25
- * D = Date
26
- * M = Memo
27
- * F = Float
28
- * B = Binary
29
- * G = General
30
- * P = Picture
31
- * Y = Currency
32
- * T = DateTime
33
- * I = Integer
34
- * V = VariField
35
- * X = SQL compat
36
- * @ = Timestamp
37
- * O = Double
38
- * + = Autoincrement