dbf 1.6.1 → 1.6.2
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.
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +5 -1
- data/Rakefile +2 -0
- data/lib/dbf/encodings.yml +59 -59
- data/lib/dbf/memo.rb +4 -0
- data/lib/dbf/table.rb +20 -9
- data/lib/dbf/version.rb +1 -1
- data/spec/dbf/record_spec.rb +1 -1
- data/spec/dbf/table_spec.rb +9 -0
- data/spec/spec_helper.rb +1 -3
- metadata +65 -72
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 1.6.2
|
2
|
+
- add Table#filename method
|
3
|
+
- Rakefile now loads gems with bundler
|
4
|
+
- add Table#supports_encoding?
|
5
|
+
- simplify encodings.yml loader
|
6
|
+
- add rake and rdoc as development dependencies
|
7
|
+
- simplify open_memo file search logic
|
8
|
+
- remove unnecessary requires in spec helper
|
9
|
+
- fix cli summary
|
10
|
+
|
1
11
|
## 1.6.1
|
2
12
|
- fix YAML issue when using MRI version > 1.9.1
|
3
13
|
- remove Table#seek_to_index and Table#current_record private methods
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dbf (1.6.
|
4
|
+
dbf (1.6.2)
|
5
5
|
fastercsv (~> 1.5.4)
|
6
6
|
|
7
7
|
GEM
|
@@ -13,6 +13,8 @@ GEM
|
|
13
13
|
fastercsv (1.5.4)
|
14
14
|
linecache19 (0.5.12)
|
15
15
|
ruby_core_source (>= 0.1.4)
|
16
|
+
rake (0.9.2)
|
17
|
+
rdoc (3.9.4)
|
16
18
|
rspec (2.6.0)
|
17
19
|
rspec-core (~> 2.6.0)
|
18
20
|
rspec-expectations (~> 2.6.0)
|
@@ -37,5 +39,7 @@ PLATFORMS
|
|
37
39
|
|
38
40
|
DEPENDENCIES
|
39
41
|
dbf!
|
42
|
+
rake (~> 0.9.2)
|
43
|
+
rdoc (~> 3.9.0)
|
40
44
|
rspec (~> 2.6.0)
|
41
45
|
ruby-debug19
|
data/Rakefile
CHANGED
data/lib/dbf/encodings.yml
CHANGED
@@ -1,61 +1,61 @@
|
|
1
1
|
# inspired by http://trac.osgeo.org/gdal/ticket/2864
|
2
2
|
|
3
|
-
"01": cp437 # U.S. MS–DOS
|
4
|
-
"02": cp850 # International MS–DOS
|
5
|
-
"03": cp1252 # Windows ANSI
|
6
|
-
"08": cp865 # Danish OEM
|
7
|
-
"09": cp437 # Dutch OEM
|
8
|
-
"0a": cp850 # Dutch OEM*
|
9
|
-
"0b": cp437 # Finnish OEM
|
10
|
-
"0d": cp437 # French OEM
|
11
|
-
"0e": cp850 # French OEM*
|
12
|
-
"0f": cp437 # German OEM
|
13
|
-
"10": cp850 # German OEM*
|
14
|
-
"11": cp437 # Italian OEM
|
15
|
-
"12": cp850 # Italian OEM*
|
16
|
-
"13": cp932 # Japanese Shift-JIS
|
17
|
-
"14": cp850 # Spanish OEM*
|
18
|
-
"15": cp437 # Swedish OEM
|
19
|
-
"16": cp850 # Swedish OEM*
|
20
|
-
"17": cp865 # Norwegian OEM
|
21
|
-
"18": cp437 # Spanish OEM
|
22
|
-
"19": cp437 # English OEM (Britain)
|
23
|
-
"1a": cp850 # English OEM (Britain)*
|
24
|
-
"1b": cp437 # English OEM (U.S.)
|
25
|
-
"1c": cp863 # French OEM (Canada)
|
26
|
-
"1d": cp850 # French OEM*
|
27
|
-
"1f": cp852 # Czech OEM
|
28
|
-
"22": cp852 # Hungarian OEM
|
29
|
-
"23": cp852 # Polish OEM
|
30
|
-
"24": cp860 # Portuguese OEM
|
31
|
-
"25": cp850 # Portuguese OEM*
|
32
|
-
"26": cp866 # Russian OEM
|
33
|
-
"37": cp850 # English OEM (U.S.)*
|
34
|
-
"40": cp852 # Romanian OEM
|
35
|
-
"4d": cp936 # Chinese GBK (PRC)
|
36
|
-
"4e": cp949 # Korean (ANSI/OEM)
|
37
|
-
"4f": cp950 # Chinese Big5 (Taiwan)
|
38
|
-
"50": cp874 # Thai (ANSI/OEM)
|
39
|
-
"57": cp1252 # ANSI
|
40
|
-
"58": cp1252 # Western European ANSI
|
41
|
-
"59": cp1252 # Spanish ANSI
|
42
|
-
"64": cp852 # Eastern European MS–DOS
|
43
|
-
"65": cp866 # Russian MS–DOS
|
44
|
-
"66": cp865 # Nordic MS–DOS
|
45
|
-
"67": cp861 # Icelandic MS–DOS
|
46
|
-
"6a": cp737 # Greek MS–DOS (437G)
|
47
|
-
"6b": cp857 # Turkish MS–DOS
|
48
|
-
"6c": cp863 # French–Canadian MS–DOS
|
49
|
-
"78": cp950 # Taiwan Big 5
|
50
|
-
"79": cp949 # Hangul (Wansung)
|
51
|
-
"7a": cp936 # PRC GBK
|
52
|
-
"7b": cp932 # Japanese Shift-JIS
|
53
|
-
"7c": cp874 # Thai Windows/MS–DOS
|
54
|
-
"86": cp737 # Greek OEM
|
55
|
-
"87": cp852 # Slovenian OEM
|
56
|
-
"88": cp857 # Turkish OEM
|
57
|
-
"c8": cp1250 # Eastern European Windows
|
58
|
-
"c9": cp1251 # Russian Windows
|
59
|
-
"ca": cp1254 # Turkish Windows
|
60
|
-
"cb": cp1253 # Greek Windows
|
61
|
-
"cc": cp1257 # Baltic Windows
|
3
|
+
"01": "cp437" # U.S. MS–DOS
|
4
|
+
"02": "cp850" # International MS–DOS
|
5
|
+
"03": "cp1252" # Windows ANSI
|
6
|
+
"08": "cp865" # Danish OEM
|
7
|
+
"09": "cp437" # Dutch OEM
|
8
|
+
"0a": "cp850" # Dutch OEM*
|
9
|
+
"0b": "cp437" # Finnish OEM
|
10
|
+
"0d": "cp437" # French OEM
|
11
|
+
"0e": "cp850" # French OEM*
|
12
|
+
"0f": "cp437" # German OEM
|
13
|
+
"10": "cp850" # German OEM*
|
14
|
+
"11": "cp437" # Italian OEM
|
15
|
+
"12": "cp850" # Italian OEM*
|
16
|
+
"13": "cp932" # Japanese Shift-JIS
|
17
|
+
"14": "cp850" # Spanish OEM*
|
18
|
+
"15": "cp437" # Swedish OEM
|
19
|
+
"16": "cp850" # Swedish OEM*
|
20
|
+
"17": "cp865" # Norwegian OEM
|
21
|
+
"18": "cp437" # Spanish OEM
|
22
|
+
"19": "cp437" # English OEM (Britain)
|
23
|
+
"1a": "cp850" # English OEM (Britain)*
|
24
|
+
"1b": "cp437" # English OEM (U.S.)
|
25
|
+
"1c": "cp863" # French OEM (Canada)
|
26
|
+
"1d": "cp850" # French OEM*
|
27
|
+
"1f": "cp852" # Czech OEM
|
28
|
+
"22": "cp852" # Hungarian OEM
|
29
|
+
"23": "cp852" # Polish OEM
|
30
|
+
"24": "cp860" # Portuguese OEM
|
31
|
+
"25": "cp850" # Portuguese OEM*
|
32
|
+
"26": "cp866" # Russian OEM
|
33
|
+
"37": "cp850" # English OEM (U.S.)*
|
34
|
+
"40": "cp852" # Romanian OEM
|
35
|
+
"4d": "cp936" # Chinese GBK (PRC)
|
36
|
+
"4e": "cp949" # Korean (ANSI/OEM)
|
37
|
+
"4f": "cp950" # Chinese Big5 (Taiwan)
|
38
|
+
"50": "cp874" # Thai (ANSI/OEM)
|
39
|
+
"57": "cp1252" # ANSI
|
40
|
+
"58": "cp1252" # Western European ANSI
|
41
|
+
"59": "cp1252" # Spanish ANSI
|
42
|
+
"64": "cp852" # Eastern European MS–DOS
|
43
|
+
"65": "cp866" # Russian MS–DOS
|
44
|
+
"66": "cp865" # Nordic MS–DOS
|
45
|
+
"67": "cp861" # Icelandic MS–DOS
|
46
|
+
"6a": "cp737" # Greek MS–DOS (437G)
|
47
|
+
"6b": "cp857" # Turkish MS–DOS
|
48
|
+
"6c": "cp863" # French–Canadian MS–DOS
|
49
|
+
"78": "cp950" # Taiwan Big 5
|
50
|
+
"79": "cp949" # Hangul (Wansung)
|
51
|
+
"7a": "cp936" # PRC GBK
|
52
|
+
"7b": "cp932" # Japanese Shift-JIS
|
53
|
+
"7c": "cp874" # Thai Windows/MS–DOS
|
54
|
+
"86": "cp737" # Greek OEM
|
55
|
+
"87": "cp852" # Slovenian OEM
|
56
|
+
"88": "cp857" # Turkish OEM
|
57
|
+
"c8": "cp1250" # Eastern European Windows
|
58
|
+
"c9": "cp1251" # Russian Windows
|
59
|
+
"ca": "cp1254" # Turkish Windows
|
60
|
+
"cb": "cp1253" # Greek Windows
|
61
|
+
"cc": "cp1257" # Baltic Windows
|
data/lib/dbf/memo.rb
CHANGED
data/lib/dbf/table.rb
CHANGED
@@ -36,12 +36,24 @@ module DBF
|
|
36
36
|
get_header_info
|
37
37
|
@memo = open_memo(path)
|
38
38
|
end
|
39
|
+
|
40
|
+
def has_memo_file?
|
41
|
+
@memo && memo_file_format
|
42
|
+
end
|
43
|
+
|
44
|
+
def memo_file_format
|
45
|
+
@memo.format if has_memo_file?
|
46
|
+
end
|
39
47
|
|
40
48
|
# Closes the table and memo file
|
41
49
|
def close
|
42
50
|
@memo && @memo.close
|
43
51
|
@data.close
|
44
52
|
end
|
53
|
+
|
54
|
+
def filename
|
55
|
+
File.basename @data.path
|
56
|
+
end
|
45
57
|
|
46
58
|
# Calls block once for each record in the table. The record may be nil
|
47
59
|
# if the record has been marked as deleted.
|
@@ -164,17 +176,16 @@ module DBF
|
|
164
176
|
columns
|
165
177
|
end
|
166
178
|
end
|
179
|
+
|
180
|
+
def supports_encoding?
|
181
|
+
"".respond_to? :encoding
|
182
|
+
end
|
167
183
|
|
168
184
|
private
|
169
185
|
|
170
186
|
def open_memo(path) #nodoc
|
171
|
-
|
172
|
-
|
173
|
-
if File.exists?(filename)
|
174
|
-
return Memo.open(filename, version)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
nil
|
187
|
+
files = Dir.glob("#{File.dirname(path)}/#{File.basename(path, '.*')}*.{fpt,FPT,dbt,DBT}")
|
188
|
+
files.any? ? Memo.open(files.first, version) : nil
|
178
189
|
end
|
179
190
|
|
180
191
|
def find_all(options) #nodoc
|
@@ -198,7 +209,7 @@ module DBF
|
|
198
209
|
@data.rewind
|
199
210
|
@version, @record_count, @header_length, @record_length, encoding_key =
|
200
211
|
@data.read(DBF_HEADER_SIZE).unpack("H2 x3 V v2 x17H2")
|
201
|
-
@encoding = self.class.encodings[encoding_key] if
|
212
|
+
@encoding = self.class.encodings[encoding_key] if supports_encoding?
|
202
213
|
end
|
203
214
|
|
204
215
|
def seek(offset) #nodoc
|
@@ -214,7 +225,7 @@ module DBF
|
|
214
225
|
end
|
215
226
|
|
216
227
|
def self.encodings
|
217
|
-
@encodings ||= YAML.
|
228
|
+
@encodings ||= YAML.load_file File.expand_path("../encodings.yml", __FILE__)
|
218
229
|
end
|
219
230
|
end
|
220
231
|
|
data/lib/dbf/version.rb
CHANGED
data/spec/dbf/record_spec.rb
CHANGED
@@ -47,7 +47,7 @@ describe DBF::Record do
|
|
47
47
|
|
48
48
|
let(:record) { table.find(0) }
|
49
49
|
it 'should automatically encodes to default system encoding' do
|
50
|
-
if
|
50
|
+
if table.supports_encoding?
|
51
51
|
record.name.encoding.should == Encoding.default_external
|
52
52
|
record.name.encode("UTF-8").unpack("H4").should == ["d0b0"] # russian a
|
53
53
|
end
|
data/spec/dbf/table_spec.rb
CHANGED
@@ -152,5 +152,14 @@ describe DBF::Table do
|
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
|
+
describe "filename" do
|
156
|
+
before do
|
157
|
+
@table = DBF::Table.new "#{DB_PATH}/dbase_03.dbf"
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should be dbase_03.dbf' do
|
161
|
+
@table.filename.should == "dbase_03.dbf"
|
162
|
+
end
|
163
|
+
end
|
155
164
|
end
|
156
165
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,79 +1,82 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbf
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.6.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 6
|
9
|
-
- 1
|
10
|
-
version: 1.6.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Keith Morrison
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: fastercsv
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70325670387600 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 11
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 5
|
32
|
-
- 4
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.5.4
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rspec
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: *70325670387600
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70325670387140 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
29
|
+
requirements:
|
42
30
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 23
|
45
|
-
segments:
|
46
|
-
- 2
|
47
|
-
- 6
|
48
|
-
- 0
|
31
|
+
- !ruby/object:Gem::Version
|
49
32
|
version: 2.6.0
|
50
33
|
type: :development
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: ruby-debug
|
54
34
|
prerelease: false
|
55
|
-
|
35
|
+
version_requirements: *70325670387140
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &70325670386640 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.9.2
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70325670386640
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdoc
|
49
|
+
requirement: &70325670386180 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.9.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70325670386180
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: ruby-debug19
|
60
|
+
requirement: &70325670385780 !ruby/object:Gem::Requirement
|
56
61
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
64
66
|
type: :development
|
65
|
-
|
66
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70325670385780
|
69
|
+
description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
|
70
|
+
files.
|
67
71
|
email: keithm@infused.org
|
68
|
-
executables:
|
72
|
+
executables:
|
69
73
|
- dbf
|
70
74
|
extensions: []
|
71
|
-
|
72
|
-
extra_rdoc_files:
|
75
|
+
extra_rdoc_files:
|
73
76
|
- README.md
|
74
77
|
- CHANGELOG.md
|
75
78
|
- MIT-LICENSE
|
76
|
-
files:
|
79
|
+
files:
|
77
80
|
- CHANGELOG.md
|
78
81
|
- Gemfile
|
79
82
|
- Gemfile.lock
|
@@ -110,40 +113,30 @@ files:
|
|
110
113
|
- spec/spec_helper.rb
|
111
114
|
homepage: http://github.com/infused/dbf
|
112
115
|
licenses: []
|
113
|
-
|
114
116
|
post_install_message:
|
115
|
-
rdoc_options:
|
117
|
+
rdoc_options:
|
116
118
|
- --charset=UTF-8
|
117
|
-
require_paths:
|
119
|
+
require_paths:
|
118
120
|
- lib
|
119
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
122
|
none: false
|
121
|
-
requirements:
|
122
|
-
- -
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
|
125
|
-
|
126
|
-
- 0
|
127
|
-
version: "0"
|
128
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
128
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
hash: 27
|
134
|
-
segments:
|
135
|
-
- 1
|
136
|
-
- 3
|
137
|
-
- 0
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
138
132
|
version: 1.3.0
|
139
133
|
requirements: []
|
140
|
-
|
141
134
|
rubyforge_project:
|
142
135
|
rubygems_version: 1.8.10
|
143
136
|
signing_key:
|
144
137
|
specification_version: 3
|
145
138
|
summary: Read xBase files
|
146
|
-
test_files:
|
139
|
+
test_files:
|
147
140
|
- spec/dbf/column_spec.rb
|
148
141
|
- spec/dbf/file_formats_spec.rb
|
149
142
|
- spec/dbf/record_spec.rb
|