dbf 1.7.2 → 1.7.3
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 +3 -0
- data/Gemfile.lock +10 -14
- data/README.md +3 -6
- data/dbf.gemspec +5 -3
- data/docs/supported_types.markdown +51 -23
- data/lib/dbf/column/base.rb +1 -2
- data/lib/dbf/memo/foxpro.rb +5 -5
- data/lib/dbf/record.rb +14 -15
- data/lib/dbf/table.rb +15 -9
- data/lib/dbf/version.rb +1 -1
- data/spec/dbf/table_spec.rb +11 -9
- metadata +44 -90
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,33 +2,29 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
dbf (1.7.2)
|
5
|
-
fastercsv (~> 1.5.4)
|
6
5
|
|
7
6
|
GEM
|
8
7
|
remote: http://rubygems.org/
|
9
8
|
specs:
|
10
9
|
diff-lcs (1.1.3)
|
11
|
-
|
12
|
-
json (1.6.3)
|
13
|
-
json (1.6.3-java)
|
10
|
+
json (1.6.5)
|
14
11
|
rake (0.9.2.2)
|
15
|
-
rdoc (3.
|
12
|
+
rdoc (3.12)
|
16
13
|
json (~> 1.4)
|
17
|
-
rspec (2.
|
18
|
-
rspec-core (~> 2.
|
19
|
-
rspec-expectations (~> 2.
|
20
|
-
rspec-mocks (~> 2.
|
21
|
-
rspec-core (2.
|
22
|
-
rspec-expectations (2.
|
14
|
+
rspec (2.8.0)
|
15
|
+
rspec-core (~> 2.8.0)
|
16
|
+
rspec-expectations (~> 2.8.0)
|
17
|
+
rspec-mocks (~> 2.8.0)
|
18
|
+
rspec-core (2.8.0)
|
19
|
+
rspec-expectations (2.8.0)
|
23
20
|
diff-lcs (~> 1.1.2)
|
24
|
-
rspec-mocks (2.
|
21
|
+
rspec-mocks (2.8.0)
|
25
22
|
|
26
23
|
PLATFORMS
|
27
|
-
java
|
28
24
|
ruby
|
29
25
|
|
30
26
|
DEPENDENCIES
|
31
27
|
dbf!
|
32
28
|
rake (~> 0.9.2)
|
33
29
|
rdoc (~> 3.11)
|
34
|
-
rspec (~> 2.
|
30
|
+
rspec (~> 2.8.0)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# DBF
|
1
|
+
# DBF [](http://travis-ci.org/infused/dbf)
|
2
2
|
|
3
3
|
DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro
|
4
4
|
database files
|
@@ -17,8 +17,6 @@ DBF is tested to work with the following versions of ruby:
|
|
17
17
|
* JRuby 1.6.2, 1.6.3, 1.6.4, and 1.6.5
|
18
18
|
* REE 1.8.6, 1.8.7
|
19
19
|
|
20
|
-
[](http://travis-ci.org/infused/dbf)
|
21
|
-
|
22
20
|
## Installation
|
23
21
|
|
24
22
|
gem install dbf
|
@@ -28,7 +26,6 @@ DBF is tested to work with the following versions of ruby:
|
|
28
26
|
Open a DBF file:
|
29
27
|
|
30
28
|
require 'dbf'
|
31
|
-
|
32
29
|
widgets = DBF::Table.new("widgets.dbf")
|
33
30
|
|
34
31
|
Enumerate all records
|
@@ -121,7 +118,7 @@ implemented, please give me a shout. FoxBase/dBase II files are not supported
|
|
121
118
|
at this time.
|
122
119
|
|
123
120
|
See
|
124
|
-
[
|
121
|
+
[doc/supported_types.markdown](docs/supported_types.markdown)
|
125
122
|
for a full list of supported column types.
|
126
123
|
|
127
124
|
## Limitations
|
@@ -131,7 +128,7 @@ for a full list of supported column types.
|
|
131
128
|
|
132
129
|
## License
|
133
130
|
|
134
|
-
Copyright (c) 2006-
|
131
|
+
Copyright (c) 2006-2012 Keith Morrison <keithm@infused.org>
|
135
132
|
|
136
133
|
Permission is hereby granted, free of charge, to any person
|
137
134
|
obtaining a copy of this software and associated documentation
|
data/dbf.gemspec
CHANGED
@@ -19,11 +19,13 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
21
|
s.required_rubygems_version = '>= 1.3.0'
|
22
|
-
|
23
|
-
|
22
|
+
if RUBY_VERSION.to_f < 1.9
|
23
|
+
s.add_dependency 'fastercsv', '~> 1.5.4'
|
24
|
+
end
|
25
|
+
s.add_development_dependency 'rspec', '~> 2.8.0'
|
24
26
|
s.add_development_dependency 'rake', '~> 0.9.2'
|
25
27
|
|
26
|
-
if RUBY_VERSION ==
|
28
|
+
if RUBY_VERSION == RUBY_VERSION.to_f >= 1.9
|
27
29
|
s.add_development_dependency 'rdoc', '~> 2.5.0'
|
28
30
|
else
|
29
31
|
s.add_development_dependency 'rdoc', '~> 3.11'
|
@@ -1,25 +1,53 @@
|
|
1
1
|
# DBF supported data types
|
2
2
|
|
3
|
-
|
4
|
-
| Version | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
|
5
|
-
|
6
|
-
|
|
7
|
-
|
8
|
-
|
|
9
|
-
|
10
|
-
|
|
11
|
-
|
12
|
-
|
|
13
|
-
|
14
|
-
|
|
15
|
-
|
16
|
-
|
|
17
|
-
|
18
|
-
|
|
19
|
-
|
20
|
-
|
|
21
|
-
|
22
|
-
|
|
23
|
-
|
24
|
-
|
|
25
|
-
|
3
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
4
|
+
| Version | Description | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
|
5
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
6
|
+
| 02 | FoxBase | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
7
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
8
|
+
| 03 | dBase III without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
9
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
10
|
+
| 04 | dBase IV without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
11
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
12
|
+
| 05 | dBase V without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
13
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
14
|
+
| 07 | Visual Objects 1.x | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
15
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
16
|
+
| 30 | Visual FoxPro | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | - |
|
17
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
18
|
+
| 31 | Visual FoxPro with AutoIncrement | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
19
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
20
|
+
| 7b | dBase IV with memo file | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
|
21
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
22
|
+
| 83 | dBase III with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
|
23
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
24
|
+
| 87 | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
|
25
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
26
|
+
| 8b | dBase IV with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
|
27
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
28
|
+
| 8e | dBase IV with SQL table | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
|
29
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
30
|
+
| f5 | FoxPro with memo file | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
31
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
32
|
+
| fb | FoxPro without memo file | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
33
|
+
+---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
34
|
+
|
35
|
+
Data type descriptions
|
36
|
+
|
37
|
+
* C = Character
|
38
|
+
* N = Number
|
39
|
+
* L = Logical
|
40
|
+
* D = Date
|
41
|
+
* M = Memo
|
42
|
+
* F = Float
|
43
|
+
* B = Binary
|
44
|
+
* G = General
|
45
|
+
* P = Picture
|
46
|
+
* Y = Currency
|
47
|
+
* T = DateTime
|
48
|
+
* I = Integer
|
49
|
+
* V = VariField
|
50
|
+
* X = SQL compat
|
51
|
+
* @ = Timestamp
|
52
|
+
* O = Double
|
53
|
+
* + = Autoincrement
|
data/lib/dbf/column/base.rb
CHANGED
@@ -81,7 +81,7 @@ module DBF
|
|
81
81
|
value.strip =~ /^(y|t)$/i ? true : false
|
82
82
|
end
|
83
83
|
|
84
|
-
def encode_string(value)
|
84
|
+
def encode_string(value) #nodoc
|
85
85
|
@encoding ? value.force_encoding(@encoding).encode(Encoding.default_external, :undef => :replace, :invalid => :replace) : value
|
86
86
|
end
|
87
87
|
|
@@ -116,7 +116,6 @@ module DBF
|
|
116
116
|
value.gsub(/[^\x20-\x7E]/, "")
|
117
117
|
end
|
118
118
|
|
119
|
-
|
120
119
|
end
|
121
120
|
end
|
122
121
|
end
|
data/lib/dbf/memo/foxpro.rb
CHANGED
@@ -2,13 +2,13 @@ module DBF
|
|
2
2
|
module Memo
|
3
3
|
class Foxpro < Base
|
4
4
|
FPT_HEADER_SIZE = 512
|
5
|
-
|
5
|
+
|
6
6
|
def build_memo(start_block) #nodoc
|
7
7
|
@data.seek offset(start_block)
|
8
|
-
|
8
|
+
|
9
9
|
memo_type, memo_size, memo_string = @data.read(block_size).unpack("NNa*")
|
10
10
|
return nil unless memo_type == 1 && memo_size > 0
|
11
|
-
|
11
|
+
|
12
12
|
if memo_size > block_content_size
|
13
13
|
memo_string << @data.read(content_size(memo_size))
|
14
14
|
else
|
@@ -16,9 +16,9 @@ module DBF
|
|
16
16
|
end
|
17
17
|
memo_string
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
private
|
21
|
-
|
21
|
+
|
22
22
|
def block_size #nodoc
|
23
23
|
@block_size ||= begin
|
24
24
|
@data.rewind
|
data/lib/dbf/record.rb
CHANGED
@@ -3,7 +3,10 @@ module DBF
|
|
3
3
|
class Record
|
4
4
|
# Initialize a new DBF::Record
|
5
5
|
#
|
6
|
-
# @
|
6
|
+
# @data [String, StringIO] data
|
7
|
+
# @columns [Column]
|
8
|
+
# @version [String]
|
9
|
+
# @memo [DBF::Memo]
|
7
10
|
def initialize(data, columns, version, memo)
|
8
11
|
@data = StringIO.new(data)
|
9
12
|
@columns, @version, @memo = columns, version, memo
|
@@ -23,7 +26,7 @@ module DBF
|
|
23
26
|
#
|
24
27
|
# @return [Array]
|
25
28
|
def to_a
|
26
|
-
@column_names.map {
|
29
|
+
@column_names.map {|name| attributes[name]}
|
27
30
|
end
|
28
31
|
|
29
32
|
# Do all search parameters match?
|
@@ -36,13 +39,11 @@ module DBF
|
|
36
39
|
|
37
40
|
# @return [Hash]
|
38
41
|
def attributes
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@attributes[column.name] = init_attribute(column)
|
42
|
+
@attributes ||= begin
|
43
|
+
attributes = Attributes.new
|
44
|
+
@columns.each {|column| attributes[column.name] = init_attribute(column)}
|
45
|
+
attributes
|
44
46
|
end
|
45
|
-
@attributes
|
46
47
|
end
|
47
48
|
|
48
49
|
private
|
@@ -50,17 +51,15 @@ module DBF
|
|
50
51
|
def define_accessors #nodoc
|
51
52
|
@column_names.each do |name|
|
52
53
|
next if respond_to? name
|
53
|
-
self.class.
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
END
|
54
|
+
self.class.send(:define_method, name) do
|
55
|
+
attributes[name]
|
56
|
+
end
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
61
60
|
def init_attribute(column) #nodoc
|
62
61
|
if column.memo?
|
63
|
-
@memo.get get_memo_start_block(column)
|
62
|
+
@memo.get get_memo_start_block(column)
|
64
63
|
else
|
65
64
|
column.type_cast unpack_data(column)
|
66
65
|
end
|
@@ -79,4 +78,4 @@ module DBF
|
|
79
78
|
end
|
80
79
|
|
81
80
|
end
|
82
|
-
end
|
81
|
+
end
|
data/lib/dbf/table.rb
CHANGED
@@ -12,10 +12,12 @@ module DBF
|
|
12
12
|
"03" => "dBase III without memo file",
|
13
13
|
"04" => "dBase IV without memo file",
|
14
14
|
"05" => "dBase V without memo file",
|
15
|
+
"07" => "Visual Objects 1.x",
|
15
16
|
"30" => "Visual FoxPro",
|
16
17
|
"31" => "Visual FoxPro with AutoIncrement field",
|
17
18
|
"7b" => "dBase IV with memo file",
|
18
19
|
"83" => "dBase III with memo file",
|
20
|
+
"87" => "Visual Objects 1.x with memo file",
|
19
21
|
"8b" => "dBase IV with memo file",
|
20
22
|
"8e" => "dBase IV with SQL table",
|
21
23
|
"f5" => "FoxPro with memo file",
|
@@ -186,8 +188,9 @@ module DBF
|
|
186
188
|
@columns ||= begin
|
187
189
|
@data.seek(DBF_HEADER_SIZE)
|
188
190
|
columns = []
|
189
|
-
|
190
|
-
|
191
|
+
while !["\0", "\r"].include?(first_byte = @data.read(1))
|
192
|
+
column_data = first_byte + @data.read(31)
|
193
|
+
name, type, length, decimal = column_data.unpack('a10 x a x4 C2')
|
191
194
|
if length > 0
|
192
195
|
columns << column_class.new(name.strip, type, length, decimal, version, @encoding)
|
193
196
|
end
|
@@ -197,7 +200,7 @@ module DBF
|
|
197
200
|
end
|
198
201
|
|
199
202
|
def supports_encoding?
|
200
|
-
|
203
|
+
String.new.respond_to? :encoding
|
201
204
|
end
|
202
205
|
|
203
206
|
def foxpro?
|
@@ -251,7 +254,7 @@ module DBF
|
|
251
254
|
|
252
255
|
def find_all(options) #nodoc
|
253
256
|
map do |record|
|
254
|
-
if record.match?
|
257
|
+
if record && record.match?(options)
|
255
258
|
yield record if block_given?
|
256
259
|
record
|
257
260
|
end
|
@@ -259,7 +262,7 @@ module DBF
|
|
259
262
|
end
|
260
263
|
|
261
264
|
def find_first(options) #nodoc
|
262
|
-
detect {|record| record.match?
|
265
|
+
detect {|record| record && record.match?(options)}
|
263
266
|
end
|
264
267
|
|
265
268
|
def deleted_record? #nodoc
|
@@ -268,9 +271,12 @@ module DBF
|
|
268
271
|
|
269
272
|
def get_header_info #nodoc
|
270
273
|
@data.rewind
|
271
|
-
@version, @record_count, @header_length, @record_length, encoding_key =
|
272
|
-
|
273
|
-
|
274
|
+
@version, @record_count, @header_length, @record_length, @encoding_key = read_header
|
275
|
+
@encoding = self.class.encodings[@encoding_key] if supports_encoding?
|
276
|
+
end
|
277
|
+
|
278
|
+
def read_header #nodoc
|
279
|
+
@data.read(DBF_HEADER_SIZE).unpack("H2 x3 V v2 x17H2")
|
274
280
|
end
|
275
281
|
|
276
282
|
def seek(offset) #nodoc
|
@@ -278,7 +284,7 @@ module DBF
|
|
278
284
|
end
|
279
285
|
|
280
286
|
def csv_class #nodoc
|
281
|
-
CSV.const_defined?(:Reader) ? FCSV : CSV
|
287
|
+
@csv_class ||= CSV.const_defined?(:Reader) ? FCSV : CSV
|
282
288
|
end
|
283
289
|
|
284
290
|
def self.encodings #nodoc
|
data/lib/dbf/version.rb
CHANGED
data/spec/dbf/table_spec.rb
CHANGED
@@ -202,16 +202,18 @@ describe DBF::Table do
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
-
describe '
|
206
|
-
|
207
|
-
|
205
|
+
describe 'columns' do
|
206
|
+
before do
|
207
|
+
@table = DBF::Table.new "#{DB_PATH}/dbase_03.dbf"
|
208
|
+
end
|
208
209
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
210
|
+
it 'should have correct size' do
|
211
|
+
@table.columns.size.should == 31
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'should have correct names' do
|
215
|
+
@table.columns.first.name.should == 'Point_ID'
|
216
|
+
@table.columns[29].name.should == 'Easting'
|
215
217
|
end
|
216
218
|
end
|
217
219
|
end
|
metadata
CHANGED
@@ -1,96 +1,60 @@
|
|
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.7.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 7
|
9
|
-
- 2
|
10
|
-
version: 1.7.2
|
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
|
21
|
-
name: fastercsv
|
22
|
-
prerelease: false
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
26
|
-
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 11
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 5
|
32
|
-
- 4
|
33
|
-
version: 1.5.4
|
34
|
-
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-02-21 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
37
15
|
name: rspec
|
38
|
-
|
39
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70326836737820 !ruby/object:Gem::Requirement
|
40
17
|
none: false
|
41
|
-
requirements:
|
18
|
+
requirements:
|
42
19
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 2
|
47
|
-
- 7
|
48
|
-
- 0
|
49
|
-
version: 2.7.0
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.8.0
|
50
22
|
type: :development
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: rake
|
54
23
|
prerelease: false
|
55
|
-
|
24
|
+
version_requirements: *70326836737820
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70326836737100 !ruby/object:Gem::Requirement
|
56
28
|
none: false
|
57
|
-
requirements:
|
29
|
+
requirements:
|
58
30
|
- - ~>
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
hash: 63
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
- 9
|
64
|
-
- 2
|
31
|
+
- !ruby/object:Gem::Version
|
65
32
|
version: 0.9.2
|
66
33
|
type: :development
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: rdoc
|
70
34
|
prerelease: false
|
71
|
-
|
35
|
+
version_requirements: *70326836737100
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rdoc
|
38
|
+
requirement: &70326836736220 !ruby/object:Gem::Requirement
|
72
39
|
none: false
|
73
|
-
requirements:
|
40
|
+
requirements:
|
74
41
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 3
|
79
|
-
- 11
|
80
|
-
version: "3.11"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '3.11'
|
81
44
|
type: :development
|
82
|
-
|
83
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70326836736220
|
47
|
+
description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
|
48
|
+
files.
|
84
49
|
email: keithm@infused.org
|
85
|
-
executables:
|
50
|
+
executables:
|
86
51
|
- dbf
|
87
52
|
extensions: []
|
88
|
-
|
89
|
-
extra_rdoc_files:
|
53
|
+
extra_rdoc_files:
|
90
54
|
- README.md
|
91
55
|
- CHANGELOG.md
|
92
56
|
- MIT-LICENSE
|
93
|
-
files:
|
57
|
+
files:
|
94
58
|
- CHANGELOG.md
|
95
59
|
- Gemfile
|
96
60
|
- Gemfile.lock
|
@@ -134,40 +98,30 @@ files:
|
|
134
98
|
- dbf.gemspec
|
135
99
|
homepage: http://github.com/infused/dbf
|
136
100
|
licenses: []
|
137
|
-
|
138
101
|
post_install_message:
|
139
|
-
rdoc_options:
|
102
|
+
rdoc_options:
|
140
103
|
- --charset=UTF-8
|
141
|
-
require_paths:
|
104
|
+
require_paths:
|
142
105
|
- lib
|
143
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
144
107
|
none: false
|
145
|
-
requirements:
|
146
|
-
- -
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
|
149
|
-
|
150
|
-
- 0
|
151
|
-
version: "0"
|
152
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
113
|
none: false
|
154
|
-
requirements:
|
155
|
-
- -
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
hash: 27
|
158
|
-
segments:
|
159
|
-
- 1
|
160
|
-
- 3
|
161
|
-
- 0
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
162
117
|
version: 1.3.0
|
163
118
|
requirements: []
|
164
|
-
|
165
119
|
rubyforge_project:
|
166
|
-
rubygems_version: 1.8.
|
120
|
+
rubygems_version: 1.8.10
|
167
121
|
signing_key:
|
168
122
|
specification_version: 3
|
169
123
|
summary: Read xBase files
|
170
|
-
test_files:
|
124
|
+
test_files:
|
171
125
|
- spec/dbf/column_spec.rb
|
172
126
|
- spec/dbf/file_formats_spec.rb
|
173
127
|
- spec/dbf/record_spec.rb
|