dbf 4.1.3 → 4.2.0

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